1.1 --- a/.hgtags Thu Apr 16 17:42:00 2009 +0100
1.2 +++ b/.hgtags Thu Apr 16 19:10:32 2009 -0700
1.3 @@ -28,3 +28,5 @@
1.4 fea0898259ae41c73620b1815aa48f036216155c jdk7-b51
1.5 bcbeadb4a5d759b29e876ee2c83401e91ff22f60 jdk7-b52
1.6 a2033addca678f9e4c0d92ffa1e389171cc9321d jdk7-b53
1.7 +d1c43d1f5676a24ba86221ac7cad5694f3a9afda jdk7-b54
1.8 +522bb5aa17e0c0cff00b1ed7d1b51bc4db2cfef9 jdk7-b55
2.1 --- a/make/java/java/mapfile-vers Thu Apr 16 17:42:00 2009 +0100
2.2 +++ b/make/java/java/mapfile-vers Thu Apr 16 19:10:32 2009 -0700
2.3 @@ -1,5 +1,5 @@
2.4 #
2.5 -# Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
2.6 +# Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
2.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2.8 #
2.9 # This code is free software; you can redistribute it and/or modify it
2.10 @@ -135,7 +135,8 @@
2.11 Java_java_lang_ClassLoader_00024NativeLibrary_find;
2.12 Java_java_lang_ClassLoader_00024NativeLibrary_load;
2.13 Java_java_lang_ClassLoader_00024NativeLibrary_unload;
2.14 - Java_java_lang_ClassLoader_registerNatives;
2.15 + Java_java_lang_ClassLoader_getCaller;
2.16 + Java_java_lang_ClassLoader_registerNatives;
2.17 Java_java_lang_Compiler_registerNatives;
2.18 Java_java_lang_Double_longBitsToDouble;
2.19 Java_java_lang_Double_doubleToRawLongBits;
3.1 --- a/make/java/net/FILES_c.gmk Thu Apr 16 17:42:00 2009 +0100
3.2 +++ b/make/java/net/FILES_c.gmk Thu Apr 16 19:10:32 2009 -0700
3.3 @@ -39,6 +39,10 @@
3.4 ResolverConfigurationImpl.c \
3.5 DefaultProxySelector.c
3.6
3.7 +ifeq ($(PLATFORM), solaris)
3.8 + FILES_c += SdpProvider.c
3.9 +endif
3.10 +
3.11 ifeq ($(PLATFORM), linux)
3.12 FILES_c += linux_close.c
3.13 endif
4.1 --- a/make/java/net/Makefile Thu Apr 16 17:42:00 2009 +0100
4.2 +++ b/make/java/net/Makefile Thu Apr 16 19:10:32 2009 -0700
4.3 @@ -108,11 +108,24 @@
4.4 #
4.5 LOCALE_SET_DEFINITION = jre
4.6
4.7 -properties: $(LIBDIR) $(LIBDIR)/net.properties
4.8 +MISC_FILES = $(LIBDIR) $(LIBDIR)/net.properties
4.9
4.10 $(LIBDIR)/net.properties: $(SHARE_SRC)/lib/net.properties
4.11 @$(RM) $@
4.12 $(CP) $< $@
4.13
4.14 -build: properties
4.15 +#
4.16 +# SDP configuration template
4.17 +#
4.18 +ifeq ($(PLATFORM), solaris)
4.19 +SDP_PATH = sdp/sdp.conf.template
4.20 +SDP_CONF = $(LIBDIR)/$(SDP_PATH)
4.21 +$(SDP_CONF): $(PLATFORM_SRC)/lib/$(SDP_PATH)
4.22 + @$(RM) $*
4.23 + $(install-file)
4.24
4.25 +MISC_FILES += $(SDP_CONF)
4.26 +endif
4.27 +
4.28 +build: $(MISC_FILES)
4.29 +
5.1 --- a/make/java/net/mapfile-vers Thu Apr 16 17:42:00 2009 +0100
5.2 +++ b/make/java/net/mapfile-vers Thu Apr 16 19:10:32 2009 -0700
5.3 @@ -90,6 +90,7 @@
5.4 Java_sun_net_dns_ResolverConfigurationImpl_fallbackDomain0;
5.5 Java_sun_net_spi_DefaultProxySelector_init;
5.6 Java_sun_net_spi_DefaultProxySelector_getSystemProxy;
5.7 + Java_sun_net_spi_SdpProvider_convert;
5.8 NET_AllocSockaddr;
5.9 NET_SockaddrToInetAddress;
5.10 NET_SockaddrEqualsInetAddress;
6.1 --- a/make/java/text/FILES_java.gmk Thu Apr 16 17:42:00 2009 +0100
6.2 +++ b/make/java/text/FILES_java.gmk Thu Apr 16 19:10:32 2009 -0700
6.3 @@ -92,11 +92,11 @@
6.4 sun/text/normalizer/SymbolTable.java \
6.5 sun/text/normalizer/Trie.java \
6.6 sun/text/normalizer/TrieIterator.java \
6.7 + sun/text/normalizer/UBiDiProps.java \
6.8 sun/text/normalizer/UCharacter.java \
6.9 sun/text/normalizer/UCharacterIterator.java \
6.10 sun/text/normalizer/UCharacterProperty.java \
6.11 sun/text/normalizer/UCharacterPropertyReader.java \
6.12 - sun/text/normalizer/UProperty.java \
6.13 sun/text/normalizer/UTF16.java \
6.14 sun/text/normalizer/UnicodeMatcher.java \
6.15 sun/text/normalizer/UnicodeSet.java \
7.1 --- a/make/java/text/Makefile Thu Apr 16 17:42:00 2009 +0100
7.2 +++ b/make/java/text/Makefile Thu Apr 16 19:10:32 2009 -0700
7.3 @@ -64,7 +64,8 @@
7.4 $(TEXT_CLASSDIR)/SentenceBreakIteratorData
7.5
7.6 ICU_FILES = $(TEXT_CLASSDIR)/unorm.icu \
7.7 - $(TEXT_CLASSDIR)/uprops.icu
7.8 + $(TEXT_CLASSDIR)/uprops.icu \
7.9 + $(TEXT_CLASSDIR)/ubidi.icu
7.10
7.11 # builder
7.12 GENERATEBREAKITERATORDATA_JARFILE = \
7.13 @@ -89,7 +90,7 @@
7.14 build: $(BIFILES) $(ICU_FILES)
7.15
7.16 #
7.17 -# Extra rules to copy unorm.icu and uprops.icu
7.18 +# Extra rules to copy unorm.icu, uprops.icu, and ubidi.icu
7.19 #
7.20 $(TEXT_CLASSDIR)/unorm.icu: $(TEXT_SRCDIR)/unorm.icu
7.21 $(install-file)
7.22 @@ -97,6 +98,9 @@
7.23 $(TEXT_CLASSDIR)/uprops.icu: $(TEXT_SRCDIR)/uprops.icu
7.24 $(install-file)
7.25
7.26 +$(TEXT_CLASSDIR)/ubidi.icu: $(TEXT_SRCDIR)/ubidi.icu
7.27 + $(install-file)
7.28 +
7.29 clean clobber::
7.30 $(RM) -r $(TEXT_CLASSES)
7.31 $(RM) -r $(BIFILES)
8.1 --- a/make/sun/awt/Depend.mak Thu Apr 16 17:42:00 2009 +0100
8.2 +++ b/make/sun/awt/Depend.mak Thu Apr 16 19:10:32 2009 -0700
8.3 @@ -71,6 +71,7 @@
8.4 $(STUBDIR)/Ole2.h \
8.5 $(STUBDIR)/Zmouse.h \
8.6 $(STUBDIR)/cderr.h \
8.7 + $(STUBDIR)/commctrl.h \
8.8 $(STUBDIR)/commdlg.h \
8.9 $(STUBDIR)/direct.h \
8.10 $(STUBDIR)/d3dcom.h \
9.1 --- a/make/sun/awt/FILES_c_windows.gmk Thu Apr 16 17:42:00 2009 +0100
9.2 +++ b/make/sun/awt/FILES_c_windows.gmk Thu Apr 16 19:10:32 2009 -0700
9.3 @@ -1,5 +1,5 @@
9.4 #
9.5 -# Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
9.6 +# Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
9.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
9.8 #
9.9 # This code is free software; you can redistribute it and/or modify it
9.10 @@ -104,7 +104,8 @@
9.11 OGLVertexCache.c \
9.12 WGLGraphicsConfig.c \
9.13 WGLSurfaceData.c \
9.14 - AccelGlyphCache.c
9.15 + AccelGlyphCache.c \
9.16 + rect.c
9.17
9.18 FILES_cpp = \
9.19 CmdIDList.cpp \
9.20 @@ -199,5 +200,6 @@
9.21 ShellFolder2.cpp \
9.22 ThemeReader.cpp \
9.23 ComCtl32Util.cpp \
9.24 + DllUtil.cpp \
9.25 initIDs.cpp \
9.26 MouseInfo.cpp
10.1 --- a/make/sun/awt/FILES_export_unix.gmk Thu Apr 16 17:42:00 2009 +0100
10.2 +++ b/make/sun/awt/FILES_export_unix.gmk Thu Apr 16 19:10:32 2009 -0700
10.3 @@ -1,5 +1,5 @@
10.4 #
10.5 -# Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
10.6 +# Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
10.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
10.8 #
10.9 # This code is free software; you can redistribute it and/or modify it
10.10 @@ -107,7 +107,8 @@
10.11 sun/java2d/x11/X11Renderer.java \
10.12 sun/java2d/x11/X11SurfaceData.java \
10.13 com/sun/java/swing/plaf/gtk/GTKEngine.java \
10.14 - com/sun/java/swing/plaf/gtk/GTKStyle.java
10.15 + com/sun/java/swing/plaf/gtk/GTKStyle.java \
10.16 + sun/awt/ExtendedKeyCodes.java
10.17
10.18
10.19 FILES_export2 = \
11.1 --- a/make/sun/awt/FILES_export_windows.gmk Thu Apr 16 17:42:00 2009 +0100
11.2 +++ b/make/sun/awt/FILES_export_windows.gmk Thu Apr 16 19:10:32 2009 -0700
11.3 @@ -1,5 +1,5 @@
11.4 #
11.5 -# Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
11.6 +# Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
11.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
11.8 #
11.9 # This code is free software; you can redistribute it and/or modify it
11.10 @@ -154,7 +154,7 @@
11.11 sun/awt/datatransfer/DataTransferer.java \
11.12 sun/awt/datatransfer/SunClipboard.java \
11.13 sun/awt/dnd/SunDragSourceContextPeer.java \
11.14 - sun/awt/windows/WToolkitThreadBlockedHandler.java
11.15 + sun/awt/windows/WToolkitThreadBlockedHandler.java
11.16
11.17 FILES_export3 = \
11.18 java/awt/CheckboxMenuItem.java \
11.19 @@ -214,6 +214,7 @@
11.20 sun/awt/windows/WBufferStrategy.java \
11.21 sun/awt/windows/WTrayIconPeer.java \
11.22 sun/awt/image/ImagingLib.java \
11.23 + sun/awt/ExtendedKeyCodes.java \
11.24 sun/java2d/pipe/hw/AccelSurface.java \
11.25 sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \
11.26 sun/java2d/pipe/hw/ContextCapabilities.java \
12.1 --- a/make/sun/awt/Makefile Thu Apr 16 17:42:00 2009 +0100
12.2 +++ b/make/sun/awt/Makefile Thu Apr 16 19:10:32 2009 -0700
12.3 @@ -1,5 +1,5 @@
12.4 #
12.5 -# Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
12.6 +# Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
12.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
12.8 #
12.9 # This code is free software; you can redistribute it and/or modify it
12.10 @@ -219,6 +219,7 @@
12.11 vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/shell
12.12 vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/medialib
12.13 vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/debug
12.14 +vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/utility
12.15 vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d
12.16 vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops
12.17 vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe
13.1 --- a/make/sun/awt/README Thu Apr 16 17:42:00 2009 +0100
13.2 +++ b/make/sun/awt/README Thu Apr 16 19:10:32 2009 -0700
13.3 @@ -6,11 +6,9 @@
13.4
13.5 Included in this project is a generated file, make.depend, which lists
13.6 all interdependencies of the source files. This file is generated *on
13.7 -Solaris* with the following commands:
13.8 +Solaris or Linux* with the following command:
13.9
13.10 - % sccs edit make.depend
13.11 % gnumake -f Depend.mak
13.12 - % sccs delget make.depend
13.13
13.14 This step only needs to be run when new files are added to the project,
13.15 or include statements are changed.
14.1 --- a/make/sun/awt/make.depend Thu Apr 16 17:42:00 2009 +0100
14.2 +++ b/make/sun/awt/make.depend Thu Apr 16 19:10:32 2009 -0700
14.3 @@ -1,4 +1,4 @@
14.4 -$(OBJDIR)/AccelGlyphCache.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.5 +$(OBJDIR)/AccelGlyphCache.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.6
14.7 $(OBJDIR)/AlphaMacros.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.8
14.9 @@ -14,143 +14,143 @@
14.10
14.11 $(OBJDIR)/AnyShort.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.12
14.13 -$(OBJDIR)/awt_AWTEvent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.14 +$(OBJDIR)/awt_AWTEvent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.15
14.16 -$(OBJDIR)/awt_BitmapUtil.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.17 +$(OBJDIR)/awt_BitmapUtil.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.18
14.19 -$(OBJDIR)/awt_Brush.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.20 +$(OBJDIR)/awt_Brush.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.21
14.22 -$(OBJDIR)/awt_Button.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.23 +$(OBJDIR)/awt_Button.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.24
14.25 -$(OBJDIR)/awt_Canvas.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.26 +$(OBJDIR)/awt_Canvas.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.27
14.28 -$(OBJDIR)/awt_Checkbox.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.29 +$(OBJDIR)/awt_Checkbox.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.30
14.31 -$(OBJDIR)/awt_Choice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.32 +$(OBJDIR)/awt_Choice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.33
14.34 -$(OBJDIR)/awt_Clipboard.obj:: $(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.35 +$(OBJDIR)/awt_Clipboard.obj:: $(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.36
14.37 -$(OBJDIR)/awt_Color.obj:: $(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.38 +$(OBJDIR)/awt_Color.obj:: $(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.39
14.40 -$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.41 +$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.42
14.43 -$(OBJDIR)/awt_Container.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.44 +$(OBJDIR)/awt_Container.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.45
14.46 -$(OBJDIR)/awt_Cursor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.47 +$(OBJDIR)/awt_Cursor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.48
14.49 -$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.50 +$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.51
14.52 -$(OBJDIR)/awt_Debug.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.53 +$(OBJDIR)/awt_Debug.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.54
14.55 -$(OBJDIR)/awt_Desktop.obj:: ../../../src/share/javavm/export/jni.h ../../../src/windows/javavm/export/jni_md.h
14.56 +$(OBJDIR)/awt_Desktop.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.57
14.58 -$(OBJDIR)/awt_DesktopProperties.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.59 +$(OBJDIR)/awt_DesktopProperties.obj:: $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.60
14.61 -$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.62 +$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.63
14.64 -$(OBJDIR)/awt_Dimension.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.65 +$(OBJDIR)/awt_Dimension.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.66
14.67 -$(OBJDIR)/awt_DnDDS.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.68 +$(OBJDIR)/awt_DnDDS.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.69
14.70 -$(OBJDIR)/awt_DnDDT.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.71 +$(OBJDIR)/awt_DnDDT.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.72
14.73 -$(OBJDIR)/awt_DrawingSurface.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.74 +$(OBJDIR)/awt_DrawingSurface.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.75
14.76 -$(OBJDIR)/awt_Event.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.77 +$(OBJDIR)/awt_Event.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.78
14.79 -$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.80 +$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.81
14.82 -$(OBJDIR)/awt_Font.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.83 +$(OBJDIR)/awt_Font.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.84
14.85 -$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.86 +$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.87
14.88 -$(OBJDIR)/awt_GDIObject.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.89 +$(OBJDIR)/awt_GDIObject.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.90
14.91 -$(OBJDIR)/awt_IconCursor.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.92 +$(OBJDIR)/awt_IconCursor.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.93
14.94 $(OBJDIR)/awt_ImageRep.obj:: $(CLASSHDRDIR)/sun_awt_image_ImageRepresentation.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.95
14.96 $(OBJDIR)/awt_ImagingLib.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_image_ConvolveOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h
14.97
14.98 -$(OBJDIR)/awt_InputEvent.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.99 +$(OBJDIR)/awt_InputEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.100
14.101 -$(OBJDIR)/awt_InputMethod.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.102 +$(OBJDIR)/awt_InputMethod.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.103
14.104 -$(OBJDIR)/awt_InputTextInfor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.105 +$(OBJDIR)/awt_InputTextInfor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.106
14.107 -$(OBJDIR)/awt_Insets.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.108 +$(OBJDIR)/awt_Insets.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.109
14.110 -$(OBJDIR)/awt_KeyboardFocusManager.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.111 +$(OBJDIR)/awt_KeyboardFocusManager.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.112
14.113 -$(OBJDIR)/awt_KeyEvent.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.114 +$(OBJDIR)/awt_KeyEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.115
14.116 -$(OBJDIR)/awt_Label.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.117 +$(OBJDIR)/awt_Label.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.118
14.119 -$(OBJDIR)/awt_List.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.120 +$(OBJDIR)/awt_List.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.121
14.122 -$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.123 +$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.124
14.125 -$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.126 +$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.127
14.128 -$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.129 +$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.130
14.131 $(OBJDIR)/awt_Mlib.obj:: $(CLASSHDRDIR)/java_awt_image_BufferedImage.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Mlib.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.132
14.133 -$(OBJDIR)/awt_MouseEvent.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.134 +$(OBJDIR)/awt_MouseEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.135
14.136 -$(OBJDIR)/awt_new.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.137 +$(OBJDIR)/awt_new.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.138
14.139 -$(OBJDIR)/awt_Object.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.140 +$(OBJDIR)/awt_Object.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.141
14.142 -$(OBJDIR)/awt_Palette.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.143 +$(OBJDIR)/awt_Palette.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.144
14.145 -$(OBJDIR)/awt_Panel.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.146 +$(OBJDIR)/awt_Panel.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.147
14.148 $(OBJDIR)/awt_parseImage.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h
14.149
14.150 -$(OBJDIR)/awt_Pen.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.151 +$(OBJDIR)/awt_Pen.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.152
14.153 -$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.154 +$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.155
14.156 -$(OBJDIR)/awt_PrintControl.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.157 +$(OBJDIR)/awt_PrintControl.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.158
14.159 -$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.160 +$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.161
14.162 -$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.163 +$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.164
14.165 -$(OBJDIR)/awt_Rectangle.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.166 +$(OBJDIR)/awt_Rectangle.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.167
14.168 -$(OBJDIR)/awt_Robot.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.169 +$(OBJDIR)/awt_Robot.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.170
14.171 -$(OBJDIR)/awt_Scrollbar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.172 +$(OBJDIR)/awt_Scrollbar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.173
14.174 -$(OBJDIR)/awt_ScrollPane.obj:: $(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.175 +$(OBJDIR)/awt_ScrollPane.obj:: $(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.176
14.177 -$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.178 +$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.179
14.180 -$(OBJDIR)/awt_TextComponent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.181 +$(OBJDIR)/awt_TextComponent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.182
14.183 -$(OBJDIR)/awt_TextField.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.184 +$(OBJDIR)/awt_TextField.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.185
14.186 -$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.187 +$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.188
14.189 -$(OBJDIR)/awt_TrayIcon.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.190 +$(OBJDIR)/awt_TrayIcon.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.191
14.192 -$(OBJDIR)/awt_Win32GraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.193 +$(OBJDIR)/awt_Win32GraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.194
14.195 -$(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.196 +$(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.197
14.198 -$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.199 +$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.200
14.201 -$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.202 +$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.203 +
14.204 +$(OBJDIR)/BlitBg.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.205
14.206 $(OBJDIR)/Blit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_Blit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.207
14.208 -$(OBJDIR)/BlitBg.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.209 +$(OBJDIR)/BufferedMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.210
14.211 -$(OBJDIR)/BufferedMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.212 -
14.213 -$(OBJDIR)/BufferedRenderPipe.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.214 +$(OBJDIR)/BufferedRenderPipe.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.215
14.216 $(OBJDIR)/BufImgSurfaceData.obj:: $(CLASSHDRDIR)/sun_awt_image_BufImgSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/BufImgSurfaceData.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/img_util_md.h
14.217
14.218 @@ -160,62 +160,64 @@
14.219
14.220 $(OBJDIR)/ByteBinary4Bit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByteBinary.h ../../../src/share/native/sun/java2d/loops/ByteBinary4Bit.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.221
14.222 -$(OBJDIR)/ByteGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.223 +$(OBJDIR)/ByteGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.224
14.225 -$(OBJDIR)/ByteIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.226 +$(OBJDIR)/ByteIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.227
14.228 -$(OBJDIR)/CmdIDList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.229 +$(OBJDIR)/CmdIDList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.230
14.231 -$(OBJDIR)/ComCtl32Util.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.232 +$(OBJDIR)/ComCtl32Util.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.233
14.234 -$(OBJDIR)/D3DBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.235 +$(OBJDIR)/D3DBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.236
14.237 -$(OBJDIR)/D3DBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.238 +$(OBJDIR)/D3DBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.239
14.240 -$(OBJDIR)/D3DContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.241 +$(OBJDIR)/D3DContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.242
14.243 -$(OBJDIR)/D3DGlyphCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.244 +$(OBJDIR)/D3DGlyphCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.245
14.246 -$(OBJDIR)/D3DGraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.247 +$(OBJDIR)/D3DGraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.248
14.249 -$(OBJDIR)/D3DMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.250 +$(OBJDIR)/D3DMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.251
14.252 -$(OBJDIR)/D3DMaskCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.253 +$(OBJDIR)/D3DMaskCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.254
14.255 -$(OBJDIR)/D3DMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.256 +$(OBJDIR)/D3DMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.257
14.258 -$(OBJDIR)/D3DPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.259 +$(OBJDIR)/D3DPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.260
14.261 -$(OBJDIR)/D3DPipelineManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.262 +$(OBJDIR)/D3DPipelineManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.263
14.264 -$(OBJDIR)/D3DRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.265 +$(OBJDIR)/D3DRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.266
14.267 -$(OBJDIR)/D3DRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.268 +$(OBJDIR)/D3DRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.269
14.270 -$(OBJDIR)/D3DResourceManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.271 +$(OBJDIR)/D3DResourceManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.272
14.273 -$(OBJDIR)/D3DSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.274 +$(OBJDIR)/D3DSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.275
14.276 -$(OBJDIR)/D3DTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.277 +$(OBJDIR)/D3DTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.278
14.279 -$(OBJDIR)/D3DVertexCacher.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.280 +$(OBJDIR)/D3DVertexCacher.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.281
14.282 -$(OBJDIR)/DataBufferNative.obj:: $(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.283 +$(OBJDIR)/DataBufferNative.obj:: $(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.284
14.285 -$(OBJDIR)/debug_assert.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.286 +$(OBJDIR)/debug_assert.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.287
14.288 -$(OBJDIR)/debug_mem.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.289 +$(OBJDIR)/debug_mem.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.290
14.291 -$(OBJDIR)/debug_trace.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.292 +$(OBJDIR)/debug_trace.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.293
14.294 -$(OBJDIR)/debug_util.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.295 +$(OBJDIR)/debug_util.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.296
14.297 -$(OBJDIR)/Devices.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.298 +$(OBJDIR)/Devices.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.299
14.300 $(OBJDIR)/Disposer.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.301
14.302 $(OBJDIR)/dither.obj:: ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/windows/native/sun/windows/colordata.h
14.303
14.304 +$(OBJDIR)/DllUtil.obj:: ../../../src/windows/native/sun/windows/DllUtil.h
14.305 +
14.306 $(OBJDIR)/DrawLine.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawLine.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.307
14.308 $(OBJDIR)/DrawPath.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawPath.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/DrawPath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.309 @@ -230,27 +232,27 @@
14.310
14.311 $(OBJDIR)/FillSpans.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillSpans.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.312
14.313 -$(OBJDIR)/FourByteAbgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.314 +$(OBJDIR)/FourByteAbgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.315
14.316 -$(OBJDIR)/FourByteAbgrPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.317 +$(OBJDIR)/FourByteAbgrPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.318
14.319 -$(OBJDIR)/GDIBlitLoops.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.320 +$(OBJDIR)/GDIBlitLoops.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.321
14.322 -$(OBJDIR)/GDIHashtable.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.323 +$(OBJDIR)/GDIHashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.324
14.325 -$(OBJDIR)/GDIRenderer.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.326 +$(OBJDIR)/GDIRenderer.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.327
14.328 -$(OBJDIR)/GDIWindowSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.329 +$(OBJDIR)/GDIWindowSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.330
14.331 $(OBJDIR)/gifdecoder.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.332
14.333 $(OBJDIR)/GraphicsPrimitiveMgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_GraphicsPrimitiveMgr.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.334
14.335 -$(OBJDIR)/Hashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.336 +$(OBJDIR)/Hashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.337
14.338 $(OBJDIR)/imageInitIDs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.339
14.340 -$(OBJDIR)/img_colors.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.341 +$(OBJDIR)/img_colors.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.342
14.343 $(OBJDIR)/img_globals.obj:: $(CLASSHDRDIR)/java_awt_image_DirectColorModel.h $(CLASSHDRDIR)/java_awt_image_IndexColorModel.h $(CLASSHDRDIR)/java_awt_Transparency.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/windows/javavm/export/jni_md.h
14.344
14.345 @@ -260,49 +262,49 @@
14.346
14.347 $(OBJDIR)/initIDs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.348
14.349 -$(OBJDIR)/IntArgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.350 +$(OBJDIR)/IntArgbBm.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.351
14.352 -$(OBJDIR)/IntArgbBm.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.353 +$(OBJDIR)/IntArgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.354
14.355 $(OBJDIR)/IntArgbPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.356
14.357 -$(OBJDIR)/IntBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.358 +$(OBJDIR)/IntBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.359
14.360 -$(OBJDIR)/IntRgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.361 +$(OBJDIR)/IntRgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.362
14.363 -$(OBJDIR)/IntRgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.364 +$(OBJDIR)/IntRgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.365
14.366 $(OBJDIR)/MaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskBlit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.367
14.368 $(OBJDIR)/MaskFill.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskFill.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.369
14.370 -$(OBJDIR)/MouseInfo.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.371 +$(OBJDIR)/MouseInfo.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.372
14.373 -$(OBJDIR)/ObjectList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.374 +$(OBJDIR)/ObjectList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.375
14.376 -$(OBJDIR)/OGLBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.377 +$(OBJDIR)/OGLBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.378
14.379 -$(OBJDIR)/OGLBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.380 +$(OBJDIR)/OGLBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.381
14.382 -$(OBJDIR)/OGLContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.383 +$(OBJDIR)/OGLContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.384
14.385 -$(OBJDIR)/OGLFuncs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.386 +$(OBJDIR)/OGLFuncs.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.387
14.388 -$(OBJDIR)/OGLMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.389 +$(OBJDIR)/OGLMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.390
14.391 -$(OBJDIR)/OGLMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.392 +$(OBJDIR)/OGLMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.393
14.394 -$(OBJDIR)/OGLPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.395 +$(OBJDIR)/OGLPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.396
14.397 -$(OBJDIR)/OGLRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.398 +$(OBJDIR)/OGLRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.399
14.400 -$(OBJDIR)/OGLRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.401 +$(OBJDIR)/OGLRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.402
14.403 -$(OBJDIR)/OGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.404 +$(OBJDIR)/OGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.405
14.406 -$(OBJDIR)/OGLTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.407 +$(OBJDIR)/OGLTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.408
14.409 -$(OBJDIR)/OGLVertexCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.410 +$(OBJDIR)/OGLVertexCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h
14.411
14.412 $(OBJDIR)/ProcessPath.obj:: $(CLASSHDRDIR)/java_awt_geom_PathIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.413
14.414 @@ -314,36 +316,36 @@
14.415
14.416 $(OBJDIR)/ShapeSpanIterator.obj:: $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_ShapeSpanIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/pipe/PathConsumer2D.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.417
14.418 -$(OBJDIR)/ShellFolder2.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.419 +$(OBJDIR)/ShellFolder2.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.420
14.421 $(OBJDIR)/SpanClipRenderer.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_RegionIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_SpanClipRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.422
14.423 $(OBJDIR)/SurfaceData.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h
14.424
14.425 -$(OBJDIR)/ThemeReader.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.426 +$(OBJDIR)/ThemeReader.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.427
14.428 -$(OBJDIR)/ThreeByteBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.429 +$(OBJDIR)/ThreeByteBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.430
14.431 -$(OBJDIR)/Trace.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.432 +$(OBJDIR)/Trace.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h
14.433
14.434 $(OBJDIR)/TransformHelper.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_loops_TransformHelper.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.435
14.436 -$(OBJDIR)/Ushort4444Argb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.437 +$(OBJDIR)/Ushort4444Argb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.438
14.439 -$(OBJDIR)/Ushort555Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.440 +$(OBJDIR)/Ushort555Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.441
14.442 -$(OBJDIR)/Ushort555Rgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.443 +$(OBJDIR)/Ushort555Rgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.444
14.445 -$(OBJDIR)/Ushort565Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.446 +$(OBJDIR)/Ushort565Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.447
14.448 -$(OBJDIR)/UshortGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.449 +$(OBJDIR)/UshortGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.450
14.451 -$(OBJDIR)/UshortIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.452 +$(OBJDIR)/UshortIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h
14.453
14.454 -$(OBJDIR)/WGLGraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
14.455 +$(OBJDIR)/WGLGraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
14.456
14.457 -$(OBJDIR)/WGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
14.458 +$(OBJDIR)/WGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h
14.459
14.460 -$(OBJDIR)/WindowsFlags.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.461 +$(OBJDIR)/WindowsFlags.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.462
14.463 -$(OBJDIR)/WPrinterJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
14.464 +$(OBJDIR)/WPrinterJob.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h
15.1 --- a/make/sun/awt/mapfile-mawt-vers Thu Apr 16 17:42:00 2009 +0100
15.2 +++ b/make/sun/awt/mapfile-mawt-vers Thu Apr 16 19:10:32 2009 -0700
15.3 @@ -291,6 +291,7 @@
15.4 Java_sun_awt_X11GraphicsConfig_createBackBuffer;
15.5 Java_sun_awt_X11GraphicsConfig_destroyBackBuffer;
15.6 Java_sun_awt_X11GraphicsConfig_swapBuffers;
15.7 + Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable;
15.8 Java_sun_awt_X11GraphicsDevice_isDBESupported;
15.9 Java_sun_awt_X11GraphicsDevice_getDisplay;
15.10 Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals;
16.1 --- a/make/sun/awt/mapfile-vers-linux Thu Apr 16 17:42:00 2009 +0100
16.2 +++ b/make/sun/awt/mapfile-vers-linux Thu Apr 16 19:10:32 2009 -0700
16.3 @@ -407,6 +407,7 @@
16.4 Java_sun_awt_X11GraphicsConfig_getNumColors;
16.5 Java_sun_awt_X11GraphicsConfig_getXResolution;
16.6 Java_sun_awt_X11GraphicsConfig_getYResolution;
16.7 + Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable;
16.8 Java_sun_awt_X11GraphicsDevice_isDBESupported;
16.9 Java_sun_awt_X11GraphicsDevice_getDisplay;
16.10 Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals;
17.1 --- a/make/sun/net/FILES_java.gmk Thu Apr 16 17:42:00 2009 +0100
17.2 +++ b/make/sun/net/FILES_java.gmk Thu Apr 16 19:10:32 2009 -0700
17.3 @@ -39,6 +39,7 @@
17.4 sun/net/TransferProtocolClient.java \
17.5 sun/net/ConnectionResetException.java \
17.6 sun/net/NetProperties.java \
17.7 + sun/net/NetHooks.java \
17.8 sun/net/util/IPAddressUtil.java \
17.9 sun/net/dns/ResolverConfiguration.java \
17.10 sun/net/dns/ResolverConfigurationImpl.java \
17.11 @@ -123,3 +124,7 @@
17.12 ifeq ($(PLATFORM), windows)
17.13 FILES_java += sun/net/www/protocol/http/NTLMAuthSequence.java
17.14 endif
17.15 +
17.16 +ifeq ($(PLATFORM), solaris)
17.17 + FILES_java += sun/net/spi/SdpProvider.java
17.18 +endif
18.1 --- a/make/sun/xawt/FILES_c_unix.gmk Thu Apr 16 17:42:00 2009 +0100
18.2 +++ b/make/sun/xawt/FILES_c_unix.gmk Thu Apr 16 19:10:32 2009 -0700
18.3 @@ -78,4 +78,5 @@
18.4 awt_Plugin.c \
18.5 gtk2_interface.c \
18.6 swing_GTKEngine.c \
18.7 - swing_GTKStyle.c
18.8 + swing_GTKStyle.c \
18.9 + rect.c
19.1 --- a/make/sun/xawt/Makefile Thu Apr 16 17:42:00 2009 +0100
19.2 +++ b/make/sun/xawt/Makefile Thu Apr 16 19:10:32 2009 -0700
19.3 @@ -79,6 +79,7 @@
19.4 vpath %.c $(SHARE_SRC)/native/sun/java2d/loops
19.5 vpath %.c $(SHARE_SRC)/native/sun/java2d/pipe
19.6 vpath %.c $(SHARE_SRC)/native/sun/awt/medialib
19.7 +vpath %.c $(SHARE_SRC)/native/sun/awt/utility
19.8 vpath %.cpp $(SHARE_SRC)/native/sun/image
19.9 vpath %.c $(SHARE_SRC)/native/sun/font
19.10 vpath %.c $(PLATFORM_SRC)/native/sun/awt/robot_child
19.11 @@ -274,6 +275,23 @@
19.12 $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \
19.13 $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png
19.14
19.15 +
19.16 +ICONPATH=$(PLATFORM_SRC)/classes/sun/awt/X11
19.17 +
19.18 +ICONS += \
19.19 + $(ICONPATH)/security-icon-bw16.png \
19.20 + $(ICONPATH)/security-icon-interim16.png \
19.21 + $(ICONPATH)/security-icon-yellow16.png \
19.22 + $(ICONPATH)/security-icon-bw24.png \
19.23 + $(ICONPATH)/security-icon-interim24.png \
19.24 + $(ICONPATH)/security-icon-yellow24.png \
19.25 + $(ICONPATH)/security-icon-bw32.png \
19.26 + $(ICONPATH)/security-icon-interim32.png \
19.27 + $(ICONPATH)/security-icon-yellow32.png \
19.28 + $(ICONPATH)/security-icon-bw48.png \
19.29 + $(ICONPATH)/security-icon-interim48.png \
19.30 + $(ICONPATH)/security-icon-yellow48.png
19.31 +
19.32 TEMPDIR_CLASSES = $(TEMPDIR)/classes
19.33
19.34 $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java
20.1 --- a/make/sun/xawt/mapfile-vers Thu Apr 16 17:42:00 2009 +0100
20.2 +++ b/make/sun/xawt/mapfile-vers Thu Apr 16 19:10:32 2009 -0700
20.3 @@ -1,5 +1,5 @@
20.4 #
20.5 -# Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
20.6 +# Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
20.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
20.8 #
20.9 # This code is free software; you can redistribute it and/or modify it
20.10 @@ -93,6 +93,9 @@
20.11 Java_sun_awt_X11_XlibWrapper_XGetWMHints;
20.12 Java_sun_awt_X11_XlibWrapper_XShapeQueryExtension;
20.13 Java_sun_awt_X11_XlibWrapper_SetRectangularShape;
20.14 + Java_sun_awt_X11_XlibWrapper_SetBitmapShape;
20.15 + Java_sun_awt_X11_XlibWrapper_XConfigureWindow;
20.16 + Java_sun_awt_X11_XlibWrapper_SetZOrder;
20.17 Java_sun_awt_X11_XToolkit_initIDs;
20.18 Java_sun_awt_X11_XWindow_getNativeColor;
20.19 Java_sun_awt_X11_XWindow_getWMInsets;
20.20 @@ -217,6 +220,7 @@
20.21 Java_sun_awt_X11GraphicsConfig_createBackBuffer;
20.22 Java_sun_awt_X11GraphicsConfig_destroyBackBuffer;
20.23 Java_sun_awt_X11GraphicsConfig_swapBuffers;
20.24 + Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable;
20.25 Java_java_awt_Insets_initIDs;
20.26 Java_java_awt_KeyboardFocusManager_initIDs;
20.27 Java_java_awt_Font_initIDs;
20.28 @@ -289,16 +293,26 @@
20.29 Java_sun_awt_X11_XlibWrapper_XGetIconSizes;
20.30 Java_sun_awt_X11_XlibWrapper_XKeycodeToKeysym;
20.31 Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode;
20.32 - Java_sun_awt_X11_XlibWrapper_XQueryKeymap;
20.33 + Java_sun_awt_X11_XlibWrapper_XQueryKeymap;
20.34 + Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup;
20.35 + Java_sun_awt_X11_XlibWrapper_XkbSelectEvents;
20.36 + Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails;
20.37 + Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym;
20.38 + Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion;
20.39 + Java_sun_awt_X11_XlibWrapper_XkbQueryExtension;
20.40 + Java_sun_awt_X11_XlibWrapper_XkbGetMap;
20.41 + Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap;
20.42 + Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard;
20.43 + Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode;
20.44 Java_sun_awt_X11_XlibWrapper_XGetModifierMapping;
20.45 - Java_sun_awt_X11_XlibWrapper_XFreeModifiermap;
20.46 + Java_sun_awt_X11_XlibWrapper_XFreeModifiermap;
20.47 Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab;
20.48 Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent;
20.49 Java_sun_awt_X11_XlibWrapper_ExitSecondaryLoop;
20.50 Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList;
20.51 Java_sun_awt_X11_XlibWrapper_XGrabServer;
20.52 Java_sun_awt_X11_XlibWrapper_XUngrabServer;
20.53 - Java_sun_awt_X11_XlibWrapper_XPutBackEvent;
20.54 + Java_sun_awt_X11_XlibWrapper_XPutBackEvent;
20.55 Java_sun_awt_X11_XlibWrapper_XConvertCase;
20.56 Java_sun_awt_X11_XlibWrapper_XSynchronize;
20.57 Java_java_awt_FileDialog_initIDs;
21.1 --- a/make/tools/GenerateCharacter/CharacterData00.java.template Thu Apr 16 17:42:00 2009 +0100
21.2 +++ b/make/tools/GenerateCharacter/CharacterData00.java.template Thu Apr 16 19:10:32 2009 -0700
21.3 @@ -144,6 +144,55 @@
21.4 case 0x1FBC : mapChar = 0x1FB3; break;
21.5 case 0x1FCC : mapChar = 0x1FC3; break;
21.6 case 0x1FFC : mapChar = 0x1FF3; break;
21.7 +
21.8 + case 0x023A : mapChar = 0x2C65; break;
21.9 + case 0x023E : mapChar = 0x2C66; break;
21.10 + case 0x10A0 : mapChar = 0x2D00; break;
21.11 + case 0x10A1 : mapChar = 0x2D01; break;
21.12 + case 0x10A2 : mapChar = 0x2D02; break;
21.13 + case 0x10A3 : mapChar = 0x2D03; break;
21.14 + case 0x10A4 : mapChar = 0x2D04; break;
21.15 + case 0x10A5 : mapChar = 0x2D05; break;
21.16 + case 0x10A6 : mapChar = 0x2D06; break;
21.17 + case 0x10A7 : mapChar = 0x2D07; break;
21.18 + case 0x10A8 : mapChar = 0x2D08; break;
21.19 + case 0x10A9 : mapChar = 0x2D09; break;
21.20 + case 0x10AA : mapChar = 0x2D0A; break;
21.21 + case 0x10AB : mapChar = 0x2D0B; break;
21.22 + case 0x10AC : mapChar = 0x2D0C; break;
21.23 + case 0x10AD : mapChar = 0x2D0D; break;
21.24 + case 0x10AE : mapChar = 0x2D0E; break;
21.25 + case 0x10AF : mapChar = 0x2D0F; break;
21.26 + case 0x10B0 : mapChar = 0x2D10; break;
21.27 + case 0x10B1 : mapChar = 0x2D11; break;
21.28 + case 0x10B2 : mapChar = 0x2D12; break;
21.29 + case 0x10B3 : mapChar = 0x2D13; break;
21.30 + case 0x10B4 : mapChar = 0x2D14; break;
21.31 + case 0x10B5 : mapChar = 0x2D15; break;
21.32 + case 0x10B6 : mapChar = 0x2D16; break;
21.33 + case 0x10B7 : mapChar = 0x2D17; break;
21.34 + case 0x10B8 : mapChar = 0x2D18; break;
21.35 + case 0x10B9 : mapChar = 0x2D19; break;
21.36 + case 0x10BA : mapChar = 0x2D1A; break;
21.37 + case 0x10BB : mapChar = 0x2D1B; break;
21.38 + case 0x10BC : mapChar = 0x2D1C; break;
21.39 + case 0x10BD : mapChar = 0x2D1D; break;
21.40 + case 0x10BE : mapChar = 0x2D1E; break;
21.41 + case 0x10BF : mapChar = 0x2D1F; break;
21.42 + case 0x10C0 : mapChar = 0x2D20; break;
21.43 + case 0x10C1 : mapChar = 0x2D21; break;
21.44 + case 0x10C2 : mapChar = 0x2D22; break;
21.45 + case 0x10C3 : mapChar = 0x2D23; break;
21.46 + case 0x10C4 : mapChar = 0x2D24; break;
21.47 + case 0x10C5 : mapChar = 0x2D25; break;
21.48 + case 0x1E9E : mapChar = 0x00DF; break;
21.49 + case 0x2C62 : mapChar = 0x026B; break;
21.50 + case 0x2C63 : mapChar = 0x1D7D; break;
21.51 + case 0x2C64 : mapChar = 0x027D; break;
21.52 + case 0x2C6D : mapChar = 0x0251; break;
21.53 + case 0x2C6E : mapChar = 0x0271; break;
21.54 + case 0x2C6F : mapChar = 0x0250; break;
21.55 + case 0xA77D : mapChar = 0x1D79; break;
21.56 // default mapChar is already set, so no
21.57 // need to redo it here.
21.58 // default : mapChar = ch;
21.59 @@ -196,6 +245,54 @@
21.60 case 0x1FB3 : mapChar = 0x1FBC; break;
21.61 case 0x1FC3 : mapChar = 0x1FCC; break;
21.62 case 0x1FF3 : mapChar = 0x1FFC; break;
21.63 +
21.64 + case 0x0250 : mapChar = 0x2C6F; break;
21.65 + case 0x0251 : mapChar = 0x2C6D; break;
21.66 + case 0x026B : mapChar = 0x2C62; break;
21.67 + case 0x0271 : mapChar = 0x2C6E; break;
21.68 + case 0x027D : mapChar = 0x2C64; break;
21.69 + case 0x1D79 : mapChar = 0xA77D; break;
21.70 + case 0x1D7D : mapChar = 0x2C63; break;
21.71 + case 0x2C65 : mapChar = 0x023A; break;
21.72 + case 0x2C66 : mapChar = 0x023E; break;
21.73 + case 0x2D00 : mapChar = 0x10A0; break;
21.74 + case 0x2D01 : mapChar = 0x10A1; break;
21.75 + case 0x2D02 : mapChar = 0x10A2; break;
21.76 + case 0x2D03 : mapChar = 0x10A3; break;
21.77 + case 0x2D04 : mapChar = 0x10A4; break;
21.78 + case 0x2D05 : mapChar = 0x10A5; break;
21.79 + case 0x2D06 : mapChar = 0x10A6; break;
21.80 + case 0x2D07 : mapChar = 0x10A7; break;
21.81 + case 0x2D08 : mapChar = 0x10A8; break;
21.82 + case 0x2D09 : mapChar = 0x10A9; break;
21.83 + case 0x2D0A : mapChar = 0x10AA; break;
21.84 + case 0x2D0B : mapChar = 0x10AB; break;
21.85 + case 0x2D0C : mapChar = 0x10AC; break;
21.86 + case 0x2D0D : mapChar = 0x10AD; break;
21.87 + case 0x2D0E : mapChar = 0x10AE; break;
21.88 + case 0x2D0F : mapChar = 0x10AF; break;
21.89 + case 0x2D10 : mapChar = 0x10B0; break;
21.90 + case 0x2D11 : mapChar = 0x10B1; break;
21.91 + case 0x2D12 : mapChar = 0x10B2; break;
21.92 + case 0x2D13 : mapChar = 0x10B3; break;
21.93 + case 0x2D14 : mapChar = 0x10B4; break;
21.94 + case 0x2D15 : mapChar = 0x10B5; break;
21.95 + case 0x2D16 : mapChar = 0x10B6; break;
21.96 + case 0x2D17 : mapChar = 0x10B7; break;
21.97 + case 0x2D18 : mapChar = 0x10B8; break;
21.98 + case 0x2D19 : mapChar = 0x10B9; break;
21.99 + case 0x2D1A : mapChar = 0x10BA; break;
21.100 + case 0x2D1B : mapChar = 0x10BB; break;
21.101 + case 0x2D1C : mapChar = 0x10BC; break;
21.102 + case 0x2D1D : mapChar = 0x10BD; break;
21.103 + case 0x2D1E : mapChar = 0x10BE; break;
21.104 + case 0x2D1F : mapChar = 0x10BF; break;
21.105 + case 0x2D20 : mapChar = 0x10C0; break;
21.106 + case 0x2D21 : mapChar = 0x10C1; break;
21.107 + case 0x2D22 : mapChar = 0x10C2; break;
21.108 + case 0x2D23 : mapChar = 0x10C3; break;
21.109 + case 0x2D24 : mapChar = 0x10C4; break;
21.110 + case 0x2D25 : mapChar = 0x10C5; break;
21.111 // ch must have a 1:M case mapping, but we
21.112 // can't handle it here. Return ch.
21.113 // since mapChar is already set, no need
21.114 @@ -315,6 +412,12 @@
21.115 case 0x32BE: retval = 49; break; // CIRCLED NUMBER FORTY NINE
21.116 case 0x32BF: retval = 50; break; // CIRCLED NUMBER FIFTY
21.117
21.118 + case 0x0D71: retval = 100; break; // MALAYALAM NUMBER ONE HUNDRED
21.119 + case 0x0D72: retval = 1000; break; // MALAYALAM NUMBER ONE THOUSAND
21.120 + case 0x2186: retval = 50; break; // ROMAN NUMERAL FIFTY EARLY FORM
21.121 + case 0x2187: retval = 50000; break; // ROMAN NUMERAL FIFTY THOUSAND
21.122 + case 0x2188: retval = 100000; break; // ROMAN NUMERAL ONE HUNDRED THOUSAND
21.123 +
21.124 default: retval = -2; break;
21.125 }
21.126 break;
21.127 @@ -383,6 +486,54 @@
21.128 case 0x00B5 : mapChar = 0x039C; break;
21.129 case 0x017F : mapChar = 0x0053; break;
21.130 case 0x1FBE : mapChar = 0x0399; break;
21.131 +
21.132 + case 0x0250 : mapChar = 0x2C6F; break;
21.133 + case 0x0251 : mapChar = 0x2C6D; break;
21.134 + case 0x026B : mapChar = 0x2C62; break;
21.135 + case 0x0271 : mapChar = 0x2C6E; break;
21.136 + case 0x027D : mapChar = 0x2C64; break;
21.137 + case 0x1D79 : mapChar = 0xA77D; break;
21.138 + case 0x1D7D : mapChar = 0x2C63; break;
21.139 + case 0x2C65 : mapChar = 0x023A; break;
21.140 + case 0x2C66 : mapChar = 0x023E; break;
21.141 + case 0x2D00 : mapChar = 0x10A0; break;
21.142 + case 0x2D01 : mapChar = 0x10A1; break;
21.143 + case 0x2D02 : mapChar = 0x10A2; break;
21.144 + case 0x2D03 : mapChar = 0x10A3; break;
21.145 + case 0x2D04 : mapChar = 0x10A4; break;
21.146 + case 0x2D05 : mapChar = 0x10A5; break;
21.147 + case 0x2D06 : mapChar = 0x10A6; break;
21.148 + case 0x2D07 : mapChar = 0x10A7; break;
21.149 + case 0x2D08 : mapChar = 0x10A8; break;
21.150 + case 0x2D09 : mapChar = 0x10A9; break;
21.151 + case 0x2D0A : mapChar = 0x10AA; break;
21.152 + case 0x2D0B : mapChar = 0x10AB; break;
21.153 + case 0x2D0C : mapChar = 0x10AC; break;
21.154 + case 0x2D0D : mapChar = 0x10AD; break;
21.155 + case 0x2D0E : mapChar = 0x10AE; break;
21.156 + case 0x2D0F : mapChar = 0x10AF; break;
21.157 + case 0x2D10 : mapChar = 0x10B0; break;
21.158 + case 0x2D11 : mapChar = 0x10B1; break;
21.159 + case 0x2D12 : mapChar = 0x10B2; break;
21.160 + case 0x2D13 : mapChar = 0x10B3; break;
21.161 + case 0x2D14 : mapChar = 0x10B4; break;
21.162 + case 0x2D15 : mapChar = 0x10B5; break;
21.163 + case 0x2D16 : mapChar = 0x10B6; break;
21.164 + case 0x2D17 : mapChar = 0x10B7; break;
21.165 + case 0x2D18 : mapChar = 0x10B8; break;
21.166 + case 0x2D19 : mapChar = 0x10B9; break;
21.167 + case 0x2D1A : mapChar = 0x10BA; break;
21.168 + case 0x2D1B : mapChar = 0x10BB; break;
21.169 + case 0x2D1C : mapChar = 0x10BC; break;
21.170 + case 0x2D1D : mapChar = 0x10BD; break;
21.171 + case 0x2D1E : mapChar = 0x10BE; break;
21.172 + case 0x2D1F : mapChar = 0x10BF; break;
21.173 + case 0x2D20 : mapChar = 0x10C0; break;
21.174 + case 0x2D21 : mapChar = 0x10C1; break;
21.175 + case 0x2D22 : mapChar = 0x10C2; break;
21.176 + case 0x2D23 : mapChar = 0x10C3; break;
21.177 + case 0x2D24 : mapChar = 0x10C4; break;
21.178 + case 0x2D25 : mapChar = 0x10C5; break;
21.179 default : mapChar = Character.ERROR; break;
21.180 }
21.181 }
22.1 --- a/make/tools/GenerateCharacter/CharacterData01.java.template Thu Apr 16 17:42:00 2009 +0100
22.2 +++ b/make/tools/GenerateCharacter/CharacterData01.java.template Thu Apr 16 19:10:32 2009 -0700
22.3 @@ -218,6 +218,48 @@
22.4 case 0x10132: retval = 80000; break; // AEGEAN NUMBER EIGHTY THOUSAND
22.5 case 0x10133: retval = 90000; break; // AEGEAN NUMBER NINETY THOUSAND
22.6 case 0x10323: retval = 50; break; // OLD ITALIC NUMERAL FIFTY
22.7 +
22.8 + case 0x010144: retval = 50; break; // ACROPHONIC ATTIC FIFTY
22.9 + case 0x010145: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED
22.10 + case 0x010146: retval = 5000; break; // ACROPHONIC ATTIC FIVE THOUSAND
22.11 + case 0x010147: retval = 50000; break; // ACROPHONIC ATTIC FIFTY THOUSAND
22.12 + case 0x01014A: retval = 50; break; // ACROPHONIC ATTIC FIFTY TALENTS
22.13 + case 0x01014B: retval = 100; break; // ACROPHONIC ATTIC ONE HUNDRED TALENTS
22.14 + case 0x01014C: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED TALENTS
22.15 + case 0x01014D: retval = 1000; break; // ACROPHONIC ATTIC ONE THOUSAND TALENTS
22.16 + case 0x01014E: retval = 5000; break; // ACROPHONIC ATTIC FIVE THOUSAND TALENTS
22.17 + case 0x010151: retval = 50; break; // ACROPHONIC ATTIC FIFTY STATERS
22.18 + case 0x010152: retval = 100; break; // ACROPHONIC ATTIC ONE HUNDRED STATERS
22.19 + case 0x010153: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED STATERS
22.20 + case 0x010154: retval = 1000; break; // ACROPHONIC ATTIC ONE THOUSAND STATERS
22.21 + case 0x010155: retval = 10000; break; // ACROPHONIC ATTIC TEN THOUSAND STATERS
22.22 + case 0x010156: retval = 50000; break; // ACROPHONIC ATTIC FIFTY THOUSAND STATERS
22.23 + case 0x010166: retval = 50; break; // ACROPHONIC TROEZENIAN FIFTY
22.24 + case 0x010167: retval = 50; break; // ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM
22.25 + case 0x010168: retval = 50; break; // ACROPHONIC HERMIONIAN FIFTY
22.26 + case 0x010169: retval = 50; break; // ACROPHONIC THESPIAN FIFTY
22.27 + case 0x01016A: retval = 100; break; // ACROPHONIC THESPIAN ONE HUNDRED
22.28 + case 0x01016B: retval = 300; break; // ACROPHONIC THESPIAN THREE HUNDRED
22.29 + case 0x01016C: retval = 500; break; // ACROPHONIC EPIDAUREAN FIVE HUNDRED
22.30 + case 0x01016D: retval = 500; break; // ACROPHONIC TROEZENIAN FIVE HUNDRED
22.31 + case 0x01016E: retval = 500; break; // ACROPHONIC THESPIAN FIVE HUNDRED
22.32 + case 0x01016F: retval = 500; break; // ACROPHONIC CARYSTIAN FIVE HUNDRED
22.33 + case 0x010170: retval = 500; break; // ACROPHONIC NAXIAN FIVE HUNDRED
22.34 + case 0x010171: retval = 1000; break; // ACROPHONIC THESPIAN ONE THOUSAND
22.35 + case 0x010172: retval = 5000; break; // ACROPHONIC THESPIAN FIVE THOUSAND
22.36 + case 0x010174: retval = 50; break; // ACROPHONIC STRATIAN FIFTY MNAS
22.37 + case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY
22.38 + case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED
22.39 + case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED
22.40 + case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED
22.41 + case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED
22.42 + case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND
22.43 + case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR
22.44 + case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE
22.45 + case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX
22.46 + case 0x01D36F: retval = 70; break; // COUNTING ROD TENS DIGIT SEVEN
22.47 + case 0x01D370: retval = 80; break; // COUNTING ROD TENS DIGIT EIGHT
22.48 + case 0x01D371: retval = 90; break; // COUNTING ROD TENS DIGIT NINE
22.49 default: retval = -2; break;
22.50 }
22.51
23.1 --- a/make/tools/UnicodeData/SpecialCasing.txt Thu Apr 16 17:42:00 2009 +0100
23.2 +++ b/make/tools/UnicodeData/SpecialCasing.txt Thu Apr 16 19:10:32 2009 -0700
23.3 @@ -1,12 +1,17 @@
23.4 -# SpecialCasing-4.0.0.txt
23.5 -# Date: 2003-03-14, 20:22:04 GMT [MD]
23.6 +# SpecialCasing-5.1.0.txt
23.7 +# Date: 2008-03-03, 21:58:10 GMT [MD]
23.8 +#
23.9 +# Unicode Character Database
23.10 +# Copyright (c) 1991-2008 Unicode, Inc.
23.11 +# For terms of use, see http://www.unicode.org/terms_of_use.html
23.12 +# For documentation, see UCD.html
23.13 #
23.14 # Special Casing Properties
23.15 #
23.16 # This file is a supplement to the UnicodeData file.
23.17 # It contains additional information about the casing of Unicode characters.
23.18 # (For compatibility, the UnicodeData.txt file only contains case mappings for
23.19 -# characters where they are 1-1, and does not have locale-specific mappings.)
23.20 +# characters where they are 1-1, and independent of context and language.
23.21 # For more information, see the discussion of Case Mappings in the Unicode Standard.
23.22 #
23.23 # All code points not listed in this file that do not have a simple case mappings
23.24 @@ -18,31 +23,31 @@
23.25 #
23.26 # <code>; <lower> ; <title> ; <upper> ; (<condition_list> ;)? # <comment>
23.27 #
23.28 -# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more than
23.29 -# one character, they are separated by spaces. Other than as used to separate elements,
23.30 -# spaces are to be ignored.
23.31 +# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more
23.32 +# than one character, they are separated by spaces. Other than as used to separate
23.33 +# elements, spaces are to be ignored.
23.34 #
23.35 -# The <condition_list> is optional. Where present, it consists of one or more locales or contexts,
23.36 -# separated by spaces. In these conditions:
23.37 +# The <condition_list> is optional. Where present, it consists of one or more language IDs
23.38 +# or contexts, separated by spaces. In these conditions:
23.39 # - A condition list overrides the normal behavior if all of the listed conditions are true.
23.40 # - The context is always the context of the characters in the original string,
23.41 # NOT in the resulting string.
23.42 # - Case distinctions in the condition list are not significant.
23.43 # - Conditions preceded by "Not_" represent the negation of the condition.
23.44 +# The condition list is not represented in the UCD as a formal property.
23.45 #
23.46 -# A locale is defined as:
23.47 -# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> ( "_" <variant> )? )?
23.48 -# <ISO_3166_code> := 2-letter ISO country code,
23.49 -# <ISO_639_code> := 2-letter ISO language code
23.50 +# A language ID is defined by BCP 47, with '-' and '_' treated equivalently.
23.51 #
23.52 -# A context is one of the following, as defined in the Unicode Standard:
23.53 -# Final_Sigma, After_Soft_Dotted, More_Above, Before_Dot, Not_Before_Dot, After_I
23.54 +# A context for a character C is defined by Section 3.13 Default Case
23.55 +# Operations, of The Unicode Standard, Version 5.0.
23.56 +# (This is identical to the context defined by Unicode 4.1.0,
23.57 +# as specified in http://www.unicode.org/versions/Unicode4.1.0/)
23.58 #
23.59 # Parsers of this file must be prepared to deal with future additions to this format:
23.60 # * Additional contexts
23.61 # * Additional fields
23.62 # ================================================================================
23.63 -
23.64 +# @missing 0000..10FFFF; <slc>; <stc>; <suc>
23.65 # ================================================================================
23.66 # Unconditional mappings
23.67 # ================================================================================
23.68 @@ -170,7 +175,7 @@
23.69 1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
23.70 1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
23.71
23.72 -# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases
23.73 +# Some characters with YPOGEGRAMMENI also have no corresponding titlecases
23.74
23.75 1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
23.76 1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
23.77 @@ -184,7 +189,14 @@
23.78 1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
23.79
23.80 # ================================================================================
23.81 -# Conditional mappings
23.82 +# Conditional Mappings
23.83 +# The remainder of this file provides conditional casing data used to produce
23.84 +# full case mappings.
23.85 +# ================================================================================
23.86 +# Language-Insensitive Mappings
23.87 +# These are characters whose full case mappings do not depend on language, but do
23.88 +# depend on context (which characters come before or after). For more information
23.89 +# see the header of this file and the Unicode Standard.
23.90 # ================================================================================
23.91
23.92 # Special case for final form of sigma
23.93 @@ -203,7 +215,10 @@
23.94 # 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA
23.95
23.96 # ================================================================================
23.97 -# Locale-sensitive mappings
23.98 +# Language-Sensitive Mappings
23.99 +# These are characters whose full case mappings depend on language and perhaps also
23.100 +# context (which characters come before or after). For more information
23.101 +# see the header of this file and the Unicode Standard.
23.102 # ================================================================================
23.103
23.104 # Lithuanian
23.105 @@ -254,3 +269,6 @@
23.106 # Note: the following case is already in the UnicodeData file.
23.107
23.108 # 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I
23.109 +
23.110 +# EOF
23.111 +
24.1 --- a/make/tools/UnicodeData/UnicodeData.txt Thu Apr 16 17:42:00 2009 +0100
24.2 +++ b/make/tools/UnicodeData/UnicodeData.txt Thu Apr 16 19:10:32 2009 -0700
24.3 @@ -41,11 +41,11 @@
24.4 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
24.5 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
24.6 002A;ASTERISK;Po;0;ON;;;;;N;;;;;
24.7 -002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
24.8 +002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
24.9 002C;COMMA;Po;0;CS;;;;;N;;;;;
24.10 -002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
24.11 +002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
24.12 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
24.13 -002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
24.14 +002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
24.15 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
24.16 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
24.17 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
24.18 @@ -171,7 +171,7 @@
24.19 00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
24.20 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
24.21 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
24.22 -00AD;SOFT HYPHEN;Cf;0;ON;;;;;N;;;;;
24.23 +00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
24.24 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
24.25 00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
24.26 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
24.27 @@ -382,7 +382,7 @@
24.28 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
24.29 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
24.30 017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
24.31 -0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
24.32 +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243
24.33 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
24.34 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
24.35 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
24.36 @@ -408,7 +408,7 @@
24.37 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
24.38 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
24.39 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
24.40 -019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
24.41 +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
24.42 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
24.43 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
24.44 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
24.45 @@ -565,8 +565,33 @@
24.46 0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
24.47 0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
24.48 0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
24.49 -0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
24.50 -0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
24.51 +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
24.52 +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
24.53 +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
24.54 +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;
24.55 +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
24.56 +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
24.57 +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
24.58 +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;
24.59 +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
24.60 +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
24.61 +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;
24.62 +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
24.63 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;
24.64 +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;
24.65 +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;
24.66 +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;
24.67 +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246
24.68 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;
24.69 +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248
24.70 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;
24.71 +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A
24.72 +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;
24.73 +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C
24.74 +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;
24.75 +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E
24.76 +0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F
24.77 +0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D
24.78 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
24.79 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
24.80 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
24.81 @@ -592,13 +617,13 @@
24.82 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
24.83 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
24.84 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
24.85 -026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.86 +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
24.87 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
24.88 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
24.89 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
24.90 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
24.91 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
24.92 -0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
24.93 +0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E
24.94 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
24.95 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
24.96 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
24.97 @@ -610,7 +635,7 @@
24.98 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
24.99 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
24.100 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
24.101 -027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
24.102 +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64
24.103 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
24.104 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
24.105 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
24.106 @@ -622,10 +647,10 @@
24.107 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
24.108 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
24.109 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
24.110 -0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
24.111 +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244
24.112 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
24.113 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
24.114 -028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
24.115 +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245
24.116 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
24.117 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
24.118 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
24.119 @@ -633,7 +658,7 @@
24.120 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
24.121 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
24.122 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
24.123 -0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
24.124 +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
24.125 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
24.126 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
24.127 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
24.128 @@ -659,7 +684,7 @@
24.129 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
24.130 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
24.131 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
24.132 -02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK ;Ll;0;L;;;;;N;;;;;
24.133 +02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
24.134 02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
24.135 02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
24.136 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
24.137 @@ -721,7 +746,7 @@
24.138 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
24.139 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
24.140 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
24.141 -02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
24.142 +02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;;
24.143 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
24.144 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
24.145 02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
24.146 @@ -829,6 +854,11 @@
24.147 0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
24.148 0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
24.149 0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
24.150 +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
24.151 +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
24.152 +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
24.153 +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
24.154 +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
24.155 035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
24.156 035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
24.157 035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
24.158 @@ -848,9 +878,18 @@
24.159 036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
24.160 036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
24.161 036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
24.162 -0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
24.163 +0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371;
24.164 +0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370
24.165 +0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373;
24.166 +0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372
24.167 +0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
24.168 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
24.169 +0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377;
24.170 +0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376
24.171 037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
24.172 +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD
24.173 +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE
24.174 +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF
24.175 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
24.176 0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
24.177 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
24.178 @@ -924,6 +963,7 @@
24.179 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
24.180 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
24.181 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
24.182 +03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7;
24.183 03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
24.184 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
24.185 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
24.186 @@ -931,7 +971,7 @@
24.187 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
24.188 03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
24.189 03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
24.190 -03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
24.191 +03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF
24.192 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9;
24.193 03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8
24.194 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
24.195 @@ -968,6 +1008,10 @@
24.196 03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
24.197 03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
24.198 03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
24.199 +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
24.200 +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;
24.201 +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;
24.202 +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;
24.203 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
24.204 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
24.205 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
24.206 @@ -1103,6 +1147,7 @@
24.207 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
24.208 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
24.209 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
24.210 +0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;;
24.211 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
24.212 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
24.213 048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
24.214 @@ -1159,7 +1204,7 @@
24.215 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
24.216 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
24.217 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
24.218 -04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
24.219 +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;
24.220 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
24.221 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
24.222 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
24.223 @@ -1174,6 +1219,7 @@
24.224 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
24.225 04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
24.226 04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
24.227 +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0
24.228 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
24.229 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
24.230 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
24.231 @@ -1212,8 +1258,16 @@
24.232 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
24.233 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
24.234 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
24.235 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
24.236 +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
24.237 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
24.238 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
24.239 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;
24.240 +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA
24.241 +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;
24.242 +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC
24.243 +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;
24.244 +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE
24.245 0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
24.246 0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
24.247 0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
24.248 @@ -1230,6 +1284,26 @@
24.249 050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
24.250 050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
24.251 050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
24.252 +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;
24.253 +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510
24.254 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;
24.255 +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512
24.256 +0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515;
24.257 +0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514
24.258 +0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517;
24.259 +0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516
24.260 +0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519;
24.261 +0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518
24.262 +051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B;
24.263 +051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A
24.264 +051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D;
24.265 +051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C
24.266 +051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F;
24.267 +051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E
24.268 +0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521;
24.269 +0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520
24.270 +0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523;
24.271 +0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522
24.272 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
24.273 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
24.274 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
24.275 @@ -1333,6 +1407,7 @@
24.276 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
24.277 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
24.278 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
24.279 +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
24.280 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
24.281 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
24.282 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
24.283 @@ -1356,16 +1431,20 @@
24.284 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
24.285 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
24.286 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
24.287 +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;
24.288 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
24.289 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
24.290 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
24.291 -05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
24.292 +05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;;
24.293 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
24.294 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
24.295 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
24.296 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
24.297 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
24.298 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
24.299 +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
24.300 +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
24.301 +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
24.302 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
24.303 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
24.304 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
24.305 @@ -1398,10 +1477,16 @@
24.306 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
24.307 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
24.308 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
24.309 -0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;;
24.310 -0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
24.311 -0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
24.312 -0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
24.313 +0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;;
24.314 +0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;
24.315 +0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;
24.316 +0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;
24.317 +0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;
24.318 +0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;
24.319 +0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;
24.320 +0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
24.321 +060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
24.322 +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
24.323 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
24.324 060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
24.325 060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
24.326 @@ -1411,8 +1496,14 @@
24.327 0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
24.328 0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
24.329 0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
24.330 -0615;ARABIC SMALL HIGH TAH ;Mn;230;NSM;;;;;N;;;;;
24.331 +0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
24.332 +0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;;
24.333 +0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;;
24.334 +0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;;
24.335 +0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;;
24.336 +061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
24.337 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
24.338 +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
24.339 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
24.340 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
24.341 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
24.342 @@ -1440,6 +1531,11 @@
24.343 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
24.344 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
24.345 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
24.346 +063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.347 +063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
24.348 +063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
24.349 +063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.350 +063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.351 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
24.352 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
24.353 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
24.354 @@ -1465,6 +1561,12 @@
24.355 0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
24.356 0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
24.357 0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
24.358 +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
24.359 +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
24.360 +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
24.361 +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
24.362 +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
24.363 +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
24.364 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
24.365 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
24.366 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
24.367 @@ -1590,7 +1692,7 @@
24.368 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
24.369 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
24.370 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
24.371 -06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;;
24.372 +06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;;
24.373 06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
24.374 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
24.375 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
24.376 @@ -1702,6 +1804,54 @@
24.377 074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
24.378 074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
24.379 074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
24.380 +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
24.381 +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.382 +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
24.383 +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.384 +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
24.385 +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
24.386 +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
24.387 +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.388 +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
24.389 +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
24.390 +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
24.391 +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
24.392 +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.393 +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.394 +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
24.395 +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
24.396 +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
24.397 +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
24.398 +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
24.399 +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.400 +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
24.401 +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
24.402 +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
24.403 +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
24.404 +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
24.405 +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
24.406 +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
24.407 +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
24.408 +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
24.409 +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
24.410 +076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;;
24.411 +076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
24.412 +0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
24.413 +0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;;
24.414 +0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
24.415 +0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
24.416 +0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
24.417 +0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
24.418 +0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
24.419 +0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
24.420 +0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
24.421 +0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
24.422 +077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;;
24.423 +077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;;
24.424 +077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;;
24.425 +077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;;
24.426 +077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
24.427 +077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
24.428 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
24.429 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
24.430 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
24.431 @@ -1752,6 +1902,65 @@
24.432 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
24.433 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
24.434 07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
24.435 +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
24.436 +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
24.437 +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
24.438 +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
24.439 +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
24.440 +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
24.441 +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
24.442 +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
24.443 +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
24.444 +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
24.445 +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;
24.446 +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;
24.447 +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;
24.448 +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;
24.449 +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;
24.450 +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;
24.451 +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;
24.452 +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;
24.453 +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;
24.454 +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;
24.455 +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;
24.456 +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;
24.457 +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;
24.458 +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;
24.459 +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;
24.460 +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;
24.461 +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;
24.462 +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;
24.463 +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;
24.464 +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;
24.465 +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;
24.466 +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;
24.467 +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;
24.468 +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;
24.469 +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;
24.470 +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;
24.471 +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;
24.472 +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;
24.473 +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;
24.474 +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;
24.475 +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;
24.476 +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;
24.477 +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;
24.478 +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;
24.479 +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;
24.480 +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;
24.481 +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;
24.482 +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;
24.483 +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;
24.484 +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;
24.485 +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
24.486 +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
24.487 +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
24.488 +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
24.489 +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;
24.490 +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;
24.491 +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
24.492 +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
24.493 +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
24.494 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
24.495 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
24.496 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.497 @@ -1857,6 +2066,13 @@
24.498 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.499 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.500 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
24.501 +0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;;
24.502 +0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;;
24.503 +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
24.504 +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
24.505 +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
24.506 +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
24.507 +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
24.508 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
24.509 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
24.510 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.511 @@ -1918,6 +2134,7 @@
24.512 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
24.513 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
24.514 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.515 +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
24.516 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
24.517 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
24.518 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
24.519 @@ -2004,6 +2221,7 @@
24.520 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
24.521 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
24.522 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.523 +0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;;
24.524 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
24.525 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
24.526 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
24.527 @@ -2024,6 +2242,7 @@
24.528 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
24.529 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
24.530 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
24.531 +0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;;
24.532 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
24.533 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
24.534 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.535 @@ -2164,6 +2383,7 @@
24.536 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
24.537 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
24.538 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
24.539 +0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
24.540 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
24.541 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
24.542 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
24.543 @@ -2176,6 +2396,8 @@
24.544 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
24.545 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
24.546 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
24.547 +0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
24.548 +0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
24.549 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.550 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.551 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.552 @@ -2221,6 +2443,7 @@
24.553 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
24.554 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
24.555 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
24.556 +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
24.557 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
24.558 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
24.559 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
24.560 @@ -2236,7 +2459,9 @@
24.561 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
24.562 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
24.563 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.564 +0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;;
24.565 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
24.566 +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.567 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.568 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.569 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.570 @@ -2309,6 +2534,7 @@
24.571 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
24.572 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
24.573 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
24.574 +0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
24.575 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
24.576 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
24.577 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
24.578 @@ -2325,8 +2551,12 @@
24.579 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.580 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
24.581 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
24.582 +0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
24.583 +0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
24.584 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
24.585 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
24.586 +0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
24.587 +0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
24.588 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.589 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.590 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.591 @@ -2337,6 +2567,14 @@
24.592 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.593 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.594 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.595 +0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;;
24.596 +0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
24.597 +0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
24.598 +0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
24.599 +0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;;
24.600 +0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
24.601 +0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
24.602 +0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;
24.603 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
24.604 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.605 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
24.606 @@ -2409,6 +2647,8 @@
24.607 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
24.608 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
24.609 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
24.610 +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
24.611 +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
24.612 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.613 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.614 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.615 @@ -2419,6 +2659,8 @@
24.616 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.617 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.618 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.619 +0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;;
24.620 +0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;;
24.621 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
24.622 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.623 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
24.624 @@ -2471,12 +2713,14 @@
24.625 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
24.626 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
24.627 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
24.628 +0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
24.629 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
24.630 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
24.631 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
24.632 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
24.633 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
24.634 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
24.635 +0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
24.636 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
24.637 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
24.638 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
24.639 @@ -2487,6 +2731,8 @@
24.640 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
24.641 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
24.642 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
24.643 +0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
24.644 +0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
24.645 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.646 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.647 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.648 @@ -2497,6 +2743,19 @@
24.649 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.650 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.651 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.652 +0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;;
24.653 +0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
24.654 +0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
24.655 +0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
24.656 +0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
24.657 +0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
24.658 +0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;
24.659 +0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;
24.660 +0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;
24.661 +0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;;
24.662 +0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
24.663 +0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
24.664 +0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
24.665 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
24.666 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
24.667 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
24.668 @@ -2787,10 +3046,10 @@
24.669 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
24.670 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
24.671 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
24.672 -0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
24.673 -0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
24.674 -0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
24.675 -0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
24.676 +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;;
24.677 +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;;
24.678 +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;;
24.679 +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;;
24.680 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
24.681 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
24.682 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
24.683 @@ -2835,6 +3094,8 @@
24.684 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
24.685 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
24.686 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
24.687 +0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;;
24.688 +0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;;
24.689 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
24.690 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
24.691 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
24.692 @@ -2921,7 +3182,13 @@
24.693 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
24.694 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
24.695 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
24.696 +0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;dena deka;;;
24.697 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
24.698 +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;;
24.699 +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;;
24.700 +0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;nyi tsek;;;
24.701 +0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;da nying yik go dun ma;;;
24.702 +0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;da nying yik go kab ma;;;
24.703 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
24.704 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
24.705 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
24.706 @@ -2956,13 +3223,16 @@
24.707 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
24.708 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
24.709 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
24.710 +1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;;
24.711 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
24.712 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
24.713 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
24.714 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
24.715 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
24.716 +1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;;
24.717 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
24.718 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
24.719 +102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;;
24.720 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
24.721 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
24.722 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
24.723 @@ -2970,10 +3240,19 @@
24.724 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
24.725 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
24.726 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
24.727 +1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;;
24.728 +1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;;
24.729 +1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;;
24.730 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
24.731 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
24.732 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.733 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.734 +103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;;
24.735 +103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;;
24.736 +103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;;
24.737 +103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
24.738 +103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;;
24.739 +103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;;
24.740 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.741 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.742 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.743 @@ -3000,44 +3279,110 @@
24.744 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
24.745 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
24.746 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
24.747 -10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
24.748 -10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.749 -10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.750 -10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
24.751 -10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
24.752 -10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
24.753 -10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
24.754 -10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.755 -10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
24.756 -10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.757 -10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
24.758 -10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.759 -10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.760 -10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
24.761 -10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.762 -10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.763 -10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
24.764 -10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.765 -10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.766 -10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
24.767 -10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.768 -10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.769 -10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.770 -10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.771 -10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
24.772 -10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
24.773 -10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.774 -10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
24.775 -10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
24.776 -10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.777 -10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.778 -10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
24.779 -10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
24.780 -10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
24.781 -10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
24.782 -10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
24.783 -10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
24.784 -10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
24.785 +105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;;
24.786 +105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;;
24.787 +105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;;
24.788 +105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;;
24.789 +105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;;
24.790 +105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;;
24.791 +1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;;
24.792 +1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;;
24.793 +1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;;
24.794 +1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;;
24.795 +1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;;
24.796 +1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;;
24.797 +1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;;
24.798 +1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;;
24.799 +1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;;
24.800 +1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;;
24.801 +106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;;
24.802 +106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;;
24.803 +106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;;
24.804 +106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;;
24.805 +106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;;
24.806 +106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;;
24.807 +1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;;
24.808 +1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;;
24.809 +1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;;
24.810 +1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;;
24.811 +1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;;
24.812 +1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;;
24.813 +1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;;
24.814 +1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;;
24.815 +1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;;
24.816 +1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;;
24.817 +107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;;
24.818 +107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;;
24.819 +107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;;
24.820 +107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;;
24.821 +107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;;
24.822 +107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;;
24.823 +1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;;
24.824 +1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;;
24.825 +1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;;
24.826 +1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;;
24.827 +1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;;
24.828 +1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;;
24.829 +1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;;
24.830 +1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;;
24.831 +1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;;
24.832 +1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;;
24.833 +108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;;
24.834 +108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;;
24.835 +108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;;
24.836 +108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;;
24.837 +108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;;
24.838 +108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;;
24.839 +1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.840 +1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.841 +1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.842 +1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.843 +1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.844 +1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.845 +1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.846 +1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.847 +1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.848 +1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.849 +109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;;
24.850 +109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;;
24.851 +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00;
24.852 +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01;
24.853 +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02;
24.854 +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03;
24.855 +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04;
24.856 +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05;
24.857 +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06;
24.858 +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07;
24.859 +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08;
24.860 +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09;
24.861 +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A;
24.862 +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B;
24.863 +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C;
24.864 +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D;
24.865 +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E;
24.866 +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F;
24.867 +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10;
24.868 +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11;
24.869 +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12;
24.870 +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13;
24.871 +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14;
24.872 +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15;
24.873 +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16;
24.874 +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17;
24.875 +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18;
24.876 +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19;
24.877 +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A;
24.878 +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B;
24.879 +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C;
24.880 +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D;
24.881 +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E;
24.882 +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F;
24.883 +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20;
24.884 +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21;
24.885 +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22;
24.886 +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23;
24.887 +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24;
24.888 +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25;
24.889 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
24.890 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
24.891 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
24.892 @@ -3079,7 +3424,10 @@
24.893 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
24.894 10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
24.895 10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
24.896 +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
24.897 +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
24.898 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
24.899 +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
24.900 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
24.901 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
24.902 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
24.903 @@ -3327,6 +3675,7 @@
24.904 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
24.905 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
24.906 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
24.907 +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
24.908 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
24.909 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
24.910 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
24.911 @@ -3390,6 +3739,7 @@
24.912 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
24.913 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
24.914 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
24.915 +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
24.916 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
24.917 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
24.918 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
24.919 @@ -3446,6 +3796,7 @@
24.920 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
24.921 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
24.922 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
24.923 +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
24.924 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
24.925 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
24.926 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
24.927 @@ -3482,6 +3833,7 @@
24.928 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
24.929 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
24.930 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
24.931 +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
24.932 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
24.933 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
24.934 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
24.935 @@ -3506,6 +3858,7 @@
24.936 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
24.937 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
24.938 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
24.939 +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
24.940 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
24.941 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
24.942 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
24.943 @@ -3536,6 +3889,7 @@
24.944 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
24.945 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
24.946 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
24.947 +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
24.948 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
24.949 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
24.950 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
24.951 @@ -3567,6 +3921,7 @@
24.952 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
24.953 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
24.954 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
24.955 +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
24.956 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
24.957 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
24.958 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
24.959 @@ -3579,6 +3934,7 @@
24.960 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
24.961 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
24.962 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
24.963 +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
24.964 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
24.965 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
24.966 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
24.967 @@ -3618,6 +3974,7 @@
24.968 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
24.969 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
24.970 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
24.971 +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
24.972 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
24.973 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
24.974 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
24.975 @@ -3637,6 +3994,8 @@
24.976 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
24.977 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
24.978 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
24.979 +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
24.980 +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
24.981 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
24.982 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
24.983 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
24.984 @@ -3645,15 +4004,15 @@
24.985 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
24.986 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
24.987 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
24.988 -1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.989 -136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.990 -136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.991 -136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.992 -136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.993 -136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.994 -136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.995 -1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.996 -1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.997 +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
24.998 +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
24.999 +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
24.1000 +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
24.1001 +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
24.1002 +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
24.1003 +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
24.1004 +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
24.1005 +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
24.1006 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
24.1007 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
24.1008 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
24.1009 @@ -3665,6 +4024,32 @@
24.1010 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
24.1011 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
24.1012 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
24.1013 +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
24.1014 +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
24.1015 +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
24.1016 +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
24.1017 +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
24.1018 +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
24.1019 +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
24.1020 +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
24.1021 +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
24.1022 +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
24.1023 +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
24.1024 +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
24.1025 +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
24.1026 +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
24.1027 +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
24.1028 +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
24.1029 +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
24.1030 +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
24.1031 +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
24.1032 +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
24.1033 +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
24.1034 +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
24.1035 +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
24.1036 +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
24.1037 +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
24.1038 +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
24.1039 13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
24.1040 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
24.1041 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
24.1042 @@ -4407,8 +4792,8 @@
24.1043 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
24.1044 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
24.1045 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
24.1046 -169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
24.1047 -169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
24.1048 +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;
24.1049 +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;
24.1050 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
24.1051 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
24.1052 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
24.1053 @@ -4840,6 +5225,7 @@
24.1054 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
24.1055 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
24.1056 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
24.1057 +18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;;
24.1058 1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
24.1059 1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
24.1060 1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
24.1061 @@ -4878,9 +5264,9 @@
24.1062 1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
24.1063 1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
24.1064 1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
24.1065 -1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;;
24.1066 -192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;;
24.1067 -192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;;
24.1068 +1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
24.1069 +192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
24.1070 +192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;;
24.1071 1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
24.1072 1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
24.1073 1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
24.1074 @@ -4941,6 +5327,86 @@
24.1075 1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
24.1076 1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
24.1077 1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
24.1078 +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
24.1079 +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
24.1080 +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
24.1081 +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
24.1082 +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
24.1083 +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
24.1084 +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
24.1085 +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
24.1086 +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
24.1087 +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
24.1088 +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
24.1089 +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
24.1090 +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
24.1091 +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
24.1092 +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
24.1093 +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
24.1094 +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
24.1095 +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
24.1096 +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
24.1097 +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
24.1098 +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
24.1099 +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
24.1100 +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
24.1101 +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
24.1102 +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
24.1103 +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
24.1104 +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
24.1105 +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
24.1106 +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
24.1107 +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
24.1108 +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
24.1109 +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
24.1110 +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
24.1111 +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
24.1112 +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
24.1113 +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
24.1114 +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
24.1115 +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
24.1116 +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
24.1117 +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
24.1118 +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
24.1119 +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
24.1120 +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
24.1121 +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
24.1122 +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
24.1123 +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
24.1124 +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
24.1125 +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
24.1126 +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
24.1127 +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
24.1128 +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
24.1129 +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
24.1130 +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
24.1131 +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
24.1132 +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
24.1133 +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
24.1134 +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
24.1135 +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
24.1136 +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
24.1137 +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
24.1138 +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
24.1139 +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
24.1140 +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
24.1141 +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
24.1142 +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
24.1143 +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
24.1144 +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
24.1145 +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
24.1146 +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.1147 +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.1148 +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.1149 +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.1150 +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.1151 +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.1152 +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.1153 +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.1154 +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.1155 +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.1156 +19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;;
24.1157 +19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;;
24.1158 19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
24.1159 19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
24.1160 19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
24.1161 @@ -4973,6 +5439,334 @@
24.1162 19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
24.1163 19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
24.1164 19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
24.1165 +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
24.1166 +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
24.1167 +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
24.1168 +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
24.1169 +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
24.1170 +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
24.1171 +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
24.1172 +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
24.1173 +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
24.1174 +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
24.1175 +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
24.1176 +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
24.1177 +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
24.1178 +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
24.1179 +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
24.1180 +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
24.1181 +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
24.1182 +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
24.1183 +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
24.1184 +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
24.1185 +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
24.1186 +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
24.1187 +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
24.1188 +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
24.1189 +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
24.1190 +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
24.1191 +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
24.1192 +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
24.1193 +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
24.1194 +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
24.1195 +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;;
24.1196 +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;;
24.1197 +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;;
24.1198 +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;;
24.1199 +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;;
24.1200 +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;;
24.1201 +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;;
24.1202 +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;;
24.1203 +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;;
24.1204 +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;;
24.1205 +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;;
24.1206 +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;;
24.1207 +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;;
24.1208 +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;;
24.1209 +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;;
24.1210 +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;;
24.1211 +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;;
24.1212 +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;;
24.1213 +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;;
24.1214 +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;
24.1215 +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;;
24.1216 +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;
24.1217 +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;;
24.1218 +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
24.1219 +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;
24.1220 +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;;
24.1221 +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;
24.1222 +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;;
24.1223 +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
24.1224 +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;;
24.1225 +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;;
24.1226 +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;;
24.1227 +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;;
24.1228 +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;;
24.1229 +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;
24.1230 +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;;
24.1231 +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;
24.1232 +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;;
24.1233 +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;
24.1234 +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;
24.1235 +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;;
24.1236 +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;
24.1237 +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;;
24.1238 +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;
24.1239 +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;
24.1240 +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;
24.1241 +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;
24.1242 +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;
24.1243 +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;;
24.1244 +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;;
24.1245 +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;
24.1246 +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;
24.1247 +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;;
24.1248 +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;;
24.1249 +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;;
24.1250 +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;;
24.1251 +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;;
24.1252 +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;;
24.1253 +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;;
24.1254 +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;;
24.1255 +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;;
24.1256 +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;;
24.1257 +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;;
24.1258 +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;;
24.1259 +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;;
24.1260 +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;;
24.1261 +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;;
24.1262 +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;;
24.1263 +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;;
24.1264 +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;
24.1265 +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;
24.1266 +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;
24.1267 +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;
24.1268 +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
24.1269 +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
24.1270 +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
24.1271 +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.1272 +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.1273 +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.1274 +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.1275 +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.1276 +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.1277 +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.1278 +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.1279 +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.1280 +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.1281 +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;;
24.1282 +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;;
24.1283 +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;;
24.1284 +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;;
24.1285 +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;;
24.1286 +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;;
24.1287 +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;;
24.1288 +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;
24.1289 +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;
24.1290 +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;
24.1291 +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;
24.1292 +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;
24.1293 +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;
24.1294 +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;
24.1295 +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;
24.1296 +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;
24.1297 +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;
24.1298 +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;
24.1299 +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;
24.1300 +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;
24.1301 +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;
24.1302 +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;
24.1303 +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
24.1304 +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
24.1305 +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;
24.1306 +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;
24.1307 +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;
24.1308 +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;
24.1309 +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;
24.1310 +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;
24.1311 +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;
24.1312 +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;
24.1313 +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
24.1314 +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
24.1315 +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
24.1316 +1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
24.1317 +1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
24.1318 +1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
24.1319 +1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;;
24.1320 +1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;;
24.1321 +1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;;
24.1322 +1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;;
24.1323 +1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;;
24.1324 +1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;;
24.1325 +1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;;
24.1326 +1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;;
24.1327 +1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;;
24.1328 +1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;;
24.1329 +1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;;
24.1330 +1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;;
24.1331 +1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;;
24.1332 +1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;;
24.1333 +1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;;
24.1334 +1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;;
24.1335 +1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;;
24.1336 +1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;;
24.1337 +1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;;
24.1338 +1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;;
24.1339 +1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;;
24.1340 +1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;;
24.1341 +1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;;
24.1342 +1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;;
24.1343 +1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;;
24.1344 +1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;;
24.1345 +1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;;
24.1346 +1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;;
24.1347 +1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;;
24.1348 +1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;;
24.1349 +1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;;
24.1350 +1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;;
24.1351 +1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;;
24.1352 +1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;;
24.1353 +1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;;
24.1354 +1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;;
24.1355 +1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;;
24.1356 +1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;
24.1357 +1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;
24.1358 +1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
24.1359 +1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;
24.1360 +1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;
24.1361 +1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.1362 +1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.1363 +1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.1364 +1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.1365 +1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.1366 +1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.1367 +1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.1368 +1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.1369 +1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.1370 +1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.1371 +1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;;
24.1372 +1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;;
24.1373 +1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;;
24.1374 +1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;;
24.1375 +1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;;
24.1376 +1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;;
24.1377 +1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;;
24.1378 +1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;;
24.1379 +1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;;
24.1380 +1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;;
24.1381 +1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;;
24.1382 +1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;;
24.1383 +1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;;
24.1384 +1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;;
24.1385 +1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;;
24.1386 +1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;;
24.1387 +1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;;
24.1388 +1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;;
24.1389 +1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;;
24.1390 +1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;;
24.1391 +1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;;
24.1392 +1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;;
24.1393 +1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;;
24.1394 +1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;;
24.1395 +1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;;
24.1396 +1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;;
24.1397 +1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;;
24.1398 +1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;;
24.1399 +1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;;
24.1400 +1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;;
24.1401 +1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;;
24.1402 +1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;;
24.1403 +1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;;
24.1404 +1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;;
24.1405 +1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;;
24.1406 +1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;;
24.1407 +1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
24.1408 +1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;;
24.1409 +1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
24.1410 +1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
24.1411 +1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
24.1412 +1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
24.1413 +1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
24.1414 +1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
24.1415 +1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
24.1416 +1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
24.1417 +1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
24.1418 +1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
24.1419 +1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
24.1420 +1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;;
24.1421 +1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
24.1422 +1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;;
24.1423 +1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;;
24.1424 +1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;;
24.1425 +1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;;
24.1426 +1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
24.1427 +1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;;
24.1428 +1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;;
24.1429 +1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;;
24.1430 +1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;;
24.1431 +1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;;
24.1432 +1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.1433 +1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.1434 +1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.1435 +1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.1436 +1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.1437 +1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.1438 +1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.1439 +1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.1440 +1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.1441 +1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.1442 +1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;;
24.1443 +1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;;
24.1444 +1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;;
24.1445 +1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.1446 +1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.1447 +1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.1448 +1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.1449 +1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.1450 +1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.1451 +1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.1452 +1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.1453 +1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.1454 +1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.1455 +1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;;
24.1456 +1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;;
24.1457 +1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;;
24.1458 +1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;;
24.1459 +1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;;
24.1460 +1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;;
24.1461 +1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;;
24.1462 +1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;;
24.1463 +1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;;
24.1464 +1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;;
24.1465 +1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;;
24.1466 +1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;;
24.1467 +1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;;
24.1468 +1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;;
24.1469 +1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;;
24.1470 +1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;;
24.1471 +1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;;
24.1472 +1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;;
24.1473 +1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;;
24.1474 +1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;;
24.1475 +1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;;
24.1476 +1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;;
24.1477 +1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;;
24.1478 +1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;;
24.1479 +1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;;
24.1480 +1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;;
24.1481 +1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;;
24.1482 +1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;;
24.1483 +1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;;
24.1484 +1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;;
24.1485 +1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;;
24.1486 +1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
24.1487 +1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;;
24.1488 +1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;;
24.1489 +1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;;
24.1490 +1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
24.1491 +1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
24.1492 +1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
24.1493 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
24.1494 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
24.1495 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
24.1496 @@ -5081,6 +5875,131 @@
24.1497 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
24.1498 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
24.1499 1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
24.1500 +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1501 +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1502 +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1503 +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1504 +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1505 +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1506 +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1507 +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1508 +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1509 +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1510 +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
24.1511 +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
24.1512 +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
24.1513 +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D
24.1514 +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
24.1515 +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
24.1516 +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
24.1517 +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63
24.1518 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
24.1519 +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
24.1520 +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1521 +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1522 +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1523 +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1524 +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1525 +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1526 +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1527 +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1528 +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1529 +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1530 +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1531 +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1532 +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1533 +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1534 +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
24.1535 +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1536 +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1537 +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
24.1538 +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1539 +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1540 +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1541 +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1542 +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1543 +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1544 +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1545 +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1546 +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
24.1547 +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
24.1548 +1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
24.1549 +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
24.1550 +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
24.1551 +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
24.1552 +1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
24.1553 +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
24.1554 +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
24.1555 +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
24.1556 +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
24.1557 +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
24.1558 +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
24.1559 +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
24.1560 +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
24.1561 +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
24.1562 +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
24.1563 +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
24.1564 +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
24.1565 +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
24.1566 +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
24.1567 +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
24.1568 +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
24.1569 +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
24.1570 +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
24.1571 +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
24.1572 +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
24.1573 +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
24.1574 +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
24.1575 +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
24.1576 +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
24.1577 +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
24.1578 +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
24.1579 +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
24.1580 +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
24.1581 +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
24.1582 +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
24.1583 +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
24.1584 +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
24.1585 +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
24.1586 +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
24.1587 +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
24.1588 +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;
24.1589 +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;
24.1590 +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;
24.1591 +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;
24.1592 +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;
24.1593 +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;
24.1594 +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;
24.1595 +1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;;
24.1596 +1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;;
24.1597 +1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;;
24.1598 +1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;;
24.1599 +1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;;
24.1600 +1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;;
24.1601 +1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;;
24.1602 +1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;;
24.1603 +1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;;
24.1604 +1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;;
24.1605 +1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;;
24.1606 +1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;;
24.1607 +1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;;
24.1608 +1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;;
24.1609 +1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;;
24.1610 +1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;;
24.1611 +1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;;
24.1612 +1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;;
24.1613 +1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;;
24.1614 +1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;;
24.1615 +1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;;
24.1616 +1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;;
24.1617 +1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;;
24.1618 +1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;;
24.1619 +1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;;
24.1620 +1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;;
24.1621 +1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;;
24.1622 +1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;;
24.1623 +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
24.1624 +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
24.1625 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
24.1626 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
24.1627 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
24.1628 @@ -5237,6 +6156,10 @@
24.1629 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
24.1630 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
24.1631 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
24.1632 +1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;;
24.1633 +1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;;
24.1634 +1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF;
24.1635 +1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;;
24.1636 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
24.1637 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
24.1638 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
24.1639 @@ -5327,6 +6250,12 @@
24.1640 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
24.1641 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
24.1642 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
24.1643 +1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB;
24.1644 +1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA
24.1645 +1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD;
24.1646 +1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC
24.1647 +1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF;
24.1648 +1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE
24.1649 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
24.1650 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
24.1651 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
24.1652 @@ -5571,7 +6500,7 @@
24.1653 2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
24.1654 2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
24.1655 200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
24.1656 -200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
24.1657 +200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
24.1658 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
24.1659 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
24.1660 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
24.1661 @@ -5607,7 +6536,7 @@
24.1662 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
24.1663 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
24.1664 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
24.1665 -202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
24.1666 +202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
24.1667 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
24.1668 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
24.1669 2032;PRIME;Po;0;ET;;;;;N;;;;;
24.1670 @@ -5628,7 +6557,7 @@
24.1671 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
24.1672 2042;ASTERISM;Po;0;ON;;;;;N;;;;;
24.1673 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
24.1674 -2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
24.1675 +2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
24.1676 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
24.1677 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
24.1678 2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
24.1679 @@ -5645,12 +6574,22 @@
24.1680 2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
24.1681 2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
24.1682 2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
24.1683 +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
24.1684 +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.1685 2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
24.1686 +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.1687 +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.1688 +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.1689 +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
24.1690 +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
24.1691 +205D;TRICOLON;Po;0;ON;;;;;N;;;;;
24.1692 +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
24.1693 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
24.1694 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
24.1695 2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
24.1696 2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
24.1697 2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
24.1698 +2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;;
24.1699 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
24.1700 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
24.1701 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
24.1702 @@ -5665,8 +6604,8 @@
24.1703 2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
24.1704 2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
24.1705 2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
24.1706 -207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
24.1707 -207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
24.1708 +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
24.1709 +207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
24.1710 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
24.1711 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
24.1712 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
24.1713 @@ -5681,11 +6620,16 @@
24.1714 2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
24.1715 2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
24.1716 2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
24.1717 -208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
24.1718 -208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
24.1719 +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
24.1720 +208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
24.1721 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
24.1722 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
24.1723 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
24.1724 +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
24.1725 +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
24.1726 +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
24.1727 +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
24.1728 +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
24.1729 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
24.1730 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
24.1731 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
24.1732 @@ -5704,6 +6648,10 @@
24.1733 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
24.1734 20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
24.1735 20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
24.1736 +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
24.1737 +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
24.1738 +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
24.1739 +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
24.1740 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
24.1741 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
24.1742 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
24.1743 @@ -5731,6 +6679,12 @@
24.1744 20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
24.1745 20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
24.1746 20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
24.1747 +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
24.1748 +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
24.1749 +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
24.1750 +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
24.1751 +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
24.1752 +20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;;
24.1753 2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
24.1754 2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
24.1755 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
24.1756 @@ -5781,7 +6735,7 @@
24.1757 212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
24.1758 2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
24.1759 2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
24.1760 -2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
24.1761 +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;
24.1762 2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
24.1763 2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
24.1764 2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
24.1765 @@ -5791,6 +6745,7 @@
24.1766 2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
24.1767 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
24.1768 213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
24.1769 +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
24.1770 213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
24.1771 213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
24.1772 213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
24.1773 @@ -5806,6 +6761,10 @@
24.1774 2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
24.1775 214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
24.1776 214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
24.1777 +214C;PER SIGN;So;0;ON;;;;;N;;;;;
24.1778 +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;
24.1779 +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132
24.1780 +214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;;
24.1781 2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
24.1782 2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
24.1783 2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
24.1784 @@ -5854,7 +6813,12 @@
24.1785 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
24.1786 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
24.1787 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
24.1788 -2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
24.1789 +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;
24.1790 +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183
24.1791 +2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;;
24.1792 +2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;;
24.1793 +2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;;
24.1794 +2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;;
24.1795 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
24.1796 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
24.1797 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
24.1798 @@ -5985,7 +6949,7 @@
24.1799 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
24.1800 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
24.1801 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
24.1802 -2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
24.1803 +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
24.1804 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
24.1805 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
24.1806 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
24.1807 @@ -6403,9 +7367,9 @@
24.1808 23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
24.1809 23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
24.1810 23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
24.1811 -23B4;TOP SQUARE BRACKET;Ps;0;ON;;;;;N;;;;;
24.1812 -23B5;BOTTOM SQUARE BRACKET;Pe;0;ON;;;;;N;;;;;
24.1813 -23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;Po;0;ON;;;;;N;;;;;
24.1814 +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
24.1815 +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;
24.1816 +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
24.1817 23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
24.1818 23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
24.1819 23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
24.1820 @@ -6432,6 +7396,29 @@
24.1821 23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
24.1822 23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
24.1823 23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
24.1824 +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
24.1825 +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
24.1826 +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
24.1827 +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
24.1828 +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
24.1829 +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
24.1830 +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
24.1831 +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
24.1832 +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
24.1833 +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
24.1834 +23DB;FUSE;So;0;ON;;;;;N;;;;;
24.1835 +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
24.1836 +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
24.1837 +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
24.1838 +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
24.1839 +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
24.1840 +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
24.1841 +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;
24.1842 +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;
24.1843 +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;
24.1844 +23E5;FLATNESS;So;0;ON;;;;;N;;;;;
24.1845 +23E6;AC CURRENT;So;0;ON;;;;;N;;;;;
24.1846 +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;
24.1847 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
24.1848 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
24.1849 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
24.1850 @@ -6482,46 +7469,46 @@
24.1851 2448;OCR DASH;So;0;ON;;;;;N;;;;;
24.1852 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
24.1853 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
24.1854 -2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
24.1855 -2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
24.1856 -2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
24.1857 -2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
24.1858 -2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
24.1859 -2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
24.1860 -2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
24.1861 -2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
24.1862 -2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
24.1863 -2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
24.1864 -246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
24.1865 -246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
24.1866 -246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
24.1867 -246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
24.1868 -246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
24.1869 -246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
24.1870 -2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
24.1871 -2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
24.1872 -2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
24.1873 -2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
24.1874 -2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
24.1875 -2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
24.1876 -2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
24.1877 -2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
24.1878 -2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
24.1879 -2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
24.1880 -247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
24.1881 -247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
24.1882 -247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
24.1883 -247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
24.1884 -247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
24.1885 -247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
24.1886 -2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
24.1887 -2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
24.1888 -2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
24.1889 -2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
24.1890 -2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
24.1891 -2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
24.1892 -2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
24.1893 -2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
24.1894 +2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
24.1895 +2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
24.1896 +2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
24.1897 +2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
24.1898 +2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
24.1899 +2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
24.1900 +2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
24.1901 +2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
24.1902 +2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
24.1903 +2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
24.1904 +246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
24.1905 +246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
24.1906 +246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
24.1907 +246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
24.1908 +246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
24.1909 +246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
24.1910 +2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
24.1911 +2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
24.1912 +2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
24.1913 +2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
24.1914 +2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
24.1915 +2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
24.1916 +2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
24.1917 +2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
24.1918 +2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
24.1919 +2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
24.1920 +247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
24.1921 +247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
24.1922 +247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
24.1923 +247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
24.1924 +247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
24.1925 +247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
24.1926 +2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
24.1927 +2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
24.1928 +2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
24.1929 +2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
24.1930 +2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
24.1931 +2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
24.1932 +2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
24.1933 +2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
24.1934 2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
24.1935 2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
24.1936 248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
24.1937 @@ -6620,7 +7607,7 @@
24.1938 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
24.1939 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
24.1940 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
24.1941 -24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
24.1942 +24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
24.1943 24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
24.1944 24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
24.1945 24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
24.1946 @@ -6922,6 +7909,7 @@
24.1947 2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
24.1948 2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
24.1949 2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
24.1950 +2618;SHAMROCK;So;0;ON;;;;;N;;;;;
24.1951 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
24.1952 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
24.1953 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
24.1954 @@ -7023,6 +8011,8 @@
24.1955 267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
24.1956 267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
24.1957 267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
24.1958 +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
24.1959 +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
24.1960 2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
24.1961 2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
24.1962 2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
24.1963 @@ -7041,8 +8031,51 @@
24.1964 268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
24.1965 2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
24.1966 2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
24.1967 +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
24.1968 +2693;ANCHOR;So;0;ON;;;;;N;;;;;
24.1969 +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
24.1970 +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
24.1971 +2696;SCALES;So;0;ON;;;;;N;;;;;
24.1972 +2697;ALEMBIC;So;0;ON;;;;;N;;;;;
24.1973 +2698;FLOWER;So;0;ON;;;;;N;;;;;
24.1974 +2699;GEAR;So;0;ON;;;;;N;;;;;
24.1975 +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
24.1976 +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
24.1977 +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
24.1978 +269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
24.1979 26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
24.1980 26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
24.1981 +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
24.1982 +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
24.1983 +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
24.1984 +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
24.1985 +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
24.1986 +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
24.1987 +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
24.1988 +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
24.1989 +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
24.1990 +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
24.1991 +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
24.1992 +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
24.1993 +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
24.1994 +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
24.1995 +26B0;COFFIN;So;0;ON;;;;;N;;;;;
24.1996 +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
24.1997 +26B2;NEUTER;So;0;ON;;;;;N;;;;;
24.1998 +26B3;CERES;So;0;ON;;;;;N;;;;;
24.1999 +26B4;PALLAS;So;0;ON;;;;;N;;;;;
24.2000 +26B5;JUNO;So;0;ON;;;;;N;;;;;
24.2001 +26B6;VESTA;So;0;ON;;;;;N;;;;;
24.2002 +26B7;CHIRON;So;0;ON;;;;;N;;;;;
24.2003 +26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;;
24.2004 +26B9;SEXTILE;So;0;ON;;;;;N;;;;;
24.2005 +26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;;
24.2006 +26BB;QUINCUNX;So;0;ON;;;;;N;;;;;
24.2007 +26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;;
24.2008 +26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
24.2009 +26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;;
24.2010 +26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;;
24.2011 +26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;;
24.2012 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
24.2013 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
24.2014 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
24.2015 @@ -7217,6 +8250,18 @@
24.2016 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
24.2017 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
24.2018 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
24.2019 +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
24.2020 +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
24.2021 +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
24.2022 +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
24.2023 +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
24.2024 +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
24.2025 +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
24.2026 +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;
24.2027 +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;
24.2028 +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;
24.2029 +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2030 +27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;
24.2031 27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
24.2032 27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
24.2033 27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
24.2034 @@ -7245,6 +8290,10 @@
24.2035 27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
24.2036 27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
24.2037 27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
24.2038 +27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
24.2039 +27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
24.2040 +27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
24.2041 +27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
24.2042 27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
24.2043 27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
24.2044 27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
24.2045 @@ -7261,262 +8310,262 @@
24.2046 27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
24.2047 27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
24.2048 27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
24.2049 -2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
24.2050 -2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
24.2051 -2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
24.2052 -2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
24.2053 -2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
24.2054 -2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
24.2055 -2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
24.2056 -2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
24.2057 -2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
24.2058 -2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
24.2059 -280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
24.2060 -280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
24.2061 -280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
24.2062 -280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
24.2063 -280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
24.2064 -280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
24.2065 -2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
24.2066 -2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
24.2067 -2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
24.2068 -2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
24.2069 -2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
24.2070 -2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
24.2071 -2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
24.2072 -2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
24.2073 -2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
24.2074 -2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
24.2075 -281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
24.2076 -281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
24.2077 -281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
24.2078 -281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
24.2079 -281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
24.2080 -281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
24.2081 -2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
24.2082 -2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
24.2083 -2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
24.2084 -2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
24.2085 -2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
24.2086 -2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
24.2087 -2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
24.2088 -2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
24.2089 -2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
24.2090 -2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
24.2091 -282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
24.2092 -282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
24.2093 -282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
24.2094 -282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
24.2095 -282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
24.2096 -282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
24.2097 -2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
24.2098 -2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
24.2099 -2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
24.2100 -2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
24.2101 -2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
24.2102 -2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
24.2103 -2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
24.2104 -2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
24.2105 -2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
24.2106 -2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
24.2107 -283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
24.2108 -283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
24.2109 -283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
24.2110 -283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
24.2111 -283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
24.2112 -283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
24.2113 -2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
24.2114 -2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
24.2115 -2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
24.2116 -2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
24.2117 -2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
24.2118 -2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
24.2119 -2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
24.2120 -2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
24.2121 -2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
24.2122 -2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
24.2123 -284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
24.2124 -284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
24.2125 -284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
24.2126 -284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
24.2127 -284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
24.2128 -284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
24.2129 -2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
24.2130 -2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
24.2131 -2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
24.2132 -2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
24.2133 -2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
24.2134 -2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
24.2135 -2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
24.2136 -2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
24.2137 -2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
24.2138 -2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
24.2139 -285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
24.2140 -285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
24.2141 -285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
24.2142 -285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
24.2143 -285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
24.2144 -285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
24.2145 -2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
24.2146 -2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
24.2147 -2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
24.2148 -2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
24.2149 -2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
24.2150 -2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
24.2151 -2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
24.2152 -2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
24.2153 -2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
24.2154 -2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
24.2155 -286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
24.2156 -286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
24.2157 -286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
24.2158 -286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
24.2159 -286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
24.2160 -286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
24.2161 -2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
24.2162 -2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
24.2163 -2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
24.2164 -2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
24.2165 -2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
24.2166 -2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
24.2167 -2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
24.2168 -2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
24.2169 -2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
24.2170 -2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
24.2171 -287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
24.2172 -287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
24.2173 -287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
24.2174 -287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
24.2175 -287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
24.2176 -287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
24.2177 -2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
24.2178 -2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
24.2179 -2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
24.2180 -2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
24.2181 -2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
24.2182 -2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
24.2183 -2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
24.2184 -2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
24.2185 -2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
24.2186 -2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
24.2187 -288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
24.2188 -288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
24.2189 -288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
24.2190 -288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
24.2191 -288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
24.2192 -288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
24.2193 -2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
24.2194 -2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
24.2195 -2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
24.2196 -2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
24.2197 -2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
24.2198 -2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
24.2199 -2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
24.2200 -2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
24.2201 -2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
24.2202 -2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
24.2203 -289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
24.2204 -289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
24.2205 -289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
24.2206 -289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
24.2207 -289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
24.2208 -289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
24.2209 -28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
24.2210 -28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
24.2211 -28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
24.2212 -28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
24.2213 -28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
24.2214 -28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
24.2215 -28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
24.2216 -28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
24.2217 -28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
24.2218 -28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
24.2219 -28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
24.2220 -28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
24.2221 -28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
24.2222 -28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
24.2223 -28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
24.2224 -28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
24.2225 -28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
24.2226 -28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
24.2227 -28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
24.2228 -28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
24.2229 -28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
24.2230 -28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
24.2231 -28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
24.2232 -28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
24.2233 -28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
24.2234 -28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
24.2235 -28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
24.2236 -28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
24.2237 -28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
24.2238 -28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
24.2239 -28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
24.2240 -28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
24.2241 -28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
24.2242 -28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
24.2243 -28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
24.2244 -28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
24.2245 -28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
24.2246 -28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
24.2247 -28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
24.2248 -28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
24.2249 -28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
24.2250 -28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
24.2251 -28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
24.2252 -28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
24.2253 -28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
24.2254 -28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
24.2255 -28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
24.2256 -28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
24.2257 -28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
24.2258 -28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
24.2259 -28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
24.2260 -28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
24.2261 -28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
24.2262 -28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
24.2263 -28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
24.2264 -28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
24.2265 -28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
24.2266 -28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
24.2267 -28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
24.2268 -28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
24.2269 -28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
24.2270 -28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
24.2271 -28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
24.2272 -28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
24.2273 -28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
24.2274 -28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
24.2275 -28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
24.2276 -28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
24.2277 -28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
24.2278 -28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
24.2279 -28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
24.2280 -28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
24.2281 -28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
24.2282 -28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
24.2283 -28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
24.2284 -28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
24.2285 -28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
24.2286 -28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
24.2287 -28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
24.2288 -28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
24.2289 -28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
24.2290 -28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
24.2291 -28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
24.2292 -28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
24.2293 -28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
24.2294 -28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
24.2295 -28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
24.2296 -28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
24.2297 -28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
24.2298 -28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
24.2299 -28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
24.2300 -28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
24.2301 -28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
24.2302 -28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
24.2303 -28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
24.2304 -28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
24.2305 +2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
24.2306 +2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
24.2307 +2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
24.2308 +2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
24.2309 +2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
24.2310 +2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
24.2311 +2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
24.2312 +2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
24.2313 +2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
24.2314 +2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
24.2315 +280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
24.2316 +280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
24.2317 +280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
24.2318 +280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
24.2319 +280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
24.2320 +280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
24.2321 +2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
24.2322 +2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
24.2323 +2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
24.2324 +2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
24.2325 +2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
24.2326 +2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
24.2327 +2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
24.2328 +2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
24.2329 +2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
24.2330 +2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
24.2331 +281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
24.2332 +281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
24.2333 +281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
24.2334 +281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
24.2335 +281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
24.2336 +281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
24.2337 +2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
24.2338 +2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
24.2339 +2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
24.2340 +2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
24.2341 +2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
24.2342 +2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
24.2343 +2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
24.2344 +2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
24.2345 +2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
24.2346 +2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
24.2347 +282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
24.2348 +282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
24.2349 +282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
24.2350 +282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
24.2351 +282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
24.2352 +282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
24.2353 +2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
24.2354 +2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
24.2355 +2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
24.2356 +2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
24.2357 +2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
24.2358 +2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
24.2359 +2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
24.2360 +2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
24.2361 +2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
24.2362 +2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
24.2363 +283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
24.2364 +283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
24.2365 +283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
24.2366 +283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
24.2367 +283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
24.2368 +283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
24.2369 +2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
24.2370 +2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
24.2371 +2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
24.2372 +2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
24.2373 +2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
24.2374 +2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
24.2375 +2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
24.2376 +2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
24.2377 +2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
24.2378 +2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
24.2379 +284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
24.2380 +284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
24.2381 +284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
24.2382 +284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
24.2383 +284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
24.2384 +284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
24.2385 +2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
24.2386 +2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
24.2387 +2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
24.2388 +2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
24.2389 +2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
24.2390 +2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
24.2391 +2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
24.2392 +2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
24.2393 +2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
24.2394 +2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
24.2395 +285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
24.2396 +285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
24.2397 +285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
24.2398 +285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
24.2399 +285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
24.2400 +285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
24.2401 +2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
24.2402 +2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
24.2403 +2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
24.2404 +2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
24.2405 +2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
24.2406 +2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
24.2407 +2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
24.2408 +2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
24.2409 +2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
24.2410 +2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
24.2411 +286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
24.2412 +286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
24.2413 +286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
24.2414 +286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
24.2415 +286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
24.2416 +286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
24.2417 +2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
24.2418 +2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
24.2419 +2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
24.2420 +2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
24.2421 +2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
24.2422 +2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
24.2423 +2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
24.2424 +2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
24.2425 +2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
24.2426 +2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
24.2427 +287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
24.2428 +287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
24.2429 +287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
24.2430 +287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
24.2431 +287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
24.2432 +287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
24.2433 +2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
24.2434 +2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
24.2435 +2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
24.2436 +2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
24.2437 +2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
24.2438 +2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
24.2439 +2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
24.2440 +2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
24.2441 +2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
24.2442 +2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
24.2443 +288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
24.2444 +288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
24.2445 +288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
24.2446 +288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
24.2447 +288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
24.2448 +288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
24.2449 +2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
24.2450 +2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
24.2451 +2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
24.2452 +2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
24.2453 +2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
24.2454 +2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
24.2455 +2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
24.2456 +2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
24.2457 +2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
24.2458 +2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
24.2459 +289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
24.2460 +289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
24.2461 +289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
24.2462 +289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
24.2463 +289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
24.2464 +289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
24.2465 +28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
24.2466 +28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
24.2467 +28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
24.2468 +28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
24.2469 +28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
24.2470 +28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
24.2471 +28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
24.2472 +28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
24.2473 +28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
24.2474 +28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
24.2475 +28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
24.2476 +28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
24.2477 +28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
24.2478 +28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
24.2479 +28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
24.2480 +28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
24.2481 +28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
24.2482 +28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
24.2483 +28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
24.2484 +28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
24.2485 +28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
24.2486 +28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
24.2487 +28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
24.2488 +28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
24.2489 +28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
24.2490 +28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
24.2491 +28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
24.2492 +28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
24.2493 +28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
24.2494 +28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
24.2495 +28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
24.2496 +28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
24.2497 +28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
24.2498 +28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
24.2499 +28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
24.2500 +28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
24.2501 +28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
24.2502 +28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
24.2503 +28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
24.2504 +28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
24.2505 +28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
24.2506 +28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
24.2507 +28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
24.2508 +28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
24.2509 +28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
24.2510 +28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
24.2511 +28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
24.2512 +28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
24.2513 +28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
24.2514 +28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
24.2515 +28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
24.2516 +28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
24.2517 +28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
24.2518 +28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
24.2519 +28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
24.2520 +28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
24.2521 +28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
24.2522 +28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
24.2523 +28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
24.2524 +28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
24.2525 +28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
24.2526 +28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
24.2527 +28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
24.2528 +28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
24.2529 +28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
24.2530 +28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
24.2531 +28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
24.2532 +28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
24.2533 +28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
24.2534 +28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
24.2535 +28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
24.2536 +28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
24.2537 +28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
24.2538 +28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
24.2539 +28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
24.2540 +28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
24.2541 +28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
24.2542 +28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
24.2543 +28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
24.2544 +28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
24.2545 +28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
24.2546 +28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
24.2547 +28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
24.2548 +28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
24.2549 +28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
24.2550 +28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
24.2551 +28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
24.2552 +28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
24.2553 +28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
24.2554 +28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
24.2555 +28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
24.2556 +28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
24.2557 +28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
24.2558 +28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
24.2559 +28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
24.2560 +28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
24.2561 2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2562 2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2563 2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2564 @@ -8043,6 +9092,564 @@
24.2565 2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
24.2566 2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
24.2567 2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
24.2568 +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
24.2569 +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
24.2570 +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
24.2571 +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
24.2572 +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
24.2573 +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
24.2574 +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
24.2575 +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
24.2576 +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
24.2577 +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
24.2578 +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
24.2579 +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
24.2580 +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;
24.2581 +2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;;
24.2582 +2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;;
24.2583 +2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
24.2584 +2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;;
24.2585 +2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;;
24.2586 +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;
24.2587 +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;
24.2588 +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;
24.2589 +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;
24.2590 +2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;;
24.2591 +2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
24.2592 +2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;;
24.2593 +2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
24.2594 +2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;;
24.2595 +2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
24.2596 +2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;;
24.2597 +2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;;
24.2598 +2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
24.2599 +2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;;
24.2600 +2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
24.2601 +2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;;
24.2602 +2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
24.2603 +2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
24.2604 +2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
24.2605 +2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
24.2606 +2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2607 +2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2608 +2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
24.2609 +2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
24.2610 +2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
24.2611 +2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2612 +2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2613 +2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
24.2614 +2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2615 +2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
24.2616 +2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
24.2617 +2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;;
24.2618 +2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
24.2619 +2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
24.2620 +2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
24.2621 +2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;;
24.2622 +2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;;
24.2623 +2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
24.2624 +2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;;
24.2625 +2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
24.2626 +2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
24.2627 +2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
24.2628 +2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
24.2629 +2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
24.2630 +2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
24.2631 +2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;;
24.2632 +2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;;
24.2633 +2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;;
24.2634 +2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
24.2635 +2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;;
24.2636 +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
24.2637 +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
24.2638 +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
24.2639 +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
24.2640 +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
24.2641 +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
24.2642 +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
24.2643 +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
24.2644 +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
24.2645 +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
24.2646 +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
24.2647 +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
24.2648 +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
24.2649 +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
24.2650 +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
24.2651 +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
24.2652 +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
24.2653 +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
24.2654 +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
24.2655 +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
24.2656 +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
24.2657 +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
24.2658 +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
24.2659 +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
24.2660 +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
24.2661 +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
24.2662 +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
24.2663 +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
24.2664 +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
24.2665 +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
24.2666 +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
24.2667 +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
24.2668 +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
24.2669 +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
24.2670 +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
24.2671 +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
24.2672 +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
24.2673 +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
24.2674 +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
24.2675 +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
24.2676 +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
24.2677 +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
24.2678 +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
24.2679 +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
24.2680 +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
24.2681 +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
24.2682 +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
24.2683 +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
24.2684 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
24.2685 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
24.2686 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
24.2687 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
24.2688 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
24.2689 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
24.2690 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
24.2691 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
24.2692 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
24.2693 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
24.2694 +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
24.2695 +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
24.2696 +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
24.2697 +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
24.2698 +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
24.2699 +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
24.2700 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
24.2701 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
24.2702 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
24.2703 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
24.2704 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
24.2705 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
24.2706 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
24.2707 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
24.2708 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
24.2709 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
24.2710 +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
24.2711 +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
24.2712 +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
24.2713 +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
24.2714 +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
24.2715 +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
24.2716 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
24.2717 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
24.2718 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
24.2719 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
24.2720 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
24.2721 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
24.2722 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
24.2723 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
24.2724 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
24.2725 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
24.2726 +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
24.2727 +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
24.2728 +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
24.2729 +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
24.2730 +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
24.2731 +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
24.2732 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
24.2733 +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;
24.2734 +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;
24.2735 +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A
24.2736 +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E
24.2737 +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;
24.2738 +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67
24.2739 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;
24.2740 +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69
24.2741 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;
24.2742 +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B
24.2743 +2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251;
24.2744 +2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271;
24.2745 +2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250;
24.2746 +2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;;
24.2747 +2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73;
24.2748 +2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72
24.2749 +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;
24.2750 +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;
24.2751 +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75
24.2752 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;
24.2753 +2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;;
24.2754 +2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;
24.2755 +2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;
24.2756 +2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;
24.2757 +2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L;<sub> 006A;;;;N;;;;;
24.2758 +2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;;
24.2759 +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
24.2760 +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
24.2761 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
24.2762 +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
24.2763 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
24.2764 +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
24.2765 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
24.2766 +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
24.2767 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
24.2768 +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
24.2769 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
24.2770 +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
24.2771 +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
24.2772 +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
24.2773 +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
24.2774 +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
24.2775 +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
24.2776 +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
24.2777 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
24.2778 +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
24.2779 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
24.2780 +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
24.2781 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
24.2782 +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
24.2783 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
24.2784 +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
24.2785 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
24.2786 +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
24.2787 +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
24.2788 +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
24.2789 +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
24.2790 +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
24.2791 +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
24.2792 +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
24.2793 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
24.2794 +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
24.2795 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
24.2796 +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
24.2797 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
24.2798 +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
24.2799 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
24.2800 +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
24.2801 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
24.2802 +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
24.2803 +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
24.2804 +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
24.2805 +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
24.2806 +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
24.2807 +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
24.2808 +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
24.2809 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
24.2810 +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
24.2811 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
24.2812 +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
24.2813 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
24.2814 +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
24.2815 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
24.2816 +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
24.2817 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
24.2818 +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
24.2819 +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
24.2820 +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
24.2821 +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
24.2822 +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
24.2823 +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
24.2824 +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
24.2825 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
24.2826 +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
24.2827 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
24.2828 +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
24.2829 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
24.2830 +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
24.2831 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
24.2832 +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
24.2833 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
24.2834 +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
24.2835 +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
24.2836 +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
24.2837 +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
24.2838 +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
24.2839 +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
24.2840 +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
24.2841 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
24.2842 +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
24.2843 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
24.2844 +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
24.2845 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
24.2846 +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
24.2847 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
24.2848 +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
24.2849 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
24.2850 +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
24.2851 +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
24.2852 +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
24.2853 +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
24.2854 +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
24.2855 +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
24.2856 +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
24.2857 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
24.2858 +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
24.2859 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
24.2860 +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
24.2861 +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
24.2862 +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
24.2863 +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
24.2864 +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
24.2865 +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
24.2866 +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
24.2867 +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
24.2868 +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
24.2869 +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
24.2870 +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
24.2871 +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
24.2872 +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
24.2873 +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0
24.2874 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1
24.2875 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2
24.2876 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3
24.2877 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4
24.2878 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5
24.2879 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6
24.2880 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7
24.2881 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8
24.2882 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9
24.2883 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA
24.2884 +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB
24.2885 +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC
24.2886 +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD
24.2887 +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE
24.2888 +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF
24.2889 +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0
24.2890 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1
24.2891 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2
24.2892 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3
24.2893 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4
24.2894 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5
24.2895 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6
24.2896 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7
24.2897 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8
24.2898 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9
24.2899 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA
24.2900 +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB
24.2901 +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC
24.2902 +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD
24.2903 +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE
24.2904 +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF
24.2905 +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0
24.2906 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1
24.2907 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2
24.2908 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3
24.2909 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4
24.2910 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5
24.2911 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
24.2912 +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
24.2913 +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
24.2914 +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
24.2915 +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
24.2916 +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
24.2917 +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
24.2918 +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
24.2919 +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
24.2920 +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
24.2921 +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
24.2922 +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
24.2923 +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
24.2924 +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
24.2925 +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
24.2926 +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
24.2927 +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;;
24.2928 +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
24.2929 +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
24.2930 +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
24.2931 +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
24.2932 +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
24.2933 +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
24.2934 +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
24.2935 +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
24.2936 +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
24.2937 +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
24.2938 +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
24.2939 +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
24.2940 +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
24.2941 +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
24.2942 +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
24.2943 +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
24.2944 +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
24.2945 +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
24.2946 +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;;
24.2947 +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
24.2948 +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
24.2949 +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
24.2950 +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
24.2951 +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;;
24.2952 +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
24.2953 +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
24.2954 +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
24.2955 +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
24.2956 +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
24.2957 +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
24.2958 +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
24.2959 +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
24.2960 +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
24.2961 +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
24.2962 +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
24.2963 +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;;
24.2964 +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
24.2965 +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;;
24.2966 +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
24.2967 +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
24.2968 +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
24.2969 +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
24.2970 +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
24.2971 +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
24.2972 +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
24.2973 +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
24.2974 +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
24.2975 +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
24.2976 +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
24.2977 +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
24.2978 +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
24.2979 +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
24.2980 +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
24.2981 +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
24.2982 +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
24.2983 +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
24.2984 +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
24.2985 +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
24.2986 +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
24.2987 +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
24.2988 +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
24.2989 +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
24.2990 +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
24.2991 +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
24.2992 +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
24.2993 +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
24.2994 +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
24.2995 +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
24.2996 +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
24.2997 +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
24.2998 +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
24.2999 +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
24.3000 +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
24.3001 +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
24.3002 +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
24.3003 +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
24.3004 +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
24.3005 +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
24.3006 +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
24.3007 +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
24.3008 +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
24.3009 +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
24.3010 +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
24.3011 +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
24.3012 +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
24.3013 +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
24.3014 +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
24.3015 +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
24.3016 +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
24.3017 +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
24.3018 +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
24.3019 +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
24.3020 +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
24.3021 +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
24.3022 +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
24.3023 +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
24.3024 +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
24.3025 +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
24.3026 +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
24.3027 +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
24.3028 +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
24.3029 +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
24.3030 +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
24.3031 +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
24.3032 +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
24.3033 +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
24.3034 +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
24.3035 +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
24.3036 +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
24.3037 +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
24.3038 +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
24.3039 +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
24.3040 +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
24.3041 +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
24.3042 +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
24.3043 +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
24.3044 +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
24.3045 +2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;;
24.3046 +2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;;
24.3047 +2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;;
24.3048 +2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;;
24.3049 +2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;;
24.3050 +2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;;
24.3051 +2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;;
24.3052 +2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;;
24.3053 +2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;;
24.3054 +2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;;
24.3055 +2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;;
24.3056 +2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;;
24.3057 +2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;;
24.3058 +2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;;
24.3059 +2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;;
24.3060 +2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;;
24.3061 +2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;;
24.3062 +2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;;
24.3063 +2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
24.3064 +2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;;
24.3065 +2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
24.3066 +2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;;
24.3067 +2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;;
24.3068 +2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;;
24.3069 +2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;;
24.3070 +2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;;
24.3071 +2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;;
24.3072 +2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
24.3073 +2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;;
24.3074 +2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;;
24.3075 +2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
24.3076 +2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;;
24.3077 +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
24.3078 +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
24.3079 +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
24.3080 +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
24.3081 +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
24.3082 +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
24.3083 +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
24.3084 +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
24.3085 +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
24.3086 +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
24.3087 +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
24.3088 +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
24.3089 +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
24.3090 +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
24.3091 +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
24.3092 +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
24.3093 +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
24.3094 +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
24.3095 +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
24.3096 +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
24.3097 +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
24.3098 +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
24.3099 +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
24.3100 +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
24.3101 +2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;;
24.3102 +2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;;
24.3103 +2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;;
24.3104 +2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;;
24.3105 +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
24.3106 +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
24.3107 +2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;;
24.3108 +2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;;
24.3109 +2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;;
24.3110 +2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;;
24.3111 +2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
24.3112 +2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
24.3113 +2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;;
24.3114 +2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;;
24.3115 +2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;;
24.3116 +2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;;
24.3117 +2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
24.3118 +2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
24.3119 +2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.3120 +2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.3121 +2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
24.3122 +2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;;
24.3123 +2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;;
24.3124 +2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;
24.3125 +2E30;RING POINT;Po;0;ON;;;;;N;;;;;
24.3126 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
24.3127 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
24.3128 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
24.3129 @@ -8632,7 +10239,7 @@
24.3130 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
24.3131 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
24.3132 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
24.3133 -30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
24.3134 +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
24.3135 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
24.3136 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
24.3137 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
24.3138 @@ -8677,6 +10284,7 @@
24.3139 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
24.3140 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
24.3141 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
24.3142 +312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
24.3143 3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
24.3144 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
24.3145 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
24.3146 @@ -8811,6 +10419,42 @@
24.3147 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
24.3148 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
24.3149 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
24.3150 +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
24.3151 +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
24.3152 +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
24.3153 +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
24.3154 +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
24.3155 +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
24.3156 +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
24.3157 +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
24.3158 +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
24.3159 +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
24.3160 +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
24.3161 +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
24.3162 +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
24.3163 +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
24.3164 +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
24.3165 +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
24.3166 +31D0;CJK STROKE H;So;0;ON;;;;;N;;;;;
24.3167 +31D1;CJK STROKE S;So;0;ON;;;;;N;;;;;
24.3168 +31D2;CJK STROKE P;So;0;ON;;;;;N;;;;;
24.3169 +31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;;
24.3170 +31D4;CJK STROKE D;So;0;ON;;;;;N;;;;;
24.3171 +31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;;
24.3172 +31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;;
24.3173 +31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;;
24.3174 +31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;;
24.3175 +31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;;
24.3176 +31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;;
24.3177 +31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;;
24.3178 +31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;;
24.3179 +31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;;
24.3180 +31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;;
24.3181 +31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;;
24.3182 +31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;;
24.3183 +31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;
24.3184 +31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;
24.3185 +31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;;
24.3186 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
24.3187 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
24.3188 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
24.3189 @@ -8940,6 +10584,7 @@
24.3190 327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
24.3191 327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
24.3192 327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
24.3193 +327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
24.3194 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
24.3195 3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
24.3196 3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
24.3197 @@ -9391,7 +11036,7 @@
24.3198 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
24.3199 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
24.3200 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
24.3201 -9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
24.3202 +9FC3;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
24.3203 A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
24.3204 A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
24.3205 A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
24.3206 @@ -9413,7 +11058,7 @@
24.3207 A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
24.3208 A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
24.3209 A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
24.3210 -A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
24.3211 +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
24.3212 A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
24.3213 A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
24.3214 A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
24.3215 @@ -10612,6 +12257,879 @@
24.3216 A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
24.3217 A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
24.3218 A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
24.3219 +A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;;
24.3220 +A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;;
24.3221 +A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
24.3222 +A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
24.3223 +A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;;
24.3224 +A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
24.3225 +A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;;
24.3226 +A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
24.3227 +A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;;
24.3228 +A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;;
24.3229 +A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;;
24.3230 +A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;;
24.3231 +A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
24.3232 +A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
24.3233 +A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
24.3234 +A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
24.3235 +A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;;
24.3236 +A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;;
24.3237 +A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
24.3238 +A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;;
24.3239 +A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
24.3240 +A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;;
24.3241 +A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
24.3242 +A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
24.3243 +A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
24.3244 +A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
24.3245 +A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
24.3246 +A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
24.3247 +A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;;
24.3248 +A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
24.3249 +A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
24.3250 +A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;;
24.3251 +A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
24.3252 +A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
24.3253 +A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
24.3254 +A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
24.3255 +A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;;
24.3256 +A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;;
24.3257 +A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;;
24.3258 +A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;;
24.3259 +A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;;
24.3260 +A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;;
24.3261 +A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
24.3262 +A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;;
24.3263 +A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
24.3264 +A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;;
24.3265 +A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;;
24.3266 +A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;;
24.3267 +A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;;
24.3268 +A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
24.3269 +A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
24.3270 +A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
24.3271 +A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;;
24.3272 +A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;;
24.3273 +A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;;
24.3274 +A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
24.3275 +A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;;
24.3276 +A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
24.3277 +A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
24.3278 +A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
24.3279 +A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
24.3280 +A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
24.3281 +A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
24.3282 +A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
24.3283 +A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
24.3284 +A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
24.3285 +A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
24.3286 +A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
24.3287 +A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;;
24.3288 +A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
24.3289 +A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
24.3290 +A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
24.3291 +A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
24.3292 +A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;;
24.3293 +A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;;
24.3294 +A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;;
24.3295 +A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
24.3296 +A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;;
24.3297 +A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
24.3298 +A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;;
24.3299 +A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
24.3300 +A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;;
24.3301 +A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
24.3302 +A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;;
24.3303 +A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;;
24.3304 +A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;;
24.3305 +A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;;
24.3306 +A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;;
24.3307 +A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
24.3308 +A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
24.3309 +A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
24.3310 +A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;;
24.3311 +A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;;
24.3312 +A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;;
24.3313 +A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
24.3314 +A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
24.3315 +A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
24.3316 +A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
24.3317 +A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
24.3318 +A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
24.3319 +A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
24.3320 +A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
24.3321 +A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
24.3322 +A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;;
24.3323 +A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;;
24.3324 +A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;;
24.3325 +A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
24.3326 +A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;;
24.3327 +A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;;
24.3328 +A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
24.3329 +A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
24.3330 +A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
24.3331 +A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
24.3332 +A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;;
24.3333 +A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;;
24.3334 +A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;;
24.3335 +A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;;
24.3336 +A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;;
24.3337 +A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;;
24.3338 +A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;;
24.3339 +A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;;
24.3340 +A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;;
24.3341 +A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;;
24.3342 +A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;;
24.3343 +A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;;
24.3344 +A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;;
24.3345 +A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;;
24.3346 +A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;;
24.3347 +A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;;
24.3348 +A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;;
24.3349 +A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;;
24.3350 +A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;;
24.3351 +A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;;
24.3352 +A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;;
24.3353 +A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;;
24.3354 +A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;;
24.3355 +A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;;
24.3356 +A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;;
24.3357 +A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;;
24.3358 +A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;;
24.3359 +A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;;
24.3360 +A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;;
24.3361 +A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;;
24.3362 +A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;;
24.3363 +A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;;
24.3364 +A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;;
24.3365 +A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;;
24.3366 +A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;;
24.3367 +A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;;
24.3368 +A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;;
24.3369 +A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;;
24.3370 +A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;;
24.3371 +A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;;
24.3372 +A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
24.3373 +A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;;
24.3374 +A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
24.3375 +A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;;
24.3376 +A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
24.3377 +A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;;
24.3378 +A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;;
24.3379 +A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;;
24.3380 +A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;;
24.3381 +A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
24.3382 +A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
24.3383 +A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
24.3384 +A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;;
24.3385 +A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;;
24.3386 +A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;;
24.3387 +A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
24.3388 +A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
24.3389 +A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
24.3390 +A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
24.3391 +A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
24.3392 +A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
24.3393 +A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
24.3394 +A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
24.3395 +A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
24.3396 +A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
24.3397 +A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
24.3398 +A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
24.3399 +A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
24.3400 +A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;;
24.3401 +A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
24.3402 +A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
24.3403 +A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
24.3404 +A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
24.3405 +A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;;
24.3406 +A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;;
24.3407 +A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;;
24.3408 +A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
24.3409 +A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;;
24.3410 +A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
24.3411 +A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;;
24.3412 +A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
24.3413 +A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;;
24.3414 +A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
24.3415 +A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;;
24.3416 +A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;;
24.3417 +A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;;
24.3418 +A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;;
24.3419 +A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;;
24.3420 +A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
24.3421 +A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
24.3422 +A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
24.3423 +A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;;
24.3424 +A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;;
24.3425 +A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;;
24.3426 +A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
24.3427 +A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
24.3428 +A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
24.3429 +A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
24.3430 +A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
24.3431 +A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
24.3432 +A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
24.3433 +A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
24.3434 +A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
24.3435 +A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
24.3436 +A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
24.3437 +A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
24.3438 +A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
24.3439 +A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;;
24.3440 +A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
24.3441 +A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
24.3442 +A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
24.3443 +A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
24.3444 +A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;;
24.3445 +A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;;
24.3446 +A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;;
24.3447 +A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
24.3448 +A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;;
24.3449 +A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
24.3450 +A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;;
24.3451 +A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;;
24.3452 +A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;;
24.3453 +A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
24.3454 +A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;;
24.3455 +A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;;
24.3456 +A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;;
24.3457 +A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;;
24.3458 +A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;;
24.3459 +A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;;
24.3460 +A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;;
24.3461 +A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;;
24.3462 +A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
24.3463 +A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;;
24.3464 +A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;;
24.3465 +A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;;
24.3466 +A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
24.3467 +A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
24.3468 +A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
24.3469 +A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
24.3470 +A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
24.3471 +A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
24.3472 +A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
24.3473 +A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
24.3474 +A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
24.3475 +A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;;
24.3476 +A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;;
24.3477 +A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;;
24.3478 +A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
24.3479 +A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;;
24.3480 +A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;;
24.3481 +A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
24.3482 +A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;;
24.3483 +A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
24.3484 +A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
24.3485 +A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
24.3486 +A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;;
24.3487 +A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;;
24.3488 +A60D;VAI COMMA;Po;0;ON;;;;;N;;;;;
24.3489 +A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;;
24.3490 +A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;;
24.3491 +A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;;
24.3492 +A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;;
24.3493 +A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;;
24.3494 +A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;;
24.3495 +A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;;
24.3496 +A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;;
24.3497 +A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;;
24.3498 +A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;;
24.3499 +A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;;
24.3500 +A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;;
24.3501 +A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;;
24.3502 +A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;;
24.3503 +A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;;
24.3504 +A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;;
24.3505 +A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;;
24.3506 +A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;;
24.3507 +A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.3508 +A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.3509 +A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.3510 +A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.3511 +A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.3512 +A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.3513 +A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.3514 +A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.3515 +A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.3516 +A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.3517 +A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;;
24.3518 +A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;;
24.3519 +A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641;
24.3520 +A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640
24.3521 +A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643;
24.3522 +A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642
24.3523 +A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645;
24.3524 +A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644
24.3525 +A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647;
24.3526 +A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646
24.3527 +A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649;
24.3528 +A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648
24.3529 +A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B;
24.3530 +A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A
24.3531 +A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D;
24.3532 +A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C
24.3533 +A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F;
24.3534 +A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E
24.3535 +A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651;
24.3536 +A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650
24.3537 +A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653;
24.3538 +A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652
24.3539 +A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655;
24.3540 +A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654
24.3541 +A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657;
24.3542 +A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656
24.3543 +A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659;
24.3544 +A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658
24.3545 +A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B;
24.3546 +A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A
24.3547 +A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D;
24.3548 +A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C
24.3549 +A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F;
24.3550 +A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E
24.3551 +A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663;
24.3552 +A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662
24.3553 +A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665;
24.3554 +A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664
24.3555 +A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667;
24.3556 +A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666
24.3557 +A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669;
24.3558 +A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668
24.3559 +A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B;
24.3560 +A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A
24.3561 +A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D;
24.3562 +A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C
24.3563 +A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;;
24.3564 +A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;;
24.3565 +A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
24.3566 +A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
24.3567 +A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
24.3568 +A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;
24.3569 +A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;
24.3570 +A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;
24.3571 +A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;
24.3572 +A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;;
24.3573 +A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681;
24.3574 +A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680
24.3575 +A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683;
24.3576 +A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682
24.3577 +A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685;
24.3578 +A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684
24.3579 +A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687;
24.3580 +A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686
24.3581 +A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689;
24.3582 +A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688
24.3583 +A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B;
24.3584 +A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A
24.3585 +A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D;
24.3586 +A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C
24.3587 +A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F;
24.3588 +A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E
24.3589 +A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691;
24.3590 +A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690
24.3591 +A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693;
24.3592 +A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692
24.3593 +A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;
24.3594 +A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694
24.3595 +A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;
24.3596 +A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696
24.3597 +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
24.3598 +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
24.3599 +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
24.3600 +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
24.3601 +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
24.3602 +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
24.3603 +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
24.3604 +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
24.3605 +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3606 +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3607 +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3608 +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3609 +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3610 +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3611 +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3612 +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3613 +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3614 +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3615 +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3616 +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3617 +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3618 +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3619 +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
24.3620 +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;
24.3621 +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;
24.3622 +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;
24.3623 +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;
24.3624 +A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;;
24.3625 +A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;;
24.3626 +A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
24.3627 +A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
24.3628 +A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;;
24.3629 +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;
24.3630 +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;
24.3631 +A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723;
24.3632 +A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722
24.3633 +A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725;
24.3634 +A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724
24.3635 +A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727;
24.3636 +A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726
24.3637 +A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729;
24.3638 +A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728
24.3639 +A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B;
24.3640 +A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A
24.3641 +A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D;
24.3642 +A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C
24.3643 +A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F;
24.3644 +A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E
24.3645 +A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;;
24.3646 +A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;;
24.3647 +A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733;
24.3648 +A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732
24.3649 +A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735;
24.3650 +A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734
24.3651 +A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737;
24.3652 +A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736
24.3653 +A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739;
24.3654 +A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738
24.3655 +A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B;
24.3656 +A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A
24.3657 +A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D;
24.3658 +A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C
24.3659 +A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F;
24.3660 +A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E
24.3661 +A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741;
24.3662 +A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740
24.3663 +A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743;
24.3664 +A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742
24.3665 +A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745;
24.3666 +A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744
24.3667 +A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747;
24.3668 +A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746
24.3669 +A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749;
24.3670 +A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748
24.3671 +A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B;
24.3672 +A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A
24.3673 +A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D;
24.3674 +A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C
24.3675 +A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F;
24.3676 +A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E
24.3677 +A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751;
24.3678 +A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750
24.3679 +A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753;
24.3680 +A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752
24.3681 +A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755;
24.3682 +A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754
24.3683 +A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757;
24.3684 +A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756
24.3685 +A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759;
24.3686 +A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758
24.3687 +A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B;
24.3688 +A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A
24.3689 +A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D;
24.3690 +A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C
24.3691 +A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F;
24.3692 +A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E
24.3693 +A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761;
24.3694 +A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760
24.3695 +A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763;
24.3696 +A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762
24.3697 +A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765;
24.3698 +A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764
24.3699 +A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767;
24.3700 +A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766
24.3701 +A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769;
24.3702 +A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768
24.3703 +A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B;
24.3704 +A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A
24.3705 +A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D;
24.3706 +A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C
24.3707 +A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F;
24.3708 +A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E
24.3709 +A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;;
24.3710 +A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;;
24.3711 +A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;;
24.3712 +A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;;
24.3713 +A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;;
24.3714 +A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;;
24.3715 +A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;;
24.3716 +A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;;
24.3717 +A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;;
24.3718 +A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A;
24.3719 +A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779
24.3720 +A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C;
24.3721 +A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B
24.3722 +A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79;
24.3723 +A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F;
24.3724 +A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E
24.3725 +A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781;
24.3726 +A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780
24.3727 +A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783;
24.3728 +A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782
24.3729 +A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785;
24.3730 +A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784
24.3731 +A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787;
24.3732 +A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786
24.3733 +A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;;
24.3734 +A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;;
24.3735 +A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;;
24.3736 +A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C;
24.3737 +A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B
24.3738 +A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;
24.3739 +A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;
24.3740 +A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;;
24.3741 +A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;;
24.3742 +A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;;
24.3743 +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
24.3744 +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
24.3745 +A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;;
24.3746 +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
24.3747 +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
24.3748 +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
24.3749 +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
24.3750 +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
24.3751 +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
24.3752 +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
24.3753 +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
24.3754 +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
24.3755 +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
24.3756 +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
24.3757 +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
24.3758 +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
24.3759 +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
24.3760 +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
24.3761 +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
24.3762 +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
24.3763 +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
24.3764 +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
24.3765 +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
24.3766 +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
24.3767 +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
24.3768 +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
24.3769 +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
24.3770 +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
24.3771 +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
24.3772 +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
24.3773 +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
24.3774 +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
24.3775 +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
24.3776 +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
24.3777 +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
24.3778 +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
24.3779 +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
24.3780 +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
24.3781 +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
24.3782 +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
24.3783 +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
24.3784 +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
24.3785 +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
24.3786 +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
24.3787 +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;
24.3788 +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;
24.3789 +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;
24.3790 +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;
24.3791 +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;
24.3792 +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;
24.3793 +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;
24.3794 +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;
24.3795 +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;
24.3796 +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;
24.3797 +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;
24.3798 +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;
24.3799 +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;
24.3800 +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;
24.3801 +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;
24.3802 +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;
24.3803 +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;
24.3804 +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;
24.3805 +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;
24.3806 +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;
24.3807 +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;
24.3808 +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;
24.3809 +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
24.3810 +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;
24.3811 +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;
24.3812 +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;
24.3813 +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;
24.3814 +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;
24.3815 +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;
24.3816 +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;
24.3817 +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;
24.3818 +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;
24.3819 +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;
24.3820 +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;
24.3821 +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;
24.3822 +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;
24.3823 +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;
24.3824 +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;
24.3825 +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;
24.3826 +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;
24.3827 +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;
24.3828 +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;
24.3829 +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;
24.3830 +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;
24.3831 +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;
24.3832 +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;
24.3833 +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;
24.3834 +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;
24.3835 +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;
24.3836 +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;
24.3837 +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;
24.3838 +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;
24.3839 +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;
24.3840 +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;
24.3841 +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;
24.3842 +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;
24.3843 +A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
24.3844 +A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
24.3845 +A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;;
24.3846 +A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;;
24.3847 +A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;;
24.3848 +A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;;
24.3849 +A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;;
24.3850 +A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;;
24.3851 +A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
24.3852 +A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
24.3853 +A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
24.3854 +A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
24.3855 +A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;;
24.3856 +A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;;
24.3857 +A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;;
24.3858 +A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;;
24.3859 +A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;;
24.3860 +A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;;
24.3861 +A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;;
24.3862 +A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;;
24.3863 +A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;;
24.3864 +A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;;
24.3865 +A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;;
24.3866 +A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;;
24.3867 +A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;;
24.3868 +A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;;
24.3869 +A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;;
24.3870 +A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;;
24.3871 +A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;;
24.3872 +A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;;
24.3873 +A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;;
24.3874 +A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;;
24.3875 +A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;;
24.3876 +A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;;
24.3877 +A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;;
24.3878 +A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;;
24.3879 +A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;;
24.3880 +A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;;
24.3881 +A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;;
24.3882 +A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;;
24.3883 +A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;;
24.3884 +A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;;
24.3885 +A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;;
24.3886 +A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;;
24.3887 +A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;;
24.3888 +A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;;
24.3889 +A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;;
24.3890 +A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;;
24.3891 +A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;;
24.3892 +A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;;
24.3893 +A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;;
24.3894 +A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;;
24.3895 +A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;;
24.3896 +A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
24.3897 +A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
24.3898 +A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
24.3899 +A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
24.3900 +A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
24.3901 +A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
24.3902 +A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
24.3903 +A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;;
24.3904 +A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;;
24.3905 +A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
24.3906 +A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
24.3907 +A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
24.3908 +A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
24.3909 +A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
24.3910 +A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
24.3911 +A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.3912 +A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;
24.3913 +A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
24.3914 +A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.3915 +A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.3916 +A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.3917 +A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.3918 +A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.3919 +A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.3920 +A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.3921 +A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.3922 +A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.3923 +A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.3924 +A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.3925 +A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.3926 +A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.3927 +A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.3928 +A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.3929 +A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.3930 +A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.3931 +A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.3932 +A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.3933 +A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.3934 +A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;;
24.3935 +A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;;
24.3936 +A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;;
24.3937 +A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;;
24.3938 +A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;;
24.3939 +A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;;
24.3940 +A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;;
24.3941 +A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;;
24.3942 +A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;;
24.3943 +A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;;
24.3944 +A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;;
24.3945 +A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;;
24.3946 +A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;;
24.3947 +A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;;
24.3948 +A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;;
24.3949 +A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;;
24.3950 +A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;;
24.3951 +A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;;
24.3952 +A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;;
24.3953 +A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;;
24.3954 +A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;;
24.3955 +A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;;
24.3956 +A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;;
24.3957 +A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;;
24.3958 +A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;;
24.3959 +A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;;
24.3960 +A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;;
24.3961 +A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;;
24.3962 +A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;;
24.3963 +A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;;
24.3964 +A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;;
24.3965 +A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;;
24.3966 +A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;;
24.3967 +A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;;
24.3968 +A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;;
24.3969 +A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;;
24.3970 +A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;;
24.3971 +A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;;
24.3972 +A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;;
24.3973 +A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;;
24.3974 +A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;;
24.3975 +A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;;
24.3976 +A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;;
24.3977 +A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;;
24.3978 +A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;;
24.3979 +A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;;
24.3980 +A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;;
24.3981 +A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;;
24.3982 +A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;;
24.3983 +A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;;
24.3984 +A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;;
24.3985 +A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;;
24.3986 +A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;;
24.3987 +A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;;
24.3988 +A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;;
24.3989 +A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;;
24.3990 +A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;;
24.3991 +A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;;
24.3992 +A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;;
24.3993 +A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;;
24.3994 +A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;;
24.3995 +A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
24.3996 +A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
24.3997 +A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
24.3998 +A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
24.3999 +A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
24.4000 +A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
24.4001 +A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;;
24.4002 +A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;;
24.4003 +A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
24.4004 +A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
24.4005 +A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
24.4006 +A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;;
24.4007 +A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;;
24.4008 +A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;;
24.4009 +AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;;
24.4010 +AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;;
24.4011 +AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;;
24.4012 +AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;;
24.4013 +AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;;
24.4014 +AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;;
24.4015 +AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;;
24.4016 +AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;;
24.4017 +AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;;
24.4018 +AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;;
24.4019 +AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;;
24.4020 +AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;;
24.4021 +AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;;
24.4022 +AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;;
24.4023 +AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;;
24.4024 +AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;;
24.4025 +AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;;
24.4026 +AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;;
24.4027 +AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;;
24.4028 +AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;;
24.4029 +AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;;
24.4030 +AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;;
24.4031 +AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;;
24.4032 +AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;;
24.4033 +AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;;
24.4034 +AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;;
24.4035 +AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;;
24.4036 +AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;;
24.4037 +AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;;
24.4038 +AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;;
24.4039 +AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;;
24.4040 +AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;;
24.4041 +AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;;
24.4042 +AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;;
24.4043 +AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;;
24.4044 +AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;;
24.4045 +AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;;
24.4046 +AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;;
24.4047 +AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;;
24.4048 +AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;;
24.4049 +AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;;
24.4050 +AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
24.4051 +AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
24.4052 +AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
24.4053 +AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;;
24.4054 +AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
24.4055 +AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
24.4056 +AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
24.4057 +AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
24.4058 +AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
24.4059 +AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
24.4060 +AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;;
24.4061 +AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;;
24.4062 +AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;;
24.4063 +AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;;
24.4064 +AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;;
24.4065 +AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;;
24.4066 +AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
24.4067 +AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;;
24.4068 +AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;;
24.4069 +AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;;
24.4070 +AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;;
24.4071 +AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;;
24.4072 +AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;;
24.4073 +AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;;
24.4074 +AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;;
24.4075 +AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;;
24.4076 +AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;;
24.4077 +AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;;
24.4078 +AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
24.4079 +AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
24.4080 +AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
24.4081 +AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
24.4082 +AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
24.4083 +AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
24.4084 +AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
24.4085 +AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
24.4086 +AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
24.4087 +AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
24.4088 +AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;;
24.4089 +AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;;
24.4090 +AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;;
24.4091 +AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;;
24.4092 AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
24.4093 D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
24.4094 D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
24.4095 @@ -10729,7 +13247,7 @@
24.4096 F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
24.4097 F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
24.4098 F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
24.4099 -F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
24.4100 +F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;;
24.4101 F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
24.4102 F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
24.4103 F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
24.4104 @@ -10737,12 +13255,12 @@
24.4105 F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
24.4106 F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
24.4107 F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
24.4108 -F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
24.4109 +F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;;
24.4110 F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
24.4111 F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
24.4112 F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
24.4113 F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
24.4114 -F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
24.4115 +F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;;
24.4116 F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
24.4117 F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
24.4118 F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
24.4119 @@ -10800,7 +13318,7 @@
24.4120 F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
24.4121 F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
24.4122 F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
24.4123 -F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
24.4124 +F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;;
24.4125 F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
24.4126 F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
24.4127 F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
24.4128 @@ -10831,9 +13349,9 @@
24.4129 F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
24.4130 F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
24.4131 F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
24.4132 -F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
24.4133 +F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;;
24.4134 F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
24.4135 -F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
24.4136 +F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;;
24.4137 F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
24.4138 F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
24.4139 F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
24.4140 @@ -10875,7 +13393,7 @@
24.4141 F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
24.4142 F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
24.4143 F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
24.4144 -F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
24.4145 +F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;;
24.4146 F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
24.4147 F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
24.4148 FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
24.4149 @@ -10983,6 +13501,112 @@
24.4150 FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
24.4151 FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
24.4152 FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
24.4153 +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
24.4154 +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
24.4155 +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
24.4156 +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
24.4157 +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
24.4158 +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
24.4159 +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
24.4160 +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
24.4161 +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
24.4162 +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
24.4163 +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
24.4164 +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
24.4165 +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
24.4166 +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
24.4167 +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
24.4168 +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
24.4169 +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
24.4170 +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
24.4171 +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
24.4172 +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
24.4173 +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
24.4174 +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
24.4175 +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
24.4176 +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
24.4177 +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
24.4178 +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
24.4179 +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
24.4180 +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
24.4181 +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
24.4182 +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
24.4183 +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
24.4184 +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
24.4185 +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
24.4186 +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
24.4187 +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
24.4188 +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
24.4189 +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
24.4190 +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
24.4191 +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
24.4192 +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
24.4193 +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
24.4194 +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
24.4195 +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
24.4196 +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
24.4197 +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
24.4198 +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
24.4199 +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
24.4200 +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
24.4201 +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
24.4202 +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
24.4203 +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
24.4204 +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
24.4205 +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
24.4206 +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
24.4207 +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
24.4208 +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
24.4209 +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
24.4210 +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
24.4211 +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
24.4212 +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
24.4213 +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
24.4214 +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
24.4215 +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
24.4216 +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
24.4217 +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
24.4218 +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
24.4219 +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
24.4220 +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
24.4221 +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
24.4222 +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
24.4223 +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
24.4224 +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
24.4225 +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
24.4226 +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
24.4227 +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
24.4228 +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
24.4229 +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
24.4230 +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
24.4231 +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
24.4232 +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
24.4233 +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
24.4234 +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
24.4235 +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
24.4236 +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
24.4237 +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
24.4238 +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
24.4239 +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
24.4240 +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
24.4241 +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
24.4242 +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
24.4243 +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
24.4244 +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
24.4245 +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
24.4246 +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
24.4247 +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
24.4248 +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
24.4249 +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
24.4250 +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
24.4251 +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
24.4252 +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
24.4253 +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
24.4254 +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
24.4255 +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
24.4256 +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
24.4257 +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
24.4258 +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
24.4259 FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
24.4260 FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
24.4261 FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
24.4262 @@ -11007,7 +13631,7 @@
24.4263 FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
24.4264 FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
24.4265 FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
24.4266 -FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
24.4267 +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
24.4268 FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
24.4269 FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
24.4270 FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
24.4271 @@ -11652,10 +14276,23 @@
24.4272 FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
24.4273 FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
24.4274 FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
24.4275 +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
24.4276 +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
24.4277 +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
24.4278 +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
24.4279 +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
24.4280 +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
24.4281 +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
24.4282 +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
24.4283 +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
24.4284 +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
24.4285 FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
24.4286 FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
24.4287 FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
24.4288 FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
24.4289 +FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;;
24.4290 +FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
24.4291 +FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;;
24.4292 FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
24.4293 FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
24.4294 FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
24.4295 @@ -11696,19 +14333,19 @@
24.4296 FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
24.4297 FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
24.4298 FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
24.4299 -FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
24.4300 -FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
24.4301 -FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
24.4302 -FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
24.4303 -FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
24.4304 -FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
24.4305 +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;
24.4306 +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;
24.4307 +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;
24.4308 +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;
24.4309 +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;
24.4310 +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
24.4311 FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
24.4312 FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
24.4313 FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
24.4314 -FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
24.4315 -FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
24.4316 -FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
24.4317 -FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
24.4318 +FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
24.4319 +FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
24.4320 +FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;
24.4321 +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;
24.4322 FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
24.4323 FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
24.4324 FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
24.4325 @@ -11865,11 +14502,11 @@
24.4326 FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
24.4327 FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
24.4328 FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
24.4329 -FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
24.4330 +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
24.4331 FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
24.4332 -FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
24.4333 +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
24.4334 FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
24.4335 -FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
24.4336 +FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
24.4337 FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
24.4338 FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
24.4339 FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
24.4340 @@ -11955,7 +14592,7 @@
24.4341 FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
24.4342 FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
24.4343 FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
24.4344 -FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
24.4345 +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
24.4346 FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
24.4347 FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
24.4348 FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
24.4349 @@ -12080,9 +14717,9 @@
24.4350 FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
24.4351 FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
24.4352 FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
24.4353 -FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
24.4354 -FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
24.4355 -FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
24.4356 +FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
24.4357 +FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
24.4358 +FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
24.4359 FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
24.4360 FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
24.4361 10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
24.4362 @@ -12353,6 +14990,217 @@
24.4363 1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
24.4364 1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
24.4365 1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
24.4366 +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
24.4367 +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
24.4368 +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
24.4369 +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
24.4370 +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
24.4371 +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
24.4372 +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
24.4373 +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
24.4374 +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
24.4375 +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
24.4376 +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
24.4377 +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
24.4378 +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
24.4379 +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
24.4380 +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
24.4381 +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
24.4382 +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
24.4383 +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
24.4384 +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
24.4385 +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
24.4386 +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
24.4387 +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
24.4388 +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
24.4389 +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
24.4390 +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
24.4391 +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
24.4392 +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
24.4393 +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
24.4394 +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
24.4395 +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
24.4396 +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
24.4397 +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
24.4398 +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
24.4399 +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
24.4400 +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
24.4401 +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
24.4402 +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
24.4403 +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
24.4404 +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
24.4405 +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
24.4406 +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
24.4407 +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
24.4408 +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
24.4409 +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
24.4410 +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
24.4411 +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
24.4412 +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
24.4413 +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
24.4414 +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
24.4415 +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
24.4416 +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
24.4417 +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
24.4418 +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
24.4419 +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
24.4420 +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
24.4421 +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
24.4422 +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
24.4423 +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
24.4424 +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
24.4425 +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
24.4426 +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
24.4427 +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
24.4428 +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
24.4429 +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
24.4430 +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
24.4431 +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
24.4432 +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
24.4433 +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
24.4434 +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
24.4435 +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
24.4436 +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
24.4437 +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
24.4438 +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
24.4439 +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
24.4440 +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
24.4441 +10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;
24.4442 +10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;
24.4443 +10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;
24.4444 +10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;;
24.4445 +10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;;
24.4446 +10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;;
24.4447 +10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;;
24.4448 +10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;;
24.4449 +10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;;
24.4450 +10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
24.4451 +1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
24.4452 +1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
24.4453 +101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
24.4454 +101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
24.4455 +101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;;
24.4456 +101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;;
24.4457 +101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;;
24.4458 +101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;;
24.4459 +101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;;
24.4460 +101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;;
24.4461 +101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;;
24.4462 +101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;;
24.4463 +101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;;
24.4464 +101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;;
24.4465 +101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;;
24.4466 +101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;;
24.4467 +101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;;
24.4468 +101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;;
24.4469 +101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;;
24.4470 +101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;;
24.4471 +101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;;
24.4472 +101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;;
24.4473 +101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;;
24.4474 +101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;;
24.4475 +101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;;
24.4476 +101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;;
24.4477 +101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;;
24.4478 +101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;;
24.4479 +101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;;
24.4480 +101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;;
24.4481 +101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;;
24.4482 +101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;;
24.4483 +101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;;
24.4484 +101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;;
24.4485 +101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;;
24.4486 +101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;;
24.4487 +101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;;
24.4488 +101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;;
24.4489 +101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;;
24.4490 +101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;;
24.4491 +101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;;
24.4492 +101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;;
24.4493 +101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;;
24.4494 +101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;;
24.4495 +101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;;
24.4496 +101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;;
24.4497 +101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;;
24.4498 +101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;;
24.4499 +10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;;
24.4500 +10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;;
24.4501 +10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;;
24.4502 +10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;;
24.4503 +10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;;
24.4504 +10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;;
24.4505 +10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;;
24.4506 +10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;;
24.4507 +10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;;
24.4508 +10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;;
24.4509 +1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;;
24.4510 +1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;;
24.4511 +1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;;
24.4512 +1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;;
24.4513 +1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;;
24.4514 +1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;;
24.4515 +10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;;
24.4516 +10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;;
24.4517 +10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;;
24.4518 +10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;;
24.4519 +10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;;
24.4520 +10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;;
24.4521 +10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;;
24.4522 +10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;;
24.4523 +10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;;
24.4524 +10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;;
24.4525 +1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;;
24.4526 +1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;;
24.4527 +1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;;
24.4528 +102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;;
24.4529 +102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;;
24.4530 +102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;;
24.4531 +102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;;
24.4532 +102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;;
24.4533 +102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;;
24.4534 +102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;;
24.4535 +102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;;
24.4536 +102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;;
24.4537 +102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;;
24.4538 +102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;;
24.4539 +102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;;
24.4540 +102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;;
24.4541 +102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;;
24.4542 +102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;;
24.4543 +102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;;
24.4544 +102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;;
24.4545 +102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;;
24.4546 +102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;;
24.4547 +102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;;
24.4548 +102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;;
24.4549 +102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;;
24.4550 +102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;;
24.4551 +102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;;
24.4552 +102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;;
24.4553 +102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;;
24.4554 +102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;;
24.4555 +102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;;
24.4556 +102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;;
24.4557 +102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;;
24.4558 +102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;;
24.4559 +102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;;
24.4560 +102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;;
24.4561 +102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;;
24.4562 +102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;;
24.4563 +102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;;
24.4564 +102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;;
24.4565 +102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;;
24.4566 +102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;;
24.4567 +102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;;
24.4568 +102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;;
24.4569 +102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;;
24.4570 +102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;;
24.4571 +102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;;
24.4572 +102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;;
24.4573 +102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;;
24.4574 +102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;;
24.4575 +102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;;
24.4576 +102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;;
24.4577 10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
24.4578 10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
24.4579 10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
24.4580 @@ -12405,7 +15253,7 @@
24.4581 1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
24.4582 1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
24.4583 10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
24.4584 -10341;GOTHIC LETTER NINETY;Lo;0;L;;;;;N;;;;;
24.4585 +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;
24.4586 10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
24.4587 10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
24.4588 10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
24.4589 @@ -12414,7 +15262,7 @@
24.4590 10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
24.4591 10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
24.4592 10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
24.4593 -1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;;N;;;;;
24.4594 +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
24.4595 10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
24.4596 10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
24.4597 10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
24.4598 @@ -12446,6 +15294,56 @@
24.4599 1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
24.4600 1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
24.4601 1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
24.4602 +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
24.4603 +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
24.4604 +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
24.4605 +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
24.4606 +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
24.4607 +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
24.4608 +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
24.4609 +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
24.4610 +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
24.4611 +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
24.4612 +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
24.4613 +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
24.4614 +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
24.4615 +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
24.4616 +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
24.4617 +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
24.4618 +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
24.4619 +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
24.4620 +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
24.4621 +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
24.4622 +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
24.4623 +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
24.4624 +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
24.4625 +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
24.4626 +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
24.4627 +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
24.4628 +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
24.4629 +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
24.4630 +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
24.4631 +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
24.4632 +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
24.4633 +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
24.4634 +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
24.4635 +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
24.4636 +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
24.4637 +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
24.4638 +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
24.4639 +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
24.4640 +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
24.4641 +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
24.4642 +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
24.4643 +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
24.4644 +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
24.4645 +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
24.4646 +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
24.4647 +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;
24.4648 +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;
24.4649 +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;
24.4650 +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;
24.4651 +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;
24.4652 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
24.4653 10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
24.4654 10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
24.4655 @@ -12669,6 +15567,1107 @@
24.4656 10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
24.4657 1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
24.4658 1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
24.4659 +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
24.4660 +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
24.4661 +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
24.4662 +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;
24.4663 +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;
24.4664 +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;
24.4665 +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;
24.4666 +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;
24.4667 +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;
24.4668 +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;
24.4669 +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
24.4670 +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;
24.4671 +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
24.4672 +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
24.4673 +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;
24.4674 +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
24.4675 +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;
24.4676 +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;
24.4677 +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;
24.4678 +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;
24.4679 +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
24.4680 +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;
24.4681 +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
24.4682 +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
24.4683 +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
24.4684 +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
24.4685 +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;
24.4686 +10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;;
24.4687 +10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;;
24.4688 +10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;;
24.4689 +10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;;
24.4690 +10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;;
24.4691 +10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;;
24.4692 +10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;;
24.4693 +10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;;
24.4694 +10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;;
24.4695 +10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;;
24.4696 +1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;;
24.4697 +1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;;
24.4698 +1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;;
24.4699 +1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;;
24.4700 +1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;;
24.4701 +1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;;
24.4702 +10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;;
24.4703 +10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;;
24.4704 +10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;;
24.4705 +10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;;
24.4706 +10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;;
24.4707 +10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;;
24.4708 +10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;;
24.4709 +10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;;
24.4710 +10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;
24.4711 +10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;
24.4712 +1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;
24.4713 +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
24.4714 +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
24.4715 +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
24.4716 +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
24.4717 +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
24.4718 +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
24.4719 +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
24.4720 +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
24.4721 +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
24.4722 +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
24.4723 +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
24.4724 +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
24.4725 +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
24.4726 +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
24.4727 +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
24.4728 +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
24.4729 +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
24.4730 +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
24.4731 +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
24.4732 +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
24.4733 +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
24.4734 +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
24.4735 +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
24.4736 +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
24.4737 +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
24.4738 +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
24.4739 +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
24.4740 +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
24.4741 +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
24.4742 +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
24.4743 +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
24.4744 +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
24.4745 +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
24.4746 +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
24.4747 +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
24.4748 +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
24.4749 +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
24.4750 +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
24.4751 +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
24.4752 +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
24.4753 +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
24.4754 +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
24.4755 +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
24.4756 +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
24.4757 +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
24.4758 +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
24.4759 +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
24.4760 +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
24.4761 +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
24.4762 +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
24.4763 +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
24.4764 +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
24.4765 +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
24.4766 +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
24.4767 +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
24.4768 +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
24.4769 +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
24.4770 +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
24.4771 +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
24.4772 +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
24.4773 +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
24.4774 +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
24.4775 +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
24.4776 +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
24.4777 +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
24.4778 +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
24.4779 +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
24.4780 +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
24.4781 +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.4782 +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;
24.4783 +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;
24.4784 +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;
24.4785 +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;
24.4786 +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;
24.4787 +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;
24.4788 +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;
24.4789 +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;
24.4790 +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
24.4791 +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;
24.4792 +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.4793 +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;
24.4794 +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.4795 +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;
24.4796 +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
24.4797 +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;
24.4798 +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
24.4799 +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;
24.4800 +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;
24.4801 +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;
24.4802 +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.4803 +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
24.4804 +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;
24.4805 +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.4806 +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;
24.4807 +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;
24.4808 +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;
24.4809 +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;
24.4810 +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;
24.4811 +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;
24.4812 +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;
24.4813 +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;
24.4814 +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;
24.4815 +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;
24.4816 +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;
24.4817 +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;
24.4818 +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;
24.4819 +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;
24.4820 +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;
24.4821 +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;
24.4822 +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;
24.4823 +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;
24.4824 +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;
24.4825 +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;
24.4826 +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;
24.4827 +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;
24.4828 +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;
24.4829 +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;
24.4830 +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;
24.4831 +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;
24.4832 +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;
24.4833 +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;
24.4834 +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;;
24.4835 +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
24.4836 +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;
24.4837 +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;
24.4838 +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
24.4839 +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
24.4840 +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;
24.4841 +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;
24.4842 +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;
24.4843 +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;
24.4844 +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;
24.4845 +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;
24.4846 +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;
24.4847 +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;
24.4848 +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;
24.4849 +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;
24.4850 +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;
24.4851 +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;
24.4852 +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;
24.4853 +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;
24.4854 +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.4855 +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;
24.4856 +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;
24.4857 +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;
24.4858 +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;
24.4859 +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;
24.4860 +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;
24.4861 +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;
24.4862 +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;
24.4863 +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;
24.4864 +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;
24.4865 +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;
24.4866 +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;
24.4867 +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;
24.4868 +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
24.4869 +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;
24.4870 +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;
24.4871 +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;
24.4872 +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;
24.4873 +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;
24.4874 +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;
24.4875 +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;
24.4876 +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;
24.4877 +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;
24.4878 +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;
24.4879 +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;
24.4880 +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;
24.4881 +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;
24.4882 +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;
24.4883 +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
24.4884 +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;
24.4885 +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.4886 +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;
24.4887 +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;
24.4888 +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;
24.4889 +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;
24.4890 +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;
24.4891 +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;
24.4892 +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;
24.4893 +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;
24.4894 +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;
24.4895 +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
24.4896 +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;
24.4897 +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;
24.4898 +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;
24.4899 +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;;
24.4900 +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;
24.4901 +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;
24.4902 +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;
24.4903 +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;
24.4904 +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;
24.4905 +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;
24.4906 +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;
24.4907 +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;
24.4908 +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;
24.4909 +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;
24.4910 +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;
24.4911 +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;
24.4912 +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;
24.4913 +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
24.4914 +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;
24.4915 +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;
24.4916 +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;
24.4917 +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;
24.4918 +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;
24.4919 +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;
24.4920 +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;
24.4921 +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;
24.4922 +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;
24.4923 +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;
24.4924 +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;
24.4925 +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;
24.4926 +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;
24.4927 +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;
24.4928 +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;
24.4929 +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;
24.4930 +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;
24.4931 +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.4932 +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;
24.4933 +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;
24.4934 +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;
24.4935 +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;
24.4936 +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;
24.4937 +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;
24.4938 +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;
24.4939 +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;
24.4940 +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;
24.4941 +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
24.4942 +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
24.4943 +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;
24.4944 +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;
24.4945 +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
24.4946 +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
24.4947 +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;
24.4948 +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;
24.4949 +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.4950 +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;
24.4951 +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;
24.4952 +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;
24.4953 +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;
24.4954 +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
24.4955 +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;
24.4956 +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;
24.4957 +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;
24.4958 +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;
24.4959 +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;
24.4960 +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;
24.4961 +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;
24.4962 +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
24.4963 +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
24.4964 +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
24.4965 +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;
24.4966 +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;
24.4967 +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
24.4968 +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;
24.4969 +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;
24.4970 +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;
24.4971 +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;
24.4972 +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;
24.4973 +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;
24.4974 +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;
24.4975 +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
24.4976 +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;
24.4977 +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;
24.4978 +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;
24.4979 +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;
24.4980 +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.4981 +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.4982 +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;
24.4983 +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;
24.4984 +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;
24.4985 +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;
24.4986 +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;
24.4987 +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;
24.4988 +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;
24.4989 +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;
24.4990 +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;
24.4991 +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;
24.4992 +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.4993 +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;
24.4994 +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;
24.4995 +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
24.4996 +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;
24.4997 +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;
24.4998 +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;
24.4999 +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;
24.5000 +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
24.5001 +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;
24.5002 +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5003 +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;
24.5004 +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;
24.5005 +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;
24.5006 +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;
24.5007 +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5008 +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;
24.5009 +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;
24.5010 +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;
24.5011 +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5012 +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;
24.5013 +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;
24.5014 +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;
24.5015 +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;
24.5016 +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;
24.5017 +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;
24.5018 +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;
24.5019 +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5020 +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;
24.5021 +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5022 +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;
24.5023 +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;
24.5024 +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;
24.5025 +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;
24.5026 +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5027 +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;
24.5028 +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;
24.5029 +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;
24.5030 +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;
24.5031 +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;
24.5032 +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;
24.5033 +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5034 +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;
24.5035 +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;
24.5036 +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;
24.5037 +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;
24.5038 +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;
24.5039 +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;
24.5040 +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;
24.5041 +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;
24.5042 +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;
24.5043 +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;
24.5044 +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;
24.5045 +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
24.5046 +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5047 +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;
24.5048 +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;
24.5049 +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;
24.5050 +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;
24.5051 +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;
24.5052 +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
24.5053 +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5054 +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5055 +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;
24.5056 +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;
24.5057 +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;
24.5058 +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;
24.5059 +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;
24.5060 +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.5061 +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5062 +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;
24.5063 +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;
24.5064 +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;
24.5065 +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;
24.5066 +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5067 +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;
24.5068 +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;
24.5069 +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;
24.5070 +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5071 +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;
24.5072 +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;
24.5073 +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;
24.5074 +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;
24.5075 +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;
24.5076 +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;
24.5077 +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;
24.5078 +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;
24.5079 +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;
24.5080 +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;
24.5081 +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
24.5082 +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5083 +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;
24.5084 +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;
24.5085 +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;
24.5086 +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5087 +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5088 +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;
24.5089 +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;
24.5090 +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;
24.5091 +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;
24.5092 +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;
24.5093 +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
24.5094 +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;
24.5095 +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;
24.5096 +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;
24.5097 +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;
24.5098 +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;
24.5099 +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;
24.5100 +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;
24.5101 +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;
24.5102 +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;
24.5103 +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;
24.5104 +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;
24.5105 +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;
24.5106 +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;
24.5107 +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;
24.5108 +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;
24.5109 +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;
24.5110 +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5111 +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;
24.5112 +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;
24.5113 +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5114 +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;
24.5115 +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;
24.5116 +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;
24.5117 +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;
24.5118 +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;
24.5119 +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;
24.5120 +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;
24.5121 +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;
24.5122 +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;
24.5123 +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;
24.5124 +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;
24.5125 +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;
24.5126 +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5127 +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;
24.5128 +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;
24.5129 +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;
24.5130 +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;
24.5131 +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;
24.5132 +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;
24.5133 +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;
24.5134 +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5135 +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;
24.5136 +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;
24.5137 +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;
24.5138 +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;
24.5139 +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;
24.5140 +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
24.5141 +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;
24.5142 +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;
24.5143 +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;
24.5144 +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;
24.5145 +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;
24.5146 +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;
24.5147 +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;
24.5148 +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;
24.5149 +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;
24.5150 +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;
24.5151 +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;
24.5152 +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;
24.5153 +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;
24.5154 +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;
24.5155 +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;
24.5156 +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;
24.5157 +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5158 +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;
24.5159 +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;
24.5160 +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;
24.5161 +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;
24.5162 +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;
24.5163 +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5164 +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;
24.5165 +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;
24.5166 +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;
24.5167 +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;
24.5168 +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;
24.5169 +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;
24.5170 +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;
24.5171 +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;
24.5172 +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
24.5173 +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;
24.5174 +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;
24.5175 +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;
24.5176 +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;
24.5177 +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;
24.5178 +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;
24.5179 +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;
24.5180 +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;
24.5181 +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;
24.5182 +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;
24.5183 +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;
24.5184 +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.5185 +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;
24.5186 +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5187 +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;
24.5188 +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;
24.5189 +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;
24.5190 +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;
24.5191 +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
24.5192 +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
24.5193 +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;
24.5194 +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;
24.5195 +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5196 +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;
24.5197 +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;
24.5198 +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;
24.5199 +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;
24.5200 +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;
24.5201 +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;
24.5202 +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;
24.5203 +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;
24.5204 +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;
24.5205 +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
24.5206 +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;
24.5207 +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;
24.5208 +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;
24.5209 +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;
24.5210 +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;
24.5211 +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;
24.5212 +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;
24.5213 +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;
24.5214 +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;
24.5215 +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;
24.5216 +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;
24.5217 +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;
24.5218 +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;
24.5219 +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;
24.5220 +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
24.5221 +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;
24.5222 +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
24.5223 +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;
24.5224 +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;
24.5225 +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
24.5226 +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5227 +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;
24.5228 +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;
24.5229 +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;
24.5230 +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;
24.5231 +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;
24.5232 +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;
24.5233 +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;
24.5234 +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;
24.5235 +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;
24.5236 +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5237 +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.5238 +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;
24.5239 +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;
24.5240 +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;
24.5241 +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;
24.5242 +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;
24.5243 +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;
24.5244 +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;
24.5245 +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;
24.5246 +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
24.5247 +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;
24.5248 +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;
24.5249 +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;
24.5250 +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;
24.5251 +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
24.5252 +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;
24.5253 +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;
24.5254 +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
24.5255 +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;
24.5256 +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;
24.5257 +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;
24.5258 +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;
24.5259 +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;
24.5260 +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;
24.5261 +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5262 +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;
24.5263 +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
24.5264 +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
24.5265 +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
24.5266 +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5267 +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;
24.5268 +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;
24.5269 +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;
24.5270 +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;
24.5271 +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5272 +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
24.5273 +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;
24.5274 +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;
24.5275 +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;
24.5276 +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;
24.5277 +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
24.5278 +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;
24.5279 +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5280 +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;
24.5281 +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;
24.5282 +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;
24.5283 +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;
24.5284 +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;
24.5285 +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;
24.5286 +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5287 +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;
24.5288 +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;
24.5289 +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5290 +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;
24.5291 +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;
24.5292 +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5293 +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5294 +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;
24.5295 +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;
24.5296 +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
24.5297 +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5298 +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;
24.5299 +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5300 +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;
24.5301 +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
24.5302 +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;
24.5303 +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;
24.5304 +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5305 +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;
24.5306 +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;
24.5307 +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;
24.5308 +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;
24.5309 +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;
24.5310 +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;
24.5311 +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;
24.5312 +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;
24.5313 +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;
24.5314 +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;
24.5315 +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;
24.5316 +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;
24.5317 +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;
24.5318 +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;
24.5319 +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;
24.5320 +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;
24.5321 +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5322 +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;
24.5323 +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5324 +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;
24.5325 +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;
24.5326 +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;
24.5327 +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;
24.5328 +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;;
24.5329 +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;
24.5330 +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;
24.5331 +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;
24.5332 +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;
24.5333 +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;;
24.5334 +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;
24.5335 +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;
24.5336 +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;
24.5337 +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;
24.5338 +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;
24.5339 +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;
24.5340 +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;
24.5341 +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;
24.5342 +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5343 +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;
24.5344 +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;
24.5345 +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
24.5346 +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;
24.5347 +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;
24.5348 +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;
24.5349 +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;
24.5350 +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;
24.5351 +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;
24.5352 +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;
24.5353 +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;
24.5354 +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;
24.5355 +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;
24.5356 +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;
24.5357 +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;
24.5358 +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;
24.5359 +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;
24.5360 +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;
24.5361 +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;
24.5362 +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;
24.5363 +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;
24.5364 +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;
24.5365 +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;
24.5366 +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;
24.5367 +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;
24.5368 +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;
24.5369 +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;
24.5370 +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5371 +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5372 +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;
24.5373 +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;
24.5374 +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
24.5375 +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5376 +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;
24.5377 +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5378 +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;
24.5379 +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5380 +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5381 +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;
24.5382 +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5383 +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5384 +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5385 +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;
24.5386 +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;
24.5387 +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;
24.5388 +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;
24.5389 +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;
24.5390 +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;
24.5391 +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;
24.5392 +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
24.5393 +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
24.5394 +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;
24.5395 +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;
24.5396 +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;
24.5397 +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;
24.5398 +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;
24.5399 +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;
24.5400 +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
24.5401 +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;
24.5402 +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;
24.5403 +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;
24.5404 +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.5405 +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
24.5406 +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;
24.5407 +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;
24.5408 +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;
24.5409 +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;
24.5410 +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
24.5411 +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;
24.5412 +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;
24.5413 +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;
24.5414 +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;
24.5415 +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;
24.5416 +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;
24.5417 +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;
24.5418 +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;
24.5419 +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;
24.5420 +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;
24.5421 +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;
24.5422 +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;
24.5423 +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;
24.5424 +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;
24.5425 +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;
24.5426 +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;
24.5427 +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;
24.5428 +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;
24.5429 +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;
24.5430 +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;
24.5431 +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;
24.5432 +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;
24.5433 +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;
24.5434 +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;
24.5435 +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;
24.5436 +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;
24.5437 +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;
24.5438 +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;
24.5439 +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;
24.5440 +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;
24.5441 +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;
24.5442 +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;
24.5443 +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;
24.5444 +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;
24.5445 +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5446 +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;
24.5447 +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;
24.5448 +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5449 +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;
24.5450 +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;
24.5451 +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;
24.5452 +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;
24.5453 +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;
24.5454 +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;
24.5455 +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;
24.5456 +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;
24.5457 +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;
24.5458 +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;
24.5459 +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;
24.5460 +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;
24.5461 +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;
24.5462 +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;
24.5463 +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;
24.5464 +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;
24.5465 +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;
24.5466 +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5467 +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;
24.5468 +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;
24.5469 +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;
24.5470 +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;
24.5471 +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;
24.5472 +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
24.5473 +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;
24.5474 +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;
24.5475 +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;
24.5476 +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;
24.5477 +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;
24.5478 +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5479 +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5480 +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;
24.5481 +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;
24.5482 +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;
24.5483 +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;
24.5484 +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;
24.5485 +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;
24.5486 +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;
24.5487 +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;
24.5488 +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;
24.5489 +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;
24.5490 +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;
24.5491 +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;
24.5492 +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;
24.5493 +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;
24.5494 +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;
24.5495 +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
24.5496 +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
24.5497 +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;
24.5498 +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;
24.5499 +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;
24.5500 +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;
24.5501 +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;
24.5502 +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;
24.5503 +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;
24.5504 +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;
24.5505 +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;
24.5506 +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;
24.5507 +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;
24.5508 +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;
24.5509 +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;
24.5510 +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;
24.5511 +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;
24.5512 +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;
24.5513 +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;
24.5514 +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;
24.5515 +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;
24.5516 +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;
24.5517 +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;
24.5518 +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;
24.5519 +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;
24.5520 +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;
24.5521 +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;
24.5522 +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;
24.5523 +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;
24.5524 +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;
24.5525 +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;
24.5526 +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;
24.5527 +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;
24.5528 +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;
24.5529 +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;
24.5530 +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;
24.5531 +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;
24.5532 +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;
24.5533 +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;
24.5534 +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;
24.5535 +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;
24.5536 +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5537 +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;
24.5538 +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;
24.5539 +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;
24.5540 +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;
24.5541 +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;
24.5542 +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;
24.5543 +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;
24.5544 +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;
24.5545 +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;
24.5546 +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;
24.5547 +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;
24.5548 +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5549 +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;
24.5550 +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5551 +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;
24.5552 +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;
24.5553 +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;
24.5554 +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;
24.5555 +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;
24.5556 +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;
24.5557 +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;;
24.5558 +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;
24.5559 +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;;
24.5560 +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;
24.5561 +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;
24.5562 +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;
24.5563 +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;
24.5564 +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;
24.5565 +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;
24.5566 +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;
24.5567 +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5568 +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;
24.5569 +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
24.5570 +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;
24.5571 +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;
24.5572 +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;
24.5573 +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
24.5574 +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;
24.5575 +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;
24.5576 +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;
24.5577 +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;
24.5578 +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;
24.5579 +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;
24.5580 +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;
24.5581 +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;
24.5582 +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;
24.5583 +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
24.5584 +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;
24.5585 +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;
24.5586 +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;
24.5587 +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;
24.5588 +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;
24.5589 +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;
24.5590 +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
24.5591 +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
24.5592 +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;
24.5593 +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;
24.5594 +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;
24.5595 +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;
24.5596 +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
24.5597 +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;
24.5598 +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;
24.5599 +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;
24.5600 +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;
24.5601 +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;
24.5602 +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;
24.5603 +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
24.5604 +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;
24.5605 +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;
24.5606 +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;
24.5607 +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;
24.5608 +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
24.5609 +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;
24.5610 +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;
24.5611 +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;
24.5612 +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;
24.5613 +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;
24.5614 +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;
24.5615 +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;
24.5616 +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;
24.5617 +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;
24.5618 +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;
24.5619 +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;
24.5620 +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;
24.5621 +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;
24.5622 +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;
24.5623 +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;
24.5624 +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;
24.5625 +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;
24.5626 +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;
24.5627 +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;
24.5628 +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;
24.5629 +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;
24.5630 +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5631 +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;
24.5632 +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;
24.5633 +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;
24.5634 +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;
24.5635 +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;
24.5636 +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;
24.5637 +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
24.5638 +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;
24.5639 +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;
24.5640 +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;
24.5641 +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;
24.5642 +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;
24.5643 +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;
24.5644 +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;
24.5645 +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;
24.5646 +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;
24.5647 +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;
24.5648 +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;
24.5649 +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;
24.5650 +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;
24.5651 +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;
24.5652 +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;
24.5653 +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;
24.5654 +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;
24.5655 +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;
24.5656 +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;
24.5657 +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
24.5658 +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
24.5659 +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
24.5660 +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;
24.5661 +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;
24.5662 +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;
24.5663 +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;
24.5664 +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;
24.5665 +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;
24.5666 +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;
24.5667 +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;
24.5668 +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;
24.5669 +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;
24.5670 +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;
24.5671 +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;
24.5672 +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;
24.5673 +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;
24.5674 +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;
24.5675 +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;
24.5676 +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;
24.5677 +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;
24.5678 +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;
24.5679 +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;
24.5680 +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;
24.5681 +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;
24.5682 +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;
24.5683 +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;
24.5684 +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;
24.5685 +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;
24.5686 +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;
24.5687 +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;
24.5688 +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;
24.5689 +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;
24.5690 +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;
24.5691 +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;
24.5692 +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;
24.5693 +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;
24.5694 +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;
24.5695 +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;
24.5696 +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;
24.5697 +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;
24.5698 +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;
24.5699 +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;
24.5700 +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;
24.5701 +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;
24.5702 +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;
24.5703 +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;
24.5704 +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
24.5705 +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;
24.5706 +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;
24.5707 +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;;
24.5708 +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;;
24.5709 +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;
24.5710 +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;
24.5711 +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;
24.5712 +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
24.5713 +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;
24.5714 +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;
24.5715 +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;
24.5716 +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;
24.5717 +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;
24.5718 +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;
24.5719 +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;
24.5720 +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;
24.5721 +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;
24.5722 +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;
24.5723 +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;
24.5724 +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;
24.5725 +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;
24.5726 +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;
24.5727 +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;
24.5728 +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;
24.5729 +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;
24.5730 +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;
24.5731 +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;
24.5732 +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;
24.5733 +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;
24.5734 +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;
24.5735 +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;
24.5736 +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;
24.5737 +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;
24.5738 +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;
24.5739 +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;
24.5740 +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;
24.5741 +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;
24.5742 +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;
24.5743 +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;;
24.5744 +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;;
24.5745 +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;
24.5746 +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;
24.5747 +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;
24.5748 +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;
24.5749 +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;
24.5750 +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;
24.5751 +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;
24.5752 +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;
24.5753 +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;
24.5754 +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;
24.5755 +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;
24.5756 +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
24.5757 +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;
24.5758 +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
24.5759 +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
24.5760 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
24.5761 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
24.5762 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
24.5763 @@ -12954,6 +16953,7 @@
24.5764 1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
24.5765 1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
24.5766 1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
24.5767 +1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;;
24.5768 1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
24.5769 1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
24.5770 1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
24.5771 @@ -13134,12 +17134,82 @@
24.5772 1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
24.5773 1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
24.5774 1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
24.5775 -1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
24.5776 -1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;;
24.5777 -1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;;
24.5778 -1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;;
24.5779 -1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;;
24.5780 -1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
24.5781 +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
24.5782 +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
24.5783 +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
24.5784 +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
24.5785 +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
24.5786 +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
24.5787 +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
24.5788 +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
24.5789 +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
24.5790 +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
24.5791 +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
24.5792 +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
24.5793 +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
24.5794 +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
24.5795 +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
24.5796 +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
24.5797 +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
24.5798 +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
24.5799 +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
24.5800 +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
24.5801 +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
24.5802 +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
24.5803 +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
24.5804 +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
24.5805 +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
24.5806 +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
24.5807 +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
24.5808 +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
24.5809 +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
24.5810 +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
24.5811 +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
24.5812 +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
24.5813 +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
24.5814 +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
24.5815 +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
24.5816 +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
24.5817 +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
24.5818 +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
24.5819 +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
24.5820 +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
24.5821 +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
24.5822 +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
24.5823 +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
24.5824 +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
24.5825 +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
24.5826 +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
24.5827 +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
24.5828 +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
24.5829 +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
24.5830 +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
24.5831 +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
24.5832 +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
24.5833 +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
24.5834 +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
24.5835 +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
24.5836 +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
24.5837 +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
24.5838 +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
24.5839 +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
24.5840 +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
24.5841 +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
24.5842 +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
24.5843 +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
24.5844 +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
24.5845 +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
24.5846 +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
24.5847 +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
24.5848 +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
24.5849 +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
24.5850 +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
24.5851 +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;;
24.5852 +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;;
24.5853 +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;;
24.5854 +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;;
24.5855 +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;;
24.5856 +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;;
24.5857 1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
24.5858 1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
24.5859 1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
24.5860 @@ -13221,6 +17291,24 @@
24.5861 1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
24.5862 1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
24.5863 1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
24.5864 +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;
24.5865 +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;
24.5866 +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;
24.5867 +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;
24.5868 +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;
24.5869 +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;
24.5870 +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;
24.5871 +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;
24.5872 +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;
24.5873 +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;
24.5874 +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;
24.5875 +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;
24.5876 +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;
24.5877 +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;
24.5878 +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;
24.5879 +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
24.5880 +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
24.5881 +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
24.5882 1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
24.5883 1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
24.5884 1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
24.5885 @@ -13873,6 +17961,8 @@
24.5886 1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
24.5887 1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
24.5888 1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
24.5889 +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
24.5890 +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
24.5891 1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
24.5892 1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
24.5893 1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
24.5894 @@ -13924,7 +18014,7 @@
24.5895 1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
24.5896 1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
24.5897 1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
24.5898 -1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
24.5899 +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
24.5900 1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
24.5901 1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
24.5902 1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
24.5903 @@ -13982,7 +18072,7 @@
24.5904 1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
24.5905 1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
24.5906 1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
24.5907 -1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
24.5908 +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
24.5909 1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
24.5910 1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
24.5911 1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
24.5912 @@ -14040,7 +18130,7 @@
24.5913 1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
24.5914 1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
24.5915 1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
24.5916 -1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
24.5917 +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
24.5918 1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
24.5919 1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
24.5920 1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
24.5921 @@ -14098,7 +18188,7 @@
24.5922 1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
24.5923 1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
24.5924 1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
24.5925 -1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
24.5926 +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
24.5927 1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
24.5928 1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
24.5929 1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
24.5930 @@ -14156,13 +18246,15 @@
24.5931 1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
24.5932 1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
24.5933 1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
24.5934 -1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;;
24.5935 +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
24.5936 1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
24.5937 1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
24.5938 1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
24.5939 1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
24.5940 1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
24.5941 1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
24.5942 +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;
24.5943 +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;
24.5944 1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
24.5945 1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
24.5946 1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
24.5947 @@ -14213,6 +18305,150 @@
24.5948 1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
24.5949 1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
24.5950 1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
24.5951 +1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;
24.5952 +1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;
24.5953 +1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;
24.5954 +1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;;
24.5955 +1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;;
24.5956 +1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;;
24.5957 +1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;;
24.5958 +1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5959 +1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5960 +1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5961 +1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5962 +1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5963 +1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5964 +1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5965 +1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5966 +1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;;
24.5967 +1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5968 +1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5969 +1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5970 +1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5971 +1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5972 +1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5973 +1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5974 +1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5975 +1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;;
24.5976 +1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5977 +1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5978 +1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5979 +1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5980 +1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5981 +1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5982 +1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5983 +1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5984 +1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;;
24.5985 +1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;;
24.5986 +1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;;
24.5987 +1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;;
24.5988 +1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;;
24.5989 +1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;;
24.5990 +1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;;
24.5991 +1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;;
24.5992 +1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;;
24.5993 +1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;;
24.5994 +1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;;
24.5995 +1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;;
24.5996 +1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;;
24.5997 +1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;;
24.5998 +1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;;
24.5999 +1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;;
24.6000 +1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;;
24.6001 +1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;;
24.6002 +1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;;
24.6003 +1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;;
24.6004 +1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;;
24.6005 +1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;;
24.6006 +1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;;
24.6007 +1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;;
24.6008 +1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;;
24.6009 +1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;;
24.6010 +1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;;
24.6011 +1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;;
24.6012 +1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;;
24.6013 +1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;;
24.6014 +1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;;
24.6015 +1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;;
24.6016 +1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;;
24.6017 +1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;;
24.6018 +1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;;
24.6019 +1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;;
24.6020 +1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;;
24.6021 +1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;;
24.6022 +1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;;
24.6023 +1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;;
24.6024 +1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;;
24.6025 +1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;;
24.6026 +1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;;
24.6027 +1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;;
24.6028 +1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;;
24.6029 +1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;;
24.6030 +1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;;
24.6031 +1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;;
24.6032 +1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;;
24.6033 +1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;;
24.6034 +1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;;
24.6035 +1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;;
24.6036 +1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;;
24.6037 +1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;;
24.6038 +1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;;
24.6039 +1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;;
24.6040 +1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;;
24.6041 +1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;;
24.6042 +1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;;
24.6043 +1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;;
24.6044 +1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;;
24.6045 +1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;;
24.6046 +1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;;
24.6047 +1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;;
24.6048 +1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;;
24.6049 +1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;;
24.6050 +1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;;
24.6051 +1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;;
24.6052 +1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;;
24.6053 +1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;;
24.6054 +1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;;
24.6055 +1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;;
24.6056 +1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;;
24.6057 +1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;;
24.6058 +1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;;
24.6059 +1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;;
24.6060 +1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;;
24.6061 +1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;;
24.6062 +1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;;
24.6063 +1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;;
24.6064 +1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;;
24.6065 +1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;;
24.6066 +1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;;
24.6067 +1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;;
24.6068 +1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;;
24.6069 +1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;;
24.6070 +1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;;
24.6071 +1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;;
24.6072 +1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;;
24.6073 +1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;;
24.6074 +1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;;
24.6075 +1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;;
24.6076 +1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;;
24.6077 +1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;;
24.6078 +1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;;
24.6079 +1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;;
24.6080 +1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;;
24.6081 +1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;;
24.6082 +1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;;
24.6083 +1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;;
24.6084 +1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;;
24.6085 +1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;;
24.6086 +1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;;
24.6087 +1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;;
24.6088 +1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;;
24.6089 +1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;;
24.6090 +1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;;
24.6091 +1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;;
24.6092 +1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;;
24.6093 +1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;;
24.6094 +1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;;
24.6095 20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
24.6096 2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
24.6097 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
24.6098 @@ -14359,7 +18595,7 @@
24.6099 2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
24.6100 2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
24.6101 2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
24.6102 -2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;;
24.6103 +2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;;
24.6104 2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
24.6105 2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
24.6106 2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
25.2 +++ b/make/tools/UnicodeData/VERSION Thu Apr 16 19:10:32 2009 -0700
25.3 @@ -0,0 +1,1 @@
25.4 +5.1.0
26.1 --- a/src/share/classes/com/sun/awt/AWTUtilities.java Thu Apr 16 17:42:00 2009 +0100
26.2 +++ b/src/share/classes/com/sun/awt/AWTUtilities.java Thu Apr 16 19:10:32 2009 -0700
26.3 @@ -1,5 +1,5 @@
26.4 /*
26.5 - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
26.6 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
26.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
26.8 *
26.9 * This code is free software; you can redistribute it and/or modify it
26.10 @@ -26,17 +26,37 @@
26.11 package com.sun.awt;
26.12
26.13 import java.awt.*;
26.14 +
26.15 import sun.awt.AWTAccessor;
26.16 -
26.17 +import sun.awt.SunToolkit;
26.18
26.19 /**
26.20 * A collection of utility methods for AWT.
26.21 *
26.22 * The functionality provided by the static methods of the class includes:
26.23 * <ul>
26.24 + * <li>Setting shapes on top-level windows
26.25 + * <li>Setting a constant alpha value for each pixel of a top-level window
26.26 + * <li>Making a window non-opaque, after that it paints only explicitly
26.27 + * painted pixels on the screen, with arbitrary alpha values for every pixel.
26.28 * <li>Setting a 'mixing-cutout' shape for a component.
26.29 * </ul>
26.30 * <p>
26.31 + * A "top-level window" is an instance of the {@code Window} class (or its
26.32 + * descendant, such as {@code JFrame}).
26.33 + * <p>
26.34 + * Some of the mentioned features may not be supported by the native platform.
26.35 + * To determine whether a particular feature is supported, the user must use
26.36 + * the {@code isTranslucencySupported()} method of the class passing a desired
26.37 + * translucency kind (a member of the {@code Translucency} enum) as an
26.38 + * argument.
26.39 + * <p>
26.40 + * The per-pixel alpha feature also requires the user to create her/his
26.41 + * windows using a translucency-capable graphics configuration.
26.42 + * The {@code isTranslucencyCapable()} method must
26.43 + * be used to verify whether any given GraphicsConfiguration supports
26.44 + * the trasnlcency effects.
26.45 + * <p>
26.46 * <b>WARNING</b>: This class is an implementation detail and only meant
26.47 * for limited use outside of the core platform. This API may change
26.48 * drastically between update release, and it may even be
26.49 @@ -50,6 +70,344 @@
26.50 private AWTUtilities() {
26.51 }
26.52
26.53 + /** Kinds of translucency supported by the underlying system.
26.54 + * @see #isTranslucencySupported
26.55 + */
26.56 + public static enum Translucency {
26.57 + /**
26.58 + * Represents support in the underlying system for windows each pixel
26.59 + * of which is guaranteed to be either completely opaque, with
26.60 + * an alpha value of 1.0, or completely transparent, with an alpha
26.61 + * value of 0.0.
26.62 + */
26.63 + PERPIXEL_TRANSPARENT,
26.64 +
26.65 + /**
26.66 + * Represents support in the underlying system for windows all of
26.67 + * the pixels of which have the same alpha value between or including
26.68 + * 0.0 and 1.0.
26.69 + */
26.70 + TRANSLUCENT,
26.71 +
26.72 + /**
26.73 + * Represents support in the underlying system for windows that
26.74 + * contain or might contain pixels with arbitrary alpha values
26.75 + * between and including 0.0 and 1.0.
26.76 + */
26.77 + PERPIXEL_TRANSLUCENT;
26.78 + }
26.79 +
26.80 +
26.81 + /**
26.82 + * Returns whether the given level of translucency is supported by
26.83 + * the underlying system.
26.84 + *
26.85 + * Note that this method may sometimes return the value
26.86 + * indicating that the particular level is supported, but
26.87 + * the native windowing system may still not support the
26.88 + * given level of translucency (due to the bugs in
26.89 + * the windowing system).
26.90 + *
26.91 + * @param translucencyKind a kind of translucency support
26.92 + * (either PERPIXEL_TRANSPARENT,
26.93 + * TRANSLUCENT, or PERPIXEL_TRANSLUCENT)
26.94 + * @return whether the given translucency kind is supported
26.95 + */
26.96 + public static boolean isTranslucencySupported(Translucency translucencyKind) {
26.97 + switch (translucencyKind) {
26.98 + case PERPIXEL_TRANSPARENT:
26.99 + return isWindowShapingSupported();
26.100 + case TRANSLUCENT:
26.101 + return isWindowOpacitySupported();
26.102 + case PERPIXEL_TRANSLUCENT:
26.103 + return isWindowTranslucencySupported();
26.104 + }
26.105 + return false;
26.106 + }
26.107 +
26.108 +
26.109 + /**
26.110 + * Returns whether the windowing system supports changing the opacity
26.111 + * value of top-level windows.
26.112 + * Note that this method may sometimes return true, but the native
26.113 + * windowing system may still not support the concept of
26.114 + * translucency (due to the bugs in the windowing system).
26.115 + */
26.116 + private static boolean isWindowOpacitySupported() {
26.117 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
26.118 + if (!(curToolkit instanceof SunToolkit)) {
26.119 + return false;
26.120 + }
26.121 + return ((SunToolkit)curToolkit).isWindowOpacitySupported();
26.122 + }
26.123 +
26.124 + /**
26.125 + * Set the opacity of the window. The opacity is at the range [0..1].
26.126 + * Note that setting the opacity level of 0 may or may not disable
26.127 + * the mouse event handling on this window. This is
26.128 + * a platform-dependent behavior.
26.129 + *
26.130 + * In order for this method to enable the translucency effect,
26.131 + * the isTranslucencySupported() method should indicate that the
26.132 + * TRANSLUCENT level of translucency is supported.
26.133 + *
26.134 + * <p>Also note that the window must not be in the full-screen mode
26.135 + * when setting the opacity value < 1.0f. Otherwise
26.136 + * the IllegalArgumentException is thrown.
26.137 + *
26.138 + * @param window the window to set the opacity level to
26.139 + * @param opacity the opacity level to set to the window
26.140 + * @throws NullPointerException if the window argument is null
26.141 + * @throws IllegalArgumentException if the opacity is out of
26.142 + * the range [0..1]
26.143 + * @throws IllegalArgumentException if the window is in full screen mode,
26.144 + * and the opacity is less than 1.0f
26.145 + * @throws UnsupportedOperationException if the TRANSLUCENT translucency
26.146 + * kind is not supported
26.147 + */
26.148 + public static void setWindowOpacity(Window window, float opacity) {
26.149 + if (window == null) {
26.150 + throw new NullPointerException(
26.151 + "The window argument should not be null.");
26.152 + }
26.153 +
26.154 + AWTAccessor.getWindowAccessor().setOpacity(window, opacity);
26.155 + }
26.156 +
26.157 + /**
26.158 + * Get the opacity of the window. If the opacity has not
26.159 + * yet being set, this method returns 1.0.
26.160 + *
26.161 + * @param window the window to get the opacity level from
26.162 + * @throws NullPointerException if the window argument is null
26.163 + */
26.164 + public static float getWindowOpacity(Window window) {
26.165 + if (window == null) {
26.166 + throw new NullPointerException(
26.167 + "The window argument should not be null.");
26.168 + }
26.169 +
26.170 + return AWTAccessor.getWindowAccessor().getOpacity(window);
26.171 + }
26.172 +
26.173 + /**
26.174 + * Returns whether the windowing system supports changing the shape
26.175 + * of top-level windows.
26.176 + * Note that this method may sometimes return true, but the native
26.177 + * windowing system may still not support the concept of
26.178 + * shaping (due to the bugs in the windowing system).
26.179 + */
26.180 + public static boolean isWindowShapingSupported() {
26.181 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
26.182 + if (!(curToolkit instanceof SunToolkit)) {
26.183 + return false;
26.184 + }
26.185 + return ((SunToolkit)curToolkit).isWindowShapingSupported();
26.186 + }
26.187 +
26.188 + /**
26.189 + * Returns an object that implements the Shape interface and represents
26.190 + * the shape previously set with the call to the setWindowShape() method.
26.191 + * If no shape has been set yet, or the shape has been reset to null,
26.192 + * this method returns null.
26.193 + *
26.194 + * @param window the window to get the shape from
26.195 + * @return the current shape of the window
26.196 + * @throws NullPointerException if the window argument is null
26.197 + */
26.198 + public static Shape getWindowShape(Window window) {
26.199 + if (window == null) {
26.200 + throw new NullPointerException(
26.201 + "The window argument should not be null.");
26.202 + }
26.203 + return AWTAccessor.getWindowAccessor().getShape(window);
26.204 + }
26.205 +
26.206 + /**
26.207 + * Sets a shape for the given window.
26.208 + * If the shape argument is null, this methods restores
26.209 + * the default shape making the window rectangular.
26.210 + * <p>Note that in order to set a shape, the window must be undecorated.
26.211 + * If the window is decorated, this method ignores the {@code shape}
26.212 + * argument and resets the shape to null.
26.213 + * <p>Also note that the window must not be in the full-screen mode
26.214 + * when setting a non-null shape. Otherwise the IllegalArgumentException
26.215 + * is thrown.
26.216 + * <p>Depending on the platform, the method may return without
26.217 + * effecting the shape of the window if the window has a non-null warning
26.218 + * string ({@link Window#getWarningString()}). In this case the passed
26.219 + * shape object is ignored.
26.220 + *
26.221 + * @param window the window to set the shape to
26.222 + * @param shape the shape to set to the window
26.223 + * @throws NullPointerException if the window argument is null
26.224 + * @throws IllegalArgumentException if the window is in full screen mode,
26.225 + * and the shape is not null
26.226 + * @throws UnsupportedOperationException if the PERPIXEL_TRANSPARENT
26.227 + * translucency kind is not supported
26.228 + */
26.229 + public static void setWindowShape(Window window, Shape shape) {
26.230 + if (window == null) {
26.231 + throw new NullPointerException(
26.232 + "The window argument should not be null.");
26.233 + }
26.234 + AWTAccessor.getWindowAccessor().setShape(window, shape);
26.235 + }
26.236 +
26.237 + private static boolean isWindowTranslucencySupported() {
26.238 + /*
26.239 + * Per-pixel alpha is supported if all the conditions are TRUE:
26.240 + * 1. The toolkit is a sort of SunToolkit
26.241 + * 2. The toolkit supports translucency in general
26.242 + * (isWindowTranslucencySupported())
26.243 + * 3. There's at least one translucency-capable
26.244 + * GraphicsConfiguration
26.245 + */
26.246 +
26.247 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
26.248 + if (!(curToolkit instanceof SunToolkit)) {
26.249 + return false;
26.250 + }
26.251 +
26.252 + if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) {
26.253 + return false;
26.254 + }
26.255 +
26.256 + GraphicsEnvironment env =
26.257 + GraphicsEnvironment.getLocalGraphicsEnvironment();
26.258 +
26.259 + // If the default GC supports translucency return true.
26.260 + // It is important to optimize the verification this way,
26.261 + // see CR 6661196 for more details.
26.262 + if (isTranslucencyCapable(env.getDefaultScreenDevice()
26.263 + .getDefaultConfiguration()))
26.264 + {
26.265 + return true;
26.266 + }
26.267 +
26.268 + // ... otherwise iterate through all the GCs.
26.269 + GraphicsDevice[] devices = env.getScreenDevices();
26.270 +
26.271 + for (int i = 0; i < devices.length; i++) {
26.272 + GraphicsConfiguration[] configs = devices[i].getConfigurations();
26.273 + for (int j = 0; j < configs.length; j++) {
26.274 + if (isTranslucencyCapable(configs[j])) {
26.275 + return true;
26.276 + }
26.277 + }
26.278 + }
26.279 +
26.280 + return false;
26.281 + }
26.282 +
26.283 + /**
26.284 + * Enables the per-pixel alpha support for the given window.
26.285 + * Once the window becomes non-opaque (the isOpaque is set to false),
26.286 + * the drawing sub-system is starting to respect the alpha value of each
26.287 + * separate pixel. If a pixel gets painted with alpha color component
26.288 + * equal to zero, it becomes visually transparent, if the alpha of the
26.289 + * pixel is equal to 255, the pixel is fully opaque. Interim values
26.290 + * of the alpha color component make the pixel semi-transparent (i.e.
26.291 + * translucent).
26.292 + * <p>Note that in order for the window to support the per-pixel alpha
26.293 + * mode, the window must be created using the GraphicsConfiguration
26.294 + * for which the {@link #isTranslucencyCapable}
26.295 + * method returns true.
26.296 + * <p>Also note that some native systems enable the per-pixel translucency
26.297 + * mode for any window created using the translucency-compatible
26.298 + * graphics configuration. However, it is highly recommended to always
26.299 + * invoke the setWindowOpaque() method for these windows, at least for
26.300 + * the sake of cross-platform compatibility reasons.
26.301 + * <p>Also note that the window must not be in the full-screen mode
26.302 + * when making it non-opaque. Otherwise the IllegalArgumentException
26.303 + * is thrown.
26.304 + * <p>If the window is a {@code Frame} or a {@code Dialog}, the window must
26.305 + * be undecorated prior to enabling the per-pixel translucency effect (see
26.306 + * {@link Frame#setUndecorated()} and/or {@link Dialog#setUndecorated()}).
26.307 + * If the window becomes decorated through a subsequent call to the
26.308 + * corresponding {@code setUndecorated()} method, the per-pixel
26.309 + * translucency effect will be disabled and the opaque property reset to
26.310 + * {@code true}.
26.311 + * <p>Depending on the platform, the method may return without
26.312 + * effecting the opaque property of the window if the window has a non-null
26.313 + * warning string ({@link Window#getWarningString()}). In this case
26.314 + * the passed 'isOpaque' value is ignored.
26.315 + *
26.316 + * @param window the window to set the shape to
26.317 + * @param isOpaque whether the window must be opaque (true),
26.318 + * or translucent (false)
26.319 + * @throws NullPointerException if the window argument is null
26.320 + * @throws IllegalArgumentException if the window uses
26.321 + * a GraphicsConfiguration for which the
26.322 + * {@code isTranslucencyCapable()}
26.323 + * method returns false
26.324 + * @throws IllegalArgumentException if the window is in full screen mode,
26.325 + * and the isOpaque is false
26.326 + * @throws IllegalArgumentException if the window is decorated and the
26.327 + * isOpaque argument is {@code false}.
26.328 + * @throws UnsupportedOperationException if the PERPIXEL_TRANSLUCENT
26.329 + * translucency kind is not supported
26.330 + */
26.331 + public static void setWindowOpaque(Window window, boolean isOpaque) {
26.332 + if (window == null) {
26.333 + throw new NullPointerException(
26.334 + "The window argument should not be null.");
26.335 + }
26.336 + if (!isOpaque && !isTranslucencySupported(Translucency.PERPIXEL_TRANSLUCENT)) {
26.337 + throw new UnsupportedOperationException(
26.338 + "The PERPIXEL_TRANSLUCENT translucency kind is not supported");
26.339 + }
26.340 + AWTAccessor.getWindowAccessor().setOpaque(window, isOpaque);
26.341 + }
26.342 +
26.343 + /**
26.344 + * Returns whether the window is opaque or translucent.
26.345 + *
26.346 + * @param window the window to set the shape to
26.347 + * @return whether the window is currently opaque (true)
26.348 + * or translucent (false)
26.349 + * @throws NullPointerException if the window argument is null
26.350 + */
26.351 + public static boolean isWindowOpaque(Window window) {
26.352 + if (window == null) {
26.353 + throw new NullPointerException(
26.354 + "The window argument should not be null.");
26.355 + }
26.356 +
26.357 + return AWTAccessor.getWindowAccessor().isOpaque(window);
26.358 + }
26.359 +
26.360 + /**
26.361 + * Verifies whether a given GraphicsConfiguration supports
26.362 + * the PERPIXEL_TRANSLUCENT kind of translucency.
26.363 + * All windows that are intended to be used with the {@link #setWindowOpaque}
26.364 + * method must be created using a GraphicsConfiguration for which this method
26.365 + * returns true.
26.366 + * <p>Note that some native systems enable the per-pixel translucency
26.367 + * mode for any window created using a translucency-capable
26.368 + * graphics configuration. However, it is highly recommended to always
26.369 + * invoke the setWindowOpaque() method for these windows, at least
26.370 + * for the sake of cross-platform compatibility reasons.
26.371 + *
26.372 + * @param gc GraphicsConfiguration
26.373 + * @throws NullPointerException if the gc argument is null
26.374 + * @return whether the given GraphicsConfiguration supports
26.375 + * the translucency effects.
26.376 + */
26.377 + public static boolean isTranslucencyCapable(GraphicsConfiguration gc) {
26.378 + if (gc == null) {
26.379 + throw new NullPointerException("The gc argument should not be null");
26.380 + }
26.381 + /*
26.382 + return gc.isTranslucencyCapable();
26.383 + */
26.384 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
26.385 + if (!(curToolkit instanceof SunToolkit)) {
26.386 + return false;
26.387 + }
26.388 + return ((SunToolkit)curToolkit).isTranslucencyCapable(gc);
26.389 + }
26.390 +
26.391 /**
26.392 * Sets a 'mixing-cutout' shape for the given component.
26.393 *
27.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
27.2 +++ b/src/share/classes/com/sun/awt/SecurityWarning.java Thu Apr 16 19:10:32 2009 -0700
27.3 @@ -0,0 +1,169 @@
27.4 +/*
27.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
27.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
27.7 + *
27.8 + * This code is free software; you can redistribute it and/or modify it
27.9 + * under the terms of the GNU General Public License version 2 only, as
27.10 + * published by the Free Software Foundation. Sun designates this
27.11 + * particular file as subject to the "Classpath" exception as provided
27.12 + * by Sun in the LICENSE file that accompanied this code.
27.13 + *
27.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
27.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
27.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
27.17 + * version 2 for more details (a copy is included in the LICENSE file that
27.18 + * accompanied this code).
27.19 + *
27.20 + * You should have received a copy of the GNU General Public License version
27.21 + * 2 along with this work; if not, write to the Free Software Foundation,
27.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
27.23 + *
27.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
27.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
27.26 + * have any questions.
27.27 + */
27.28 +
27.29 +package com.sun.awt;
27.30 +
27.31 +import java.awt.*;
27.32 +import java.awt.geom.*;
27.33 +
27.34 +import sun.awt.AWTAccessor;
27.35 +
27.36 +
27.37 +/**
27.38 + * Security Warning control interface.
27.39 + *
27.40 + * This class provides a couple of methods that help a developer relocate
27.41 + * the AWT security warning to an appropriate position relative to the current
27.42 + * window size. A "top-level window" is an instance of the {@code Window}
27.43 + * class (or its descendant, such as {@code JFrame}). The security warning
27.44 + * is applied to all windows created by an untrusted code. All such windows
27.45 + * have a non-null "warning string" (see {@link Window#getWarningString()}).
27.46 + * <p>
27.47 + * <b>WARNING</b>: This class is an implementation detail and only meant
27.48 + * for limited use outside of the core platform. This API may change
27.49 + * drastically between update release, and it may even be
27.50 + * removed or be moved to some other packages or classes.
27.51 + */
27.52 +public final class SecurityWarning {
27.53 +
27.54 + /**
27.55 + * The SecurityWarning class should not be instantiated
27.56 + */
27.57 + private SecurityWarning() {
27.58 + }
27.59 +
27.60 + /**
27.61 + * Gets the size of the security warning.
27.62 + *
27.63 + * The returned value is not valid until the peer has been created. Before
27.64 + * invoking this method a developer must call the {@link Window#pack()},
27.65 + * {@link Window#setVisible()}, or some other method that creates the peer.
27.66 + *
27.67 + * @param window the window to get the security warning size for
27.68 + *
27.69 + * @throws NullPointerException if the window argument is null
27.70 + * @throws IllegalArgumentException if the window is trusted (i.e.
27.71 + * the {@code getWarningString()} returns null)
27.72 + */
27.73 + public static Dimension getSize(Window window) {
27.74 + if (window == null) {
27.75 + throw new NullPointerException(
27.76 + "The window argument should not be null.");
27.77 + }
27.78 + if (window.getWarningString() == null) {
27.79 + throw new IllegalArgumentException(
27.80 + "The window must have a non-null warning string.");
27.81 + }
27.82 + // We don't check for a non-null peer since it may be destroyed
27.83 + // after assigning a valid value to the security warning size.
27.84 +
27.85 + return AWTAccessor.getWindowAccessor().getSecurityWarningSize(window);
27.86 + }
27.87 +
27.88 + /**
27.89 + * Sets the position of the security warning.
27.90 + * <p>
27.91 + * The {@code alignmentX} and {@code alignmentY} arguments specify the
27.92 + * origin of the coordinate system used to calculate the position of the
27.93 + * security warning. The values must be in the range [0.0f...1.0f]. The
27.94 + * {@code 0.0f} value represents the left (top) edge of the rectangular
27.95 + * bounds of the window. The {@code 1.0f} value represents the right
27.96 + * (bottom) edge of the bounds. Whenever the size of the window changes,
27.97 + * the origin of the coordinate system gets relocated accordingly. For
27.98 + * convenience a developer may use the {@code Component.*_ALIGNMENT}
27.99 + * constants to pass predefined values for these arguments.
27.100 + * <p>
27.101 + * The {@code point} argument specifies the location of the security
27.102 + * warning in the coordinate system described above. If both {@code x} and
27.103 + * {@code y} coordinates of the point are equal to zero, the warning will
27.104 + * be located right in the origin of the coordinate system. On the other
27.105 + * hand, if both {@code alignmentX} and {@code alignmentY} are equal to
27.106 + * zero (i.e. the origin of the coordinate system is placed at the top-left
27.107 + * corner of the window), then the {@code point} argument represents the
27.108 + * absolute location of the security warning relative to the location of
27.109 + * the window. The "absolute" in this case means that the position of the
27.110 + * security warning is not effected by resizing of the window.
27.111 + * <p>
27.112 + * Note that the security warning managment code guarantees that:
27.113 + * <ul>
27.114 + * <li>The security warning cannot be located farther than two pixels from
27.115 + * the rectangular bounds of the window (see {@link Window#getBounds}), and
27.116 + * <li>The security warning is always visible on the screen.
27.117 + * </ul>
27.118 + * If either of the conditions is violated, the calculated position of the
27.119 + * security warning is adjusted by the system to meet both these
27.120 + * conditions.
27.121 + * <p>
27.122 + * The default position of the security warning is in the upper-right
27.123 + * corner of the window, two pixels to the right from the right edge. This
27.124 + * corresponds to the following arguments passed to this method:
27.125 + * <ul>
27.126 + * <li>{@code alignmentX = Component.RIGHT_ALIGNMENT}
27.127 + * <li>{@code alignmentY = Component.TOP_ALIGNMENT}
27.128 + * <li>{@code point = (2, 0)}
27.129 + * </ul>
27.130 + *
27.131 + * @param window the window to set the position of the security warning for
27.132 + * @param alignmentX the horizontal origin of the coordinate system
27.133 + * @param alignmentY the vertical origin of the coordinate system
27.134 + * @param point the position of the security warning in the specified
27.135 + * coordinate system
27.136 + *
27.137 + * @throws NullPointerException if the window argument is null
27.138 + * @throws NullPointerException if the point argument is null
27.139 + * @throws IllegalArgumentException if the window is trusted (i.e.
27.140 + * the {@code getWarningString()} returns null
27.141 + * @throws IllegalArgumentException if the alignmentX or alignmentY
27.142 + * arguments are not within the range [0.0f ... 1.0f]
27.143 + */
27.144 + public static void setPosition(Window window, Point2D point,
27.145 + float alignmentX, float alignmentY)
27.146 + {
27.147 + if (window == null) {
27.148 + throw new NullPointerException(
27.149 + "The window argument should not be null.");
27.150 + }
27.151 + if (window.getWarningString() == null) {
27.152 + throw new IllegalArgumentException(
27.153 + "The window must have a non-null warning string.");
27.154 + }
27.155 + if (point == null) {
27.156 + throw new NullPointerException(
27.157 + "The point argument must not be null");
27.158 + }
27.159 + if (alignmentX < 0.0f || alignmentX > 1.0f) {
27.160 + throw new IllegalArgumentException(
27.161 + "alignmentX must be in the range [0.0f ... 1.0f].");
27.162 + }
27.163 + if (alignmentY < 0.0f || alignmentY > 1.0f) {
27.164 + throw new IllegalArgumentException(
27.165 + "alignmentY must be in the range [0.0f ... 1.0f].");
27.166 + }
27.167 +
27.168 + AWTAccessor.getWindowAccessor().setSecurityWarningPosition(window,
27.169 + point, alignmentX, alignmentY);
27.170 + }
27.171 +}
27.172 +
28.1 --- a/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java Thu Apr 16 17:42:00 2009 +0100
28.2 +++ b/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java Thu Apr 16 19:10:32 2009 -0700
28.3 @@ -279,20 +279,22 @@
28.4
28.5 public void paintIcon(SynthContext context, Graphics g, int x, int y,
28.6 int w, int h) {
28.7 - JToolBar toolbar = (JToolBar)context.getComponent();
28.8 - Orientation orientation =
28.9 - (toolbar.getOrientation() == JToolBar.HORIZONTAL ?
28.10 - Orientation.HORIZONTAL : Orientation.VERTICAL);
28.11 + if (context != null) {
28.12 + JToolBar toolbar = (JToolBar)context.getComponent();
28.13 + Orientation orientation =
28.14 + (toolbar.getOrientation() == JToolBar.HORIZONTAL ?
28.15 + Orientation.HORIZONTAL : Orientation.VERTICAL);
28.16
28.17 - if (style == null) {
28.18 - style = SynthLookAndFeel.getStyleFactory().getStyle(
28.19 - context.getComponent(), GTKRegion.HANDLE_BOX);
28.20 + if (style == null) {
28.21 + style = SynthLookAndFeel.getStyleFactory().getStyle(
28.22 + context.getComponent(), GTKRegion.HANDLE_BOX);
28.23 + }
28.24 + context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX,
28.25 + style, SynthConstants.ENABLED);
28.26 +
28.27 + GTKPainter.INSTANCE.paintIcon(context, g,
28.28 + getMethod(), x, y, w, h, orientation);
28.29 }
28.30 - context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX,
28.31 - style, SynthConstants.ENABLED);
28.32 -
28.33 - GTKPainter.INSTANCE.paintIcon(context, g,
28.34 - getMethod(), x, y, w, h, orientation);
28.35 }
28.36
28.37 public int getIconWidth(SynthContext context) {
28.38 @@ -336,12 +338,14 @@
28.39
28.40 public void paintIcon(SynthContext context, Graphics g, int x, int y,
28.41 int w, int h) {
28.42 - ArrowType arrowDir = ArrowType.RIGHT;
28.43 - if (!context.getComponent().getComponentOrientation().isLeftToRight()) {
28.44 - arrowDir = ArrowType.LEFT;
28.45 + if (context != null) {
28.46 + ArrowType arrowDir = ArrowType.RIGHT;
28.47 + if (!context.getComponent().getComponentOrientation().isLeftToRight()) {
28.48 + arrowDir = ArrowType.LEFT;
28.49 + }
28.50 + GTKPainter.INSTANCE.paintIcon(context, g,
28.51 + getMethod(), x, y, w, h, arrowDir);
28.52 }
28.53 - GTKPainter.INSTANCE.paintIcon(context, g,
28.54 - getMethod(), x, y, w, h, arrowDir);
28.55 }
28.56 }
28.57 }
29.1 --- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Thu Apr 16 17:42:00 2009 +0100
29.2 +++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Thu Apr 16 19:10:32 2009 -0700
29.3 @@ -39,6 +39,8 @@
29.4 import java.io.FileNotFoundException;
29.5 import java.io.IOException;
29.6 import java.util.*;
29.7 +import java.security.AccessController;
29.8 +import java.security.PrivilegedAction;
29.9
29.10 import sun.awt.shell.ShellFolder;
29.11 import sun.awt.OSInfo;
29.12 @@ -1143,7 +1145,11 @@
29.13
29.14 File[] baseFolders;
29.15 if (useShellFolder) {
29.16 - baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");
29.17 + baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
29.18 + public File[] run() {
29.19 + return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
29.20 + }
29.21 + });
29.22 } else {
29.23 baseFolders = fsv.getRoots();
29.24 }
30.1 --- a/src/share/classes/java/awt/AWTKeyStroke.java Thu Apr 16 17:42:00 2009 +0100
30.2 +++ b/src/share/classes/java/awt/AWTKeyStroke.java Thu Apr 16 19:10:32 2009 -0700
30.3 @@ -1,5 +1,5 @@
30.4 /*
30.5 - * Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
30.6 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
30.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
30.8 *
30.9 * This code is free software; you can redistribute it and/or modify it
30.10 @@ -329,6 +329,9 @@
30.11 * <li><code>java.awt.event.KeyEvent.VK_TAB</code>
30.12 * <li><code>java.awt.event.KeyEvent.VK_SPACE</code>
30.13 * </ul>
30.14 + * Alternatively, the key code may be obtained by calling
30.15 + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
30.16 + *
30.17 * The modifiers consist of any combination of:<ul>
30.18 * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK
30.19 * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK
31.1 --- a/src/share/classes/java/awt/Canvas.java Thu Apr 16 17:42:00 2009 +0100
31.2 +++ b/src/share/classes/java/awt/Canvas.java Thu Apr 16 19:10:32 2009 -0700
31.3 @@ -25,6 +25,7 @@
31.4 package java.awt;
31.5
31.6 import java.awt.image.BufferStrategy;
31.7 +import java.awt.peer.CanvasPeer;
31.8 import javax.accessibility.*;
31.9
31.10 /**
31.11 @@ -65,7 +66,17 @@
31.12 */
31.13 public Canvas(GraphicsConfiguration config) {
31.14 this();
31.15 - graphicsConfig = config;
31.16 + setGraphicsConfiguration(config);
31.17 + }
31.18 +
31.19 + @Override
31.20 + void setGraphicsConfiguration(GraphicsConfiguration gc) {
31.21 + CanvasPeer peer = (CanvasPeer)getPeer();
31.22 + if (peer != null) {
31.23 + gc = peer.getAppropriateGraphicsConfiguration(gc);
31.24 + }
31.25 +
31.26 + super.setGraphicsConfiguration(gc);
31.27 }
31.28
31.29 /**
32.1 --- a/src/share/classes/java/awt/Component.java Thu Apr 16 17:42:00 2009 +0100
32.2 +++ b/src/share/classes/java/awt/Component.java Thu Apr 16 19:10:32 2009 -0700
32.3 @@ -1,5 +1,5 @@
32.4 /*
32.5 - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
32.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
32.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
32.8 *
32.9 * This code is free software; you can redistribute it and/or modify it
32.10 @@ -300,7 +300,7 @@
32.11 * @see GraphicsConfiguration
32.12 * @see #getGraphicsConfiguration
32.13 */
32.14 - transient GraphicsConfiguration graphicsConfig = null;
32.15 + private transient GraphicsConfiguration graphicsConfig = null;
32.16
32.17 /**
32.18 * A reference to a <code>BufferStrategy</code> object
32.19 @@ -799,8 +799,24 @@
32.20 }
32.21 }
32.22
32.23 + // Whether this Component has had the background erase flag
32.24 + // specified via SunToolkit.disableBackgroundErase(). This is
32.25 + // needed in order to make this function work on X11 platforms,
32.26 + // where currently there is no chance to interpose on the creation
32.27 + // of the peer and therefore the call to XSetBackground.
32.28 + transient boolean backgroundEraseDisabled;
32.29 +
32.30 static {
32.31 AWTAccessor.setComponentAccessor(new AWTAccessor.ComponentAccessor() {
32.32 + public void setBackgroundEraseDisabled(Component comp, boolean disabled) {
32.33 + comp.backgroundEraseDisabled = disabled;
32.34 + }
32.35 + public boolean getBackgroundEraseDisabled(Component comp) {
32.36 + return comp.backgroundEraseDisabled;
32.37 + }
32.38 + public Rectangle getBounds(Component comp) {
32.39 + return new Rectangle(comp.x, comp.y, comp.width, comp.height);
32.40 + }
32.41 public void setMixingCutoutShape(Component comp, Shape shape) {
32.42 Region region = shape == null ? null :
32.43 Region.getInstance(shape, null);
32.44 @@ -829,6 +845,22 @@
32.45 }
32.46 }
32.47 }
32.48 +
32.49 + public void setGraphicsConfiguration(Component comp,
32.50 + GraphicsConfiguration gc)
32.51 + {
32.52 + comp.setGraphicsConfiguration(gc);
32.53 + }
32.54 + public boolean requestFocus(Component comp, CausedFocusEvent.Cause cause) {
32.55 + return comp.requestFocus(cause);
32.56 + }
32.57 + public boolean canBeFocusOwner(Component comp) {
32.58 + return comp.canBeFocusOwner();
32.59 + }
32.60 +
32.61 + public boolean isVisible_NoClientCode(Component comp) {
32.62 + return comp.isVisible_NoClientCode();
32.63 + }
32.64 });
32.65 }
32.66
32.67 @@ -996,50 +1028,21 @@
32.68 */
32.69 public GraphicsConfiguration getGraphicsConfiguration() {
32.70 synchronized(getTreeLock()) {
32.71 - if (graphicsConfig != null) {
32.72 - return graphicsConfig;
32.73 - } else if (getParent() != null) {
32.74 - return getParent().getGraphicsConfiguration();
32.75 - } else {
32.76 - return null;
32.77 - }
32.78 + return getGraphicsConfiguration_NoClientCode();
32.79 }
32.80 }
32.81
32.82 final GraphicsConfiguration getGraphicsConfiguration_NoClientCode() {
32.83 - GraphicsConfiguration graphicsConfig = this.graphicsConfig;
32.84 - Container parent = this.parent;
32.85 - if (graphicsConfig != null) {
32.86 - return graphicsConfig;
32.87 - } else if (parent != null) {
32.88 - return parent.getGraphicsConfiguration_NoClientCode();
32.89 - } else {
32.90 - return null;
32.91 - }
32.92 - }
32.93 -
32.94 - /**
32.95 - * Resets this <code>Component</code>'s
32.96 - * <code>GraphicsConfiguration</code> back to a default
32.97 - * value. For most componenets, this is <code>null</code>.
32.98 - * Called from the Toolkit thread, so NO CLIENT CODE.
32.99 - */
32.100 - void resetGC() {
32.101 + return graphicsConfig;
32.102 + }
32.103 +
32.104 + void setGraphicsConfiguration(GraphicsConfiguration gc) {
32.105 synchronized(getTreeLock()) {
32.106 - graphicsConfig = null;
32.107 - }
32.108 - }
32.109 -
32.110 - /*
32.111 - * Not called on Component, but needed for Canvas and Window
32.112 - */
32.113 - void setGCFromPeer() {
32.114 - synchronized(getTreeLock()) {
32.115 - if (peer != null) { // can't imagine how this will be false,
32.116 - // but just in case
32.117 - graphicsConfig = peer.getGraphicsConfiguration();
32.118 - } else {
32.119 - graphicsConfig = null;
32.120 + graphicsConfig = gc;
32.121 +
32.122 + ComponentPeer peer = getPeer();
32.123 + if (peer != null) {
32.124 + peer.updateGraphicsData(gc);
32.125 }
32.126 }
32.127 }
32.128 @@ -6663,23 +6666,7 @@
32.129
32.130
32.131 // Update stacking order
32.132 - if (parent != null && parent.peer != null) {
32.133 - ContainerPeer parentContPeer = (ContainerPeer) parent.peer;
32.134 - // if our parent is lightweight and we are not
32.135 - // we should call restack on nearest heavyweight
32.136 - // container.
32.137 - if (parentContPeer instanceof LightweightPeer
32.138 - && ! (peer instanceof LightweightPeer))
32.139 - {
32.140 - Container hwParent = getNativeContainer();
32.141 - if (hwParent != null && hwParent.peer != null) {
32.142 - parentContPeer = (ContainerPeer) hwParent.peer;
32.143 - }
32.144 - }
32.145 - if (parentContPeer.isRestackSupported()) {
32.146 - parentContPeer.restack();
32.147 - }
32.148 - }
32.149 + peer.setZOrder(getHWPeerAboveMe());
32.150
32.151 if (!isAddNotifyComplete) {
32.152 mixOnShowing();
32.153 @@ -7170,8 +7157,8 @@
32.154 requestFocusHelper(false, true);
32.155 }
32.156
32.157 - void requestFocus(CausedFocusEvent.Cause cause) {
32.158 - requestFocusHelper(false, true, cause);
32.159 + boolean requestFocus(CausedFocusEvent.Cause cause) {
32.160 + return requestFocusHelper(false, true, cause);
32.161 }
32.162
32.163 /**
32.164 @@ -7456,7 +7443,7 @@
32.165 // sometimes most recent focus owner may be null, but focus owner is not
32.166 // e.g. we reset most recent focus owner if user removes focus owner
32.167 focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
32.168 - if (focusOwner != null && getContainingWindow(focusOwner) != window) {
32.169 + if (focusOwner != null && focusOwner.getContainingWindow() != window) {
32.170 focusOwner = null;
32.171 }
32.172 }
32.173 @@ -8689,30 +8676,8 @@
32.174 * null, if component is not a part of window hierarchy
32.175 */
32.176 Window getContainingWindow() {
32.177 - return getContainingWindow(this);
32.178 - }
32.179 - /**
32.180 - * Returns the <code>Window</code> ancestor of the component <code>comp</code>.
32.181 - * @return Window ancestor of the component or component by itself if it is Window;
32.182 - * null, if component is not a part of window hierarchy
32.183 - */
32.184 - static Window getContainingWindow(Component comp) {
32.185 - while (comp != null && !(comp instanceof Window)) {
32.186 - comp = comp.getParent();
32.187 - }
32.188 -
32.189 - return (Window)comp;
32.190 - }
32.191 -
32.192 -
32.193 -
32.194 -
32.195 -
32.196 -
32.197 -
32.198 -
32.199 -
32.200 -
32.201 + return SunToolkit.getContainingWindow(this);
32.202 + }
32.203
32.204 /**
32.205 * Initialize JNI field and method IDs
32.206 @@ -9575,6 +9540,27 @@
32.207 return nextAbove < 0 ? -1 : nextAbove;
32.208 }
32.209
32.210 + final ComponentPeer getHWPeerAboveMe() {
32.211 + checkTreeLock();
32.212 +
32.213 + Container cont = getContainer();
32.214 + int indexAbove = getSiblingIndexAbove();
32.215 +
32.216 + while (cont != null) {
32.217 + for (int i = indexAbove; i > -1; i--) {
32.218 + Component comp = cont.getComponent(i);
32.219 + if (comp != null && comp.isDisplayable() && !comp.isLightweight()) {
32.220 + return comp.getPeer();
32.221 + }
32.222 + }
32.223 +
32.224 + indexAbove = cont.getSiblingIndexAbove();
32.225 + cont = cont.getContainer();
32.226 + }
32.227 +
32.228 + return null;
32.229 + }
32.230 +
32.231 final int getSiblingIndexBelow() {
32.232 checkTreeLock();
32.233 Container parent = getContainer();
32.234 @@ -9827,4 +9813,29 @@
32.235 }
32.236
32.237 // ****************** END OF MIXING CODE ********************************
32.238 +
32.239 + private static boolean doesClassImplement(Class cls, String interfaceName) {
32.240 + if (cls == null) return false;
32.241 +
32.242 + for (Class c : cls.getInterfaces()) {
32.243 + if (c.getName().equals(interfaceName)) {
32.244 + return true;
32.245 + }
32.246 + }
32.247 + return doesClassImplement(cls.getSuperclass(), interfaceName);
32.248 + }
32.249 +
32.250 + /**
32.251 + * Checks that the given object implements the given interface.
32.252 + * @param obj Object to be checked
32.253 + * @param interfaceName The name of the interface. Must be fully-qualified interface name.
32.254 + * @return true, if this object implements the given interface,
32.255 + * false, otherwise, or if obj or interfaceName is null
32.256 + */
32.257 + static boolean doesImplement(Object obj, String interfaceName) {
32.258 + if (obj == null) return false;
32.259 + if (interfaceName == null) return false;
32.260 +
32.261 + return doesClassImplement(obj.getClass(), interfaceName);
32.262 + }
32.263 }
33.1 --- a/src/share/classes/java/awt/Container.java Thu Apr 16 17:42:00 2009 +0100
33.2 +++ b/src/share/classes/java/awt/Container.java Thu Apr 16 19:10:32 2009 -0700
33.3 @@ -1,5 +1,5 @@
33.4 /*
33.5 - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
33.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
33.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
33.8 *
33.9 * This code is free software; you can redistribute it and/or modify it
33.10 @@ -167,6 +167,9 @@
33.11 transient int listeningBoundsChildren;
33.12 transient int descendantsCount;
33.13
33.14 + /* Non-opaque window support -- see Window.setLayersOpaque */
33.15 + transient Color preserveBackgroundColor = null;
33.16 +
33.17 /**
33.18 * JDK 1.1 serialVersionUID
33.19 */
33.20 @@ -267,9 +270,13 @@
33.21
33.22 /**
33.23 * Gets the number of components in this panel.
33.24 + * <p>
33.25 + * Note: This method should be called under AWT tree lock.
33.26 + *
33.27 * @return the number of components in this panel.
33.28 * @see #getComponent
33.29 * @since JDK1.1
33.30 + * @see Component#getTreeLock()
33.31 */
33.32 public int getComponentCount() {
33.33 return countComponents();
33.34 @@ -281,43 +288,65 @@
33.35 */
33.36 @Deprecated
33.37 public int countComponents() {
33.38 - synchronized (getTreeLock()) {
33.39 - return component.size();
33.40 - }
33.41 + // This method is not synchronized under AWT tree lock.
33.42 + // Instead, the calling code is responsible for the
33.43 + // synchronization. See 6784816 for details.
33.44 + return component.size();
33.45 }
33.46
33.47 /**
33.48 * Gets the nth component in this container.
33.49 + * <p>
33.50 + * Note: This method should be called under AWT tree lock.
33.51 + *
33.52 * @param n the index of the component to get.
33.53 * @return the n<sup>th</sup> component in this container.
33.54 * @exception ArrayIndexOutOfBoundsException
33.55 * if the n<sup>th</sup> value does not exist.
33.56 + * @see Component#getTreeLock()
33.57 */
33.58 public Component getComponent(int n) {
33.59 - synchronized (getTreeLock()) {
33.60 - if ((n < 0) || (n >= component.size())) {
33.61 - throw new ArrayIndexOutOfBoundsException("No such child: " + n);
33.62 - }
33.63 + // This method is not synchronized under AWT tree lock.
33.64 + // Instead, the calling code is responsible for the
33.65 + // synchronization. See 6784816 for details.
33.66 + try {
33.67 return component.get(n);
33.68 + } catch (IndexOutOfBoundsException z) {
33.69 + throw new ArrayIndexOutOfBoundsException("No such child: " + n);
33.70 }
33.71 }
33.72
33.73 /**
33.74 * Gets all the components in this container.
33.75 + * <p>
33.76 + * Note: This method should be called under AWT tree lock.
33.77 + *
33.78 * @return an array of all the components in this container.
33.79 + * @see Component#getTreeLock()
33.80 */
33.81 public Component[] getComponents() {
33.82 + // This method is not synchronized under AWT tree lock.
33.83 + // Instead, the calling code is responsible for the
33.84 + // synchronization. See 6784816 for details.
33.85 return getComponents_NoClientCode();
33.86 }
33.87 +
33.88 // NOTE: This method may be called by privileged threads.
33.89 // This functionality is implemented in a package-private method
33.90 // to insure that it cannot be overridden by client subclasses.
33.91 // DO NOT INVOKE CLIENT CODE ON THIS THREAD!
33.92 final Component[] getComponents_NoClientCode() {
33.93 + return component.toArray(EMPTY_ARRAY);
33.94 + }
33.95 +
33.96 + /*
33.97 + * Wrapper for getComponents() method with a proper synchronization.
33.98 + */
33.99 + Component[] getComponentsSync() {
33.100 synchronized (getTreeLock()) {
33.101 - return component.toArray(EMPTY_ARRAY);
33.102 + return getComponents();
33.103 }
33.104 - } // getComponents_NoClientCode()
33.105 + }
33.106
33.107 /**
33.108 * Determines the insets of this container, which indicate the size
33.109 @@ -503,6 +532,9 @@
33.110 adjustDescendants(-(comp.countHierarchyMembers()));
33.111
33.112 comp.parent = null;
33.113 + if (needRemoveNotify) {
33.114 + comp.setGraphicsConfiguration(null);
33.115 + }
33.116 component.remove(index);
33.117
33.118 invalidateIfValid();
33.119 @@ -643,10 +675,7 @@
33.120 // each HW descendant independently.
33.121 return !comp.peer.isReparentSupported();
33.122 } else {
33.123 - // if container didn't change we still might need to recreate component's window as
33.124 - // changes to zorder should be reflected in native window stacking order and it might
33.125 - // not be supported by the platform. This is important only for heavyweight child
33.126 - return !((ContainerPeer)(newNativeContainer.peer)).isRestackSupported();
33.127 + return false;
33.128 }
33.129 }
33.130
33.131 @@ -786,6 +815,7 @@
33.132 component.add(index, comp);
33.133 }
33.134 comp.parent = this;
33.135 + comp.setGraphicsConfiguration(getGraphicsConfiguration());
33.136
33.137 adjustListeningChildren(AWTEvent.HIERARCHY_EVENT_MASK,
33.138 comp.numListening(AWTEvent.HIERARCHY_EVENT_MASK));
33.139 @@ -802,11 +832,6 @@
33.140 if (peer != null) {
33.141 if (comp.peer == null) { // Remove notify was called or it didn't have peer - create new one
33.142 comp.addNotify();
33.143 - // New created peer creates component on top of the stacking order
33.144 - Container newNativeContainer = getHeavyweightContainer();
33.145 - if (((ContainerPeer)newNativeContainer.getPeer()).isRestackSupported()) {
33.146 - ((ContainerPeer)newNativeContainer.getPeer()).restack();
33.147 - }
33.148 } else { // Both container and child have peers, it means child peer should be reparented.
33.149 // In both cases we need to reparent native widgets.
33.150 Container newNativeContainer = getHeavyweightContainer();
33.151 @@ -815,13 +840,8 @@
33.152 // Native container changed - need to reparent native widgets
33.153 newNativeContainer.reparentChild(comp);
33.154 }
33.155 - // If component still has a peer and it is either container or heavyweight
33.156 - // and restack is supported we have to restack native windows since order might have changed
33.157 - if ((!comp.isLightweight() || (comp instanceof Container))
33.158 - && ((ContainerPeer)newNativeContainer.getPeer()).isRestackSupported())
33.159 - {
33.160 - ((ContainerPeer)newNativeContainer.getPeer()).restack();
33.161 - }
33.162 + comp.peer.setZOrder(comp.getHWPeerAboveMe());
33.163 +
33.164 if (!comp.isLightweight() && isLightweight()) {
33.165 // If component is heavyweight and one of the containers is lightweight
33.166 // the location of the component should be fixed.
33.167 @@ -1034,9 +1054,9 @@
33.168 }
33.169 checkAddToSelf(comp);
33.170 checkNotAWindow(comp);
33.171 - if (thisGC != null) {
33.172 - comp.checkGD(thisGC.getDevice().getIDstring());
33.173 - }
33.174 + if (thisGC != null) {
33.175 + comp.checkGD(thisGC.getDevice().getIDstring());
33.176 + }
33.177
33.178 /* Reparent the component and tidy up the tree's state. */
33.179 if (comp.parent != null) {
33.180 @@ -1053,6 +1073,7 @@
33.181 component.add(index, comp);
33.182 }
33.183 comp.parent = this;
33.184 + comp.setGraphicsConfiguration(thisGC);
33.185
33.186 adjustListeningChildren(AWTEvent.HIERARCHY_EVENT_MASK,
33.187 comp.numListening(AWTEvent.HIERARCHY_EVENT_MASK));
33.188 @@ -1091,6 +1112,19 @@
33.189 }
33.190 }
33.191
33.192 + @Override
33.193 + void setGraphicsConfiguration(GraphicsConfiguration gc) {
33.194 + synchronized (getTreeLock()) {
33.195 + super.setGraphicsConfiguration(gc);
33.196 +
33.197 + for (Component comp : component) {
33.198 + if (comp != null) {
33.199 + comp.setGraphicsConfiguration(gc);
33.200 + }
33.201 + }
33.202 + }
33.203 + }
33.204 +
33.205 /**
33.206 * Checks that all Components that this Container contains are on
33.207 * the same GraphicsDevice as this Container. If not, throws an
33.208 @@ -1148,6 +1182,7 @@
33.209
33.210 comp.parent = null;
33.211 component.remove(index);
33.212 + comp.setGraphicsConfiguration(null);
33.213
33.214 invalidateIfValid();
33.215 if (containerListener != null ||
33.216 @@ -1224,6 +1259,7 @@
33.217 layoutMgr.removeLayoutComponent(comp);
33.218 }
33.219 comp.parent = null;
33.220 + comp.setGraphicsConfiguration(null);
33.221 if (containerListener != null ||
33.222 (eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0 ||
33.223 Toolkit.enabledOnToolkit(AWTEvent.CONTAINER_EVENT_MASK)) {
33.224 @@ -1339,7 +1375,7 @@
33.225 }
33.226
33.227 private int getListenersCount(int id, boolean enabledOnToolkit) {
33.228 - assert Thread.holdsLock(getTreeLock());
33.229 + checkTreeLock();
33.230 if (enabledOnToolkit) {
33.231 return descendantsCount;
33.232 }
33.233 @@ -1357,7 +1393,7 @@
33.234 final int createHierarchyEvents(int id, Component changed,
33.235 Container changedParent, long changeFlags, boolean enabledOnToolkit)
33.236 {
33.237 - assert Thread.holdsLock(getTreeLock());
33.238 + checkTreeLock();
33.239 int listeners = getListenersCount(id, enabledOnToolkit);
33.240
33.241 for (int count = listeners, i = 0; count > 0; i++) {
33.242 @@ -1372,7 +1408,7 @@
33.243 final void createChildHierarchyEvents(int id, long changeFlags,
33.244 boolean enabledOnToolkit)
33.245 {
33.246 - assert Thread.holdsLock(getTreeLock());
33.247 + checkTreeLock();
33.248 if (component.isEmpty()) {
33.249 return;
33.250 }
33.251 @@ -1507,6 +1543,7 @@
33.252 * @see #validate
33.253 */
33.254 protected void validateTree() {
33.255 + checkTreeLock();
33.256 if (!isValid()) {
33.257 if (peer instanceof ContainerPeer) {
33.258 ((ContainerPeer)peer).beginLayout();
33.259 @@ -1783,7 +1820,7 @@
33.260 // super.paint(); -- Don't bother, since it's a NOP.
33.261
33.262 GraphicsCallback.PaintCallback.getInstance().
33.263 - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS);
33.264 + runComponents(getComponentsSync(), g, GraphicsCallback.LIGHTWEIGHTS);
33.265 }
33.266 }
33.267
33.268 @@ -1838,7 +1875,7 @@
33.269 }
33.270
33.271 GraphicsCallback.PrintCallback.getInstance().
33.272 - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS);
33.273 + runComponents(getComponentsSync(), g, GraphicsCallback.LIGHTWEIGHTS);
33.274 }
33.275 }
33.276
33.277 @@ -1851,7 +1888,7 @@
33.278 public void paintComponents(Graphics g) {
33.279 if (isShowing()) {
33.280 GraphicsCallback.PaintAllCallback.getInstance().
33.281 - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.TWO_PASSES);
33.282 + runComponents(getComponentsSync(), g, GraphicsCallback.TWO_PASSES);
33.283 }
33.284 }
33.285
33.286 @@ -1873,8 +1910,8 @@
33.287 void paintHeavyweightComponents(Graphics g) {
33.288 if (isShowing()) {
33.289 GraphicsCallback.PaintHeavyweightComponentsCallback.getInstance().
33.290 - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS |
33.291 - GraphicsCallback.HEAVYWEIGHTS);
33.292 + runComponents(getComponentsSync(), g,
33.293 + GraphicsCallback.LIGHTWEIGHTS | GraphicsCallback.HEAVYWEIGHTS);
33.294 }
33.295 }
33.296
33.297 @@ -1887,7 +1924,7 @@
33.298 public void printComponents(Graphics g) {
33.299 if (isShowing()) {
33.300 GraphicsCallback.PrintAllCallback.getInstance().
33.301 - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.TWO_PASSES);
33.302 + runComponents(getComponentsSync(), g, GraphicsCallback.TWO_PASSES);
33.303 }
33.304 }
33.305
33.306 @@ -1909,8 +1946,8 @@
33.307 void printHeavyweightComponents(Graphics g) {
33.308 if (isShowing()) {
33.309 GraphicsCallback.PrintHeavyweightComponentsCallback.getInstance().
33.310 - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS |
33.311 - GraphicsCallback.HEAVYWEIGHTS);
33.312 + runComponents(getComponentsSync(), g,
33.313 + GraphicsCallback.LIGHTWEIGHTS | GraphicsCallback.HEAVYWEIGHTS);
33.314 }
33.315 }
33.316
33.317 @@ -2460,9 +2497,7 @@
33.318 * @since 1.2
33.319 */
33.320 public Component findComponentAt(int x, int y) {
33.321 - synchronized (getTreeLock()) {
33.322 - return findComponentAt(x, y, true);
33.323 - }
33.324 + return findComponentAt(x, y, true);
33.325 }
33.326
33.327 /**
33.328 @@ -2475,58 +2510,60 @@
33.329 * The addition of this feature is temporary, pending the
33.330 * adoption of new, public API which exports this feature.
33.331 */
33.332 - final Component findComponentAt(int x, int y, boolean ignoreEnabled)
33.333 - {
33.334 - if (isRecursivelyVisible()){
33.335 - return findComponentAtImpl(x, y, ignoreEnabled);
33.336 + final Component findComponentAt(int x, int y, boolean ignoreEnabled) {
33.337 + synchronized (getTreeLock()) {
33.338 + if (isRecursivelyVisible()){
33.339 + return findComponentAtImpl(x, y, ignoreEnabled);
33.340 + }
33.341 }
33.342 return null;
33.343 }
33.344
33.345 final Component findComponentAtImpl(int x, int y, boolean ignoreEnabled){
33.346 + checkTreeLock();
33.347 +
33.348 if (!(contains(x, y) && visible && (ignoreEnabled || enabled))) {
33.349 return null;
33.350 }
33.351
33.352 // Two passes: see comment in sun.awt.SunGraphicsCallback
33.353 - synchronized (getTreeLock()) {
33.354 - for (int i = 0; i < component.size(); i++) {
33.355 - Component comp = component.get(i);
33.356 - if (comp != null &&
33.357 - !(comp.peer instanceof LightweightPeer)) {
33.358 - if (comp instanceof Container) {
33.359 - comp = ((Container)comp).findComponentAtImpl(x - comp.x,
33.360 - y - comp.y,
33.361 - ignoreEnabled);
33.362 - } else {
33.363 - comp = comp.locate(x - comp.x, y - comp.y);
33.364 - }
33.365 - if (comp != null && comp.visible &&
33.366 - (ignoreEnabled || comp.enabled))
33.367 - {
33.368 - return comp;
33.369 - }
33.370 + for (int i = 0; i < component.size(); i++) {
33.371 + Component comp = component.get(i);
33.372 + if (comp != null &&
33.373 + !(comp.peer instanceof LightweightPeer)) {
33.374 + if (comp instanceof Container) {
33.375 + comp = ((Container)comp).findComponentAtImpl(x - comp.x,
33.376 + y - comp.y,
33.377 + ignoreEnabled);
33.378 + } else {
33.379 + comp = comp.locate(x - comp.x, y - comp.y);
33.380 }
33.381 - }
33.382 - for (int i = 0; i < component.size(); i++) {
33.383 - Component comp = component.get(i);
33.384 - if (comp != null &&
33.385 - comp.peer instanceof LightweightPeer) {
33.386 - if (comp instanceof Container) {
33.387 - comp = ((Container)comp).findComponentAtImpl(x - comp.x,
33.388 - y - comp.y,
33.389 - ignoreEnabled);
33.390 - } else {
33.391 - comp = comp.locate(x - comp.x, y - comp.y);
33.392 - }
33.393 - if (comp != null && comp.visible &&
33.394 - (ignoreEnabled || comp.enabled))
33.395 - {
33.396 - return comp;
33.397 - }
33.398 + if (comp != null && comp.visible &&
33.399 + (ignoreEnabled || comp.enabled))
33.400 + {
33.401 + return comp;
33.402 }
33.403 }
33.404 }
33.405 + for (int i = 0; i < component.size(); i++) {
33.406 + Component comp = component.get(i);
33.407 + if (comp != null &&
33.408 + comp.peer instanceof LightweightPeer) {
33.409 + if (comp instanceof Container) {
33.410 + comp = ((Container)comp).findComponentAtImpl(x - comp.x,
33.411 + y - comp.y,
33.412 + ignoreEnabled);
33.413 + } else {
33.414 + comp = comp.locate(x - comp.x, y - comp.y);
33.415 + }
33.416 + if (comp != null && comp.visible &&
33.417 + (ignoreEnabled || comp.enabled))
33.418 + {
33.419 + return comp;
33.420 + }
33.421 + }
33.422 + }
33.423 +
33.424 return this;
33.425 }
33.426
33.427 @@ -2584,13 +2621,6 @@
33.428 for (int i = 0; i < component.size(); i++) {
33.429 component.get(i).addNotify();
33.430 }
33.431 - // Update stacking order if native platform allows
33.432 - ContainerPeer cpeer = (ContainerPeer)peer;
33.433 - if (cpeer.isRestackSupported()) {
33.434 - cpeer.restack();
33.435 - }
33.436 -
33.437 -
33.438 }
33.439 }
33.440
33.441 @@ -3488,7 +3518,7 @@
33.442 private void writeObject(ObjectOutputStream s) throws IOException {
33.443 ObjectOutputStream.PutField f = s.putFields();
33.444 f.put("ncomponents", component.size());
33.445 - f.put("component", component.toArray(EMPTY_ARRAY));
33.446 + f.put("component", getComponentsSync());
33.447 f.put("layoutMgr", layoutMgr);
33.448 f.put("dispatcher", dispatcher);
33.449 f.put("maxSize", maxSize);
34.1 --- a/src/share/classes/java/awt/DefaultKeyboardFocusManager.java Thu Apr 16 17:42:00 2009 +0100
34.2 +++ b/src/share/classes/java/awt/DefaultKeyboardFocusManager.java Thu Apr 16 19:10:32 2009 -0700
34.3 @@ -479,7 +479,7 @@
34.4 // that a Component outside of the focused Window receives a
34.5 // FOCUS_GAINED event. We synthesize a WINDOW_GAINED_FOCUS
34.6 // event in that case.
34.7 - final Window newFocusedWindow = Component.getContainingWindow(newFocusOwner);
34.8 + final Window newFocusedWindow = SunToolkit.getContainingWindow(newFocusOwner);
34.9 final Window currentFocusedWindow = getGlobalFocusedWindow();
34.10 if (newFocusedWindow != null &&
34.11 newFocusedWindow != currentFocusedWindow)
35.1 --- a/src/share/classes/java/awt/Dialog.java Thu Apr 16 17:42:00 2009 +0100
35.2 +++ b/src/share/classes/java/awt/Dialog.java Thu Apr 16 19:10:32 2009 -0700
35.3 @@ -1226,7 +1226,7 @@
35.4 synchronized (getTreeLock()) {
35.5 if (keepBlockingEDT) {
35.6 keepBlockingEDT = false;
35.7 - PeerEvent wakingEvent = new PeerEvent(this, new WakingRunnable(), PeerEvent.PRIORITY_EVENT);
35.8 + PeerEvent wakingEvent = new PeerEvent(getToolkit(), new WakingRunnable(), PeerEvent.PRIORITY_EVENT);
35.9 AppContext curAppContext = AppContext.getAppContext();
35.10 if (showAppContext != curAppContext) {
35.11 // Wake up event dispatch thread on which the dialog was
36.1 --- a/src/share/classes/java/awt/Frame.java Thu Apr 16 17:42:00 2009 +0100
36.2 +++ b/src/share/classes/java/awt/Frame.java Thu Apr 16 19:10:32 2009 -0700
36.3 @@ -36,6 +36,7 @@
36.4 import java.io.IOException;
36.5 import sun.awt.AppContext;
36.6 import sun.awt.SunToolkit;
36.7 +import sun.awt.AWTAccessor;
36.8 import java.lang.ref.WeakReference;
36.9 import javax.accessibility.*;
36.10
36.11 @@ -738,11 +739,15 @@
36.12 * @since 1.4
36.13 * @see java.awt.Window#addWindowStateListener
36.14 */
36.15 - public synchronized void setExtendedState(int state) {
36.16 + public void setExtendedState(int state) {
36.17 if ( !isFrameStateSupported( state ) ) {
36.18 return;
36.19 }
36.20 - this.state = state;
36.21 + synchronized (getObjectLock()) {
36.22 + this.state = state;
36.23 + }
36.24 + // peer.setState must be called outside of object lock
36.25 + // synchronization block to avoid possible deadlock
36.26 FramePeer peer = (FramePeer)this.peer;
36.27 if (peer != null) {
36.28 peer.setState(state);
36.29 @@ -804,12 +809,27 @@
36.30 * @see #setExtendedState(int)
36.31 * @since 1.4
36.32 */
36.33 - public synchronized int getExtendedState() {
36.34 - FramePeer peer = (FramePeer)this.peer;
36.35 - if (peer != null) {
36.36 - state = peer.getState();
36.37 + public int getExtendedState() {
36.38 + synchronized (getObjectLock()) {
36.39 + return state;
36.40 }
36.41 - return state;
36.42 + }
36.43 +
36.44 + static {
36.45 + AWTAccessor.setFrameAccessor(
36.46 + new AWTAccessor.FrameAccessor() {
36.47 + public void setExtendedState(Frame frame, int state) {
36.48 + synchronized(frame.getObjectLock()) {
36.49 + frame.state = state;
36.50 + }
36.51 + }
36.52 + public int getExtendedState(Frame frame) {
36.53 + synchronized(frame.getObjectLock()) {
36.54 + return frame.state;
36.55 + }
36.56 + }
36.57 + }
36.58 + );
36.59 }
36.60
36.61 /**
36.62 @@ -967,7 +987,7 @@
36.63 if (resizable) {
36.64 str += ",resizable";
36.65 }
36.66 - getExtendedState(); // sync with peer
36.67 + int state = getExtendedState();
36.68 if (state == NORMAL) {
36.69 str += ",normal";
36.70 }
37.1 --- a/src/share/classes/java/awt/GraphicsConfiguration.java Thu Apr 16 17:42:00 2009 +0100
37.2 +++ b/src/share/classes/java/awt/GraphicsConfiguration.java Thu Apr 16 19:10:32 2009 -0700
37.3 @@ -1,5 +1,5 @@
37.4 /*
37.5 - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
37.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
37.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
37.8 *
37.9 * This code is free software; you can redistribute it and/or modify it
37.10 @@ -434,4 +434,20 @@
37.11 }
37.12 return defaultImageCaps;
37.13 }
37.14 +
37.15 + /**
37.16 + * Returns whether this GraphicsConfiguration supports
37.17 + * the {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT
37.18 + * PERPIXEL_TRANSLUCENT} kind of translucency.
37.19 + *
37.20 + * @param gc GraphicsConfiguration
37.21 + * @throws NullPointerException if the gc argument is null
37.22 + * @return whether the given GraphicsConfiguration supports
37.23 + * the translucency effects.
37.24 + * @see Window#setBackground(Color)
37.25 + */
37.26 + /*public */boolean isTranslucencyCapable() {
37.27 + // Overridden in subclasses
37.28 + return false;
37.29 }
37.30 +}
38.1 --- a/src/share/classes/java/awt/GraphicsDevice.java Thu Apr 16 17:42:00 2009 +0100
38.2 +++ b/src/share/classes/java/awt/GraphicsDevice.java Thu Apr 16 19:10:32 2009 -0700
38.3 @@ -1,5 +1,5 @@
38.4 /*
38.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
38.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
38.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
38.8 *
38.9 * This code is free software; you can redistribute it and/or modify it
38.10 @@ -27,7 +27,10 @@
38.11 package java.awt;
38.12
38.13 import java.awt.image.ColorModel;
38.14 +
38.15 +import sun.awt.AWTAccessor;
38.16 import sun.awt.AppContext;
38.17 +import sun.awt.SunToolkit;
38.18
38.19 /**
38.20 * The <code>GraphicsDevice</code> class describes the graphics devices
38.21 @@ -109,6 +112,31 @@
38.22 */
38.23 public final static int TYPE_IMAGE_BUFFER = 2;
38.24
38.25 + /** Kinds of translucency supported by the underlying system.
38.26 + * @see #isTranslucencySupported
38.27 + */
38.28 + /*public */static enum WindowTranslucency {
38.29 + /**
38.30 + * Represents support in the underlying system for windows each pixel
38.31 + * of which is guaranteed to be either completely opaque, with
38.32 + * an alpha value of 1.0, or completely transparent, with an alpha
38.33 + * value of 0.0.
38.34 + */
38.35 + PERPIXEL_TRANSPARENT,
38.36 + /**
38.37 + * Represents support in the underlying system for windows all of
38.38 + * the pixels of which have the same alpha value between or including
38.39 + * 0.0 and 1.0.
38.40 + */
38.41 + TRANSLUCENT,
38.42 + /**
38.43 + * Represents support in the underlying system for windows that
38.44 + * contain or might contain pixels with arbitrary alpha values
38.45 + * between and including 0.0 and 1.0.
38.46 + */
38.47 + PERPIXEL_TRANSLUCENT;
38.48 + }
38.49 +
38.50 /**
38.51 * Returns the type of this <code>GraphicsDevice</code>.
38.52 * @return the type of this <code>GraphicsDevice</code>, which can
38.53 @@ -235,6 +263,21 @@
38.54 * @since 1.4
38.55 */
38.56 public void setFullScreenWindow(Window w) {
38.57 + if (w != null) {
38.58 + //XXX: The actions should be documented in some non-update release.
38.59 + /*
38.60 + if (w.getShape() != null) {
38.61 + w.setShape(w, null);
38.62 + }
38.63 + if (!w.isOpaque()) {
38.64 + w.setOpaque(false);
38.65 + }
38.66 + if (w.getOpacity() < 1.0f) {
38.67 + w.setOpacity(1.0f);
38.68 + }
38.69 + */
38.70 + }
38.71 +
38.72 if (fullScreenWindow != null && windowedModeBounds != null) {
38.73 // if the window went into fs mode before it was realized it may
38.74 // have (0,0) dimensions
38.75 @@ -424,4 +467,94 @@
38.76 public int getAvailableAcceleratedMemory() {
38.77 return -1;
38.78 }
38.79 +
38.80 + /**
38.81 + * Returns whether the given level of translucency is supported
38.82 + * this graphics device.
38.83 + *
38.84 + * @param translucencyKind a kind of translucency support
38.85 + * @return whether the given translucency kind is supported
38.86 + */
38.87 + /*public */boolean isWindowTranslucencySupported(WindowTranslucency translucencyKind) {
38.88 + switch (translucencyKind) {
38.89 + case PERPIXEL_TRANSPARENT:
38.90 + return isWindowShapingSupported();
38.91 + case TRANSLUCENT:
38.92 + return isWindowOpacitySupported();
38.93 + case PERPIXEL_TRANSLUCENT:
38.94 + return isWindowPerpixelTranslucencySupported();
38.95 + }
38.96 + return false;
38.97 + }
38.98 +
38.99 + /**
38.100 + * Returns whether the windowing system supports changing the shape
38.101 + * of top-level windows.
38.102 + * Note that this method may sometimes return true, but the native
38.103 + * windowing system may still not support the concept of
38.104 + * shaping (due to the bugs in the windowing system).
38.105 + */
38.106 + static boolean isWindowShapingSupported() {
38.107 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
38.108 + if (!(curToolkit instanceof SunToolkit)) {
38.109 + return false;
38.110 + }
38.111 + return ((SunToolkit)curToolkit).isWindowShapingSupported();
38.112 + }
38.113 +
38.114 + /**
38.115 + * Returns whether the windowing system supports changing the opacity
38.116 + * value of top-level windows.
38.117 + * Note that this method may sometimes return true, but the native
38.118 + * windowing system may still not support the concept of
38.119 + * translucency (due to the bugs in the windowing system).
38.120 + */
38.121 + static boolean isWindowOpacitySupported() {
38.122 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
38.123 + if (!(curToolkit instanceof SunToolkit)) {
38.124 + return false;
38.125 + }
38.126 + return ((SunToolkit)curToolkit).isWindowOpacitySupported();
38.127 + }
38.128 +
38.129 + boolean isWindowPerpixelTranslucencySupported() {
38.130 + /*
38.131 + * Per-pixel alpha is supported if all the conditions are TRUE:
38.132 + * 1. The toolkit is a sort of SunToolkit
38.133 + * 2. The toolkit supports translucency in general
38.134 + * (isWindowTranslucencySupported())
38.135 + * 3. There's at least one translucency-capable
38.136 + * GraphicsConfiguration
38.137 + */
38.138 + Toolkit curToolkit = Toolkit.getDefaultToolkit();
38.139 + if (!(curToolkit instanceof SunToolkit)) {
38.140 + return false;
38.141 + }
38.142 + if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) {
38.143 + return false;
38.144 + }
38.145 +
38.146 + // TODO: cache translucency capable GC
38.147 + return getTranslucencyCapableGC() != null;
38.148 + }
38.149 +
38.150 + GraphicsConfiguration getTranslucencyCapableGC() {
38.151 + // If the default GC supports translucency return true.
38.152 + // It is important to optimize the verification this way,
38.153 + // see CR 6661196 for more details.
38.154 + GraphicsConfiguration defaultGC = getDefaultConfiguration();
38.155 + if (defaultGC.isTranslucencyCapable()) {
38.156 + return defaultGC;
38.157 + }
38.158 +
38.159 + // ... otherwise iterate through all the GCs.
38.160 + GraphicsConfiguration[] configs = getConfigurations();
38.161 + for (int j = 0; j < configs.length; j++) {
38.162 + if (configs[j].isTranslucencyCapable()) {
38.163 + return configs[j];
38.164 + }
38.165 + }
38.166 +
38.167 + return null;
38.168 + }
38.169 }
39.1 --- a/src/share/classes/java/awt/KeyboardFocusManager.java Thu Apr 16 17:42:00 2009 +0100
39.2 +++ b/src/share/classes/java/awt/KeyboardFocusManager.java Thu Apr 16 19:10:32 2009 -0700
39.3 @@ -61,6 +61,7 @@
39.4 import sun.awt.SunToolkit;
39.5 import sun.awt.CausedFocusEvent;
39.6 import sun.awt.KeyboardFocusManagerPeerProvider;
39.7 +import sun.awt.AWTAccessor;
39.8
39.9 /**
39.10 * The KeyboardFocusManager is responsible for managing the active and focused
39.11 @@ -118,6 +119,32 @@
39.12 if (!GraphicsEnvironment.isHeadless()) {
39.13 initIDs();
39.14 }
39.15 + AWTAccessor.setKeyboardFocusManagerAccessor(
39.16 + new AWTAccessor.KeyboardFocusManagerAccessor() {
39.17 + public int shouldNativelyFocusHeavyweight(Component heavyweight,
39.18 + Component descendant,
39.19 + boolean temporary,
39.20 + boolean focusedWindowChangeAllowed,
39.21 + long time,
39.22 + CausedFocusEvent.Cause cause)
39.23 + {
39.24 + return KeyboardFocusManager.shouldNativelyFocusHeavyweight(
39.25 + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause);
39.26 + }
39.27 + public boolean processSynchronousLightweightTransfer(Component heavyweight,
39.28 + Component descendant,
39.29 + boolean temporary,
39.30 + boolean focusedWindowChangeAllowed,
39.31 + long time)
39.32 + {
39.33 + return KeyboardFocusManager.processSynchronousLightweightTransfer(
39.34 + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time);
39.35 + }
39.36 + public void removeLastFocusRequest(Component heavyweight) {
39.37 + KeyboardFocusManager.removeLastFocusRequest(heavyweight);
39.38 + }
39.39 + }
39.40 + );
39.41 }
39.42
39.43 transient KeyboardFocusManagerPeer peer;
39.44 @@ -2208,7 +2235,7 @@
39.45 boolean temporary, boolean focusedWindowChangeAllowed,
39.46 long time)
39.47 {
39.48 - Window parentWindow = Component.getContainingWindow(heavyweight);
39.49 + Window parentWindow = SunToolkit.getContainingWindow(heavyweight);
39.50 if (parentWindow == null || !parentWindow.syncLWRequests) {
39.51 return false;
39.52 }
39.53 @@ -2443,79 +2470,7 @@
39.54 }
39.55 }
39.56 }
39.57 - static void heavyweightButtonDown(Component heavyweight, long time) {
39.58 - heavyweightButtonDown(heavyweight, time, false);
39.59 - }
39.60 - static void heavyweightButtonDown(Component heavyweight, long time, boolean acceptDuplicates) {
39.61 - if (log.isLoggable(Level.FINE)) {
39.62 - if (heavyweight == null) {
39.63 - log.log(Level.FINE, "Assertion (heavyweight != null) failed");
39.64 - }
39.65 - if (time == 0) {
39.66 - log.log(Level.FINE, "Assertion (time != 0) failed");
39.67 - }
39.68 - }
39.69 - KeyboardFocusManager manager = getCurrentKeyboardFocusManager(SunToolkit.targetToAppContext(heavyweight));
39.70
39.71 - synchronized (heavyweightRequests) {
39.72 - HeavyweightFocusRequest hwFocusRequest = getLastHWRequest();
39.73 - Component currentNativeFocusOwner = (hwFocusRequest == null)
39.74 - ? manager.getNativeFocusOwner()
39.75 - : hwFocusRequest.heavyweight;
39.76 -
39.77 - // Behavior for all use cases:
39.78 - // 1. Heavyweight leaf Components (e.g., Button, Checkbox, Choice,
39.79 - // List, TextComponent, Canvas) that respond to button down.
39.80 - //
39.81 - // Native platform will generate a FOCUS_GAINED if and only if
39.82 - // the Component is not the focus owner (or, will not be the
39.83 - // focus owner when all outstanding focus requests are
39.84 - // processed).
39.85 - //
39.86 - // 2. Panel with no descendants.
39.87 - //
39.88 - // Same as (1).
39.89 - //
39.90 - // 3. Panel with at least one heavyweight descendant.
39.91 - //
39.92 - // This function should NOT be called for this case!
39.93 - //
39.94 - // 4. Panel with only lightweight descendants.
39.95 - //
39.96 - // Native platform will generate a FOCUS_GAINED if and only if
39.97 - // neither the Panel, nor any of its recursive, lightweight
39.98 - // descendants, is the focus owner. However, we want a
39.99 - // requestFocus() for any lightweight descendant to win out over
39.100 - // the focus request for the Panel. To accomplish this, we
39.101 - // differ from the algorithm for shouldNativelyFocusHeavyweight
39.102 - // as follows:
39.103 - // a. If the requestFocus() for a lightweight descendant has
39.104 - // been fully handled by the time this function is invoked,
39.105 - // then 'hwFocusRequest' will be null and 'heavyweight'
39.106 - // will be the native focus owner. Do *not* synthesize a
39.107 - // focus transfer to the Panel.
39.108 - // b. If the requestFocus() for a lightweight descendant has
39.109 - // been recorded, but not handled, then 'hwFocusRequest'
39.110 - // will be non-null and 'hwFocusRequest.heavyweight' will
39.111 - // equal 'heavyweight'. Do *not* append 'heavyweight' to
39.112 - // hwFocusRequest.lightweightRequests.
39.113 - // c. If the requestFocus() for a lightweight descendant is
39.114 - // yet to be made, then post a new HeavyweightFocusRequest.
39.115 - // If no lightweight descendant ever requests focus, then
39.116 - // the Panel will get focus. If some descendant does, then
39.117 - // the descendant will get focus by either a synthetic
39.118 - // focus transfer, or a lightweightRequests focus transfer.
39.119 -
39.120 - if (acceptDuplicates || heavyweight != currentNativeFocusOwner) {
39.121 - getCurrentKeyboardFocusManager
39.122 - (SunToolkit.targetToAppContext(heavyweight)).
39.123 - enqueueKeyEvents(time, heavyweight);
39.124 - heavyweightRequests.add
39.125 - (new HeavyweightFocusRequest(heavyweight, heavyweight,
39.126 - false, CausedFocusEvent.Cause.MOUSE_EVENT));
39.127 - }
39.128 - }
39.129 - }
39.130 /**
39.131 * Returns the Window which will be active after processing this request,
39.132 * or null if this is a duplicate request. The active Window is useful
39.133 @@ -2542,7 +2497,7 @@
39.134 (HeavyweightFocusRequest.CLEAR_GLOBAL_FOCUS_OWNER);
39.135
39.136 Component activeWindow = ((hwFocusRequest != null)
39.137 - ? Component.getContainingWindow(hwFocusRequest.heavyweight)
39.138 + ? SunToolkit.getContainingWindow(hwFocusRequest.heavyweight)
39.139 : nativeFocusedWindow);
39.140 while (activeWindow != null &&
39.141 !((activeWindow instanceof Frame) ||
39.142 @@ -3013,8 +2968,8 @@
39.143 }
39.144
39.145 private static boolean focusedWindowChanged(Component to, Component from) {
39.146 - Window wto = Component.getContainingWindow(to);
39.147 - Window wfrom = Component.getContainingWindow(from);
39.148 + Window wto = SunToolkit.getContainingWindow(to);
39.149 + Window wfrom = SunToolkit.getContainingWindow(from);
39.150 if (wto == null && wfrom == null) {
39.151 return true;
39.152 }
39.153 @@ -3028,8 +2983,8 @@
39.154 }
39.155
39.156 private static boolean isTemporary(Component to, Component from) {
39.157 - Window wto = Component.getContainingWindow(to);
39.158 - Window wfrom = Component.getContainingWindow(from);
39.159 + Window wto = SunToolkit.getContainingWindow(to);
39.160 + Window wfrom = SunToolkit.getContainingWindow(from);
39.161 if (wto == null && wfrom == null) {
39.162 return false;
39.163 }
40.1 --- a/src/share/classes/java/awt/MenuItem.java Thu Apr 16 17:42:00 2009 +0100
40.2 +++ b/src/share/classes/java/awt/MenuItem.java Thu Apr 16 19:10:32 2009 -0700
40.3 @@ -1,5 +1,5 @@
40.4 /*
40.5 - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
40.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
40.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
40.8 *
40.9 * This code is free software; you can redistribute it and/or modify it
40.10 @@ -398,9 +398,11 @@
40.11 boolean handleShortcut(KeyEvent e) {
40.12 MenuShortcut s = new MenuShortcut(e.getKeyCode(),
40.13 (e.getModifiers() & InputEvent.SHIFT_MASK) > 0);
40.14 + MenuShortcut sE = new MenuShortcut(e.getExtendedKeyCode(),
40.15 + (e.getModifiers() & InputEvent.SHIFT_MASK) > 0);
40.16 // Fix For 6185151: Menu shortcuts of all menuitems within a menu
40.17 // should be disabled when the menu itself is disabled
40.18 - if (s.equals(shortcut) && isItemEnabled()) {
40.19 + if ((s.equals(shortcut) || sE.equals(shortcut)) && isItemEnabled()) {
40.20 // MenuShortcut match -- issue an event on keydown.
40.21 if (e.getID() == KeyEvent.KEY_PRESSED) {
40.22 doMenuEvent(e.getWhen(), e.getModifiers());
41.1 --- a/src/share/classes/java/awt/MenuShortcut.java Thu Apr 16 17:42:00 2009 +0100
41.2 +++ b/src/share/classes/java/awt/MenuShortcut.java Thu Apr 16 19:10:32 2009 -0700
41.3 @@ -1,5 +1,5 @@
41.4 /*
41.5 - * Copyright 1996-2003 Sun Microsystems, Inc. All Rights Reserved.
41.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
41.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
41.8 *
41.9 * This code is free software; you can redistribute it and/or modify it
41.10 @@ -34,7 +34,21 @@
41.11 * For example, a menu shortcut for Ctrl-a (assuming that Control is
41.12 * the accelerator key) would be created with code like the following:
41.13 * <p>
41.14 - * MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);
41.15 + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);</code>
41.16 + * <p> or alternatively
41.17 + * <p>
41.18 + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.getExtendedKeyCodeForChar('A'), false);</code>
41.19 + * <p>
41.20 + * Menu shortcuts may also be constructed for a wider set of keycodes
41.21 + * using the <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code> call.
41.22 + * For example, a menu shortcut for "Ctrl+cyrillic ef" is created by
41.23 + * <p>
41.24 + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.getExtendedKeyCodeForChar('\u0444'), false);</code>
41.25 + * <p>
41.26 + * Note that shortcuts created with a keycode or an extended keycode defined as a constant in <code>KeyEvent</code>
41.27 + * work regardless of the current keyboard layout. However, a shortcut made of
41.28 + * an extended keycode not listed in <code>KeyEvent</code>
41.29 + * only work if the current keyboard layout produces a corresponding letter.
41.30 * <p>
41.31 * The accelerator key is platform-dependent and may be obtained
41.32 * via {@link Toolkit#getMenuShortcutKeyMask}.
42.1 --- a/src/share/classes/java/awt/Window.java Thu Apr 16 17:42:00 2009 +0100
42.2 +++ b/src/share/classes/java/awt/Window.java Thu Apr 16 19:10:32 2009 -0700
42.3 @@ -1,5 +1,5 @@
42.4 /*
42.5 - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
42.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
42.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
42.8 *
42.9 * This code is free software; you can redistribute it and/or modify it
42.10 @@ -25,8 +25,10 @@
42.11 package java.awt;
42.12
42.13 import java.awt.event.*;
42.14 +import java.awt.geom.Point2D;
42.15 import java.awt.im.InputContext;
42.16 import java.awt.image.BufferStrategy;
42.17 +import java.awt.image.BufferedImage;
42.18 import java.awt.peer.ComponentPeer;
42.19 import java.awt.peer.WindowPeer;
42.20 import java.beans.PropertyChangeListener;
42.21 @@ -49,6 +51,7 @@
42.22 import java.util.logging.Logger;
42.23 import java.util.concurrent.atomic.AtomicBoolean;
42.24 import javax.accessibility.*;
42.25 +import sun.awt.AWTAccessor;
42.26 import sun.awt.AppContext;
42.27 import sun.awt.CausedFocusEvent;
42.28 import sun.awt.SunToolkit;
42.29 @@ -291,6 +294,25 @@
42.30 */
42.31 transient boolean isInShow = false;
42.32
42.33 + /*
42.34 + * Opacity level of the window
42.35 + *
42.36 + * @see #setOpacity(float)
42.37 + * @see #getOpacity()
42.38 + * @since 1.7
42.39 + */
42.40 + private float opacity = 1.0f;
42.41 +
42.42 + /*
42.43 + * The shape assigned to this window. This field is set to null if
42.44 + * no shape is set (rectangular window).
42.45 + *
42.46 + * @see #getShape()
42.47 + * @see #setShape(Shape)
42.48 + * @since 1.7
42.49 + */
42.50 + private Shape shape = null;
42.51 +
42.52 private static final String base = "win";
42.53 private static int nameCounter = 0;
42.54
42.55 @@ -305,6 +327,23 @@
42.56
42.57 transient boolean isTrayIconWindow = false;
42.58
42.59 + /**
42.60 + * These fields are initialized in the native peer code
42.61 + * or via AWTAccessor's WindowAccessor.
42.62 + */
42.63 + private transient volatile int securityWarningWidth = 0;
42.64 + private transient volatile int securityWarningHeight = 0;
42.65 +
42.66 + /**
42.67 + * These fields represent the desired location for the security
42.68 + * warning if this window is untrusted.
42.69 + * See com.sun.awt.SecurityWarning for more details.
42.70 + */
42.71 + private transient double securityWarningPointX = 2.0;
42.72 + private transient double securityWarningPointY = 0.0;
42.73 + private transient float securityWarningAlignmentX = RIGHT_ALIGNMENT;
42.74 + private transient float securityWarningAlignmentY = TOP_ALIGNMENT;
42.75 +
42.76 static {
42.77 /* ensure that the necessary native libraries are loaded */
42.78 Toolkit.loadLibraries();
42.79 @@ -373,6 +412,18 @@
42.80 }
42.81 }
42.82
42.83 + private GraphicsConfiguration initGC(GraphicsConfiguration gc) {
42.84 + GraphicsEnvironment.checkHeadless();
42.85 +
42.86 + if (gc == null) {
42.87 + gc = GraphicsEnvironment.getLocalGraphicsEnvironment().
42.88 + getDefaultScreenDevice().getDefaultConfiguration();
42.89 + }
42.90 + setGraphicsConfiguration(gc);
42.91 +
42.92 + return gc;
42.93 + }
42.94 +
42.95 private void init(GraphicsConfiguration gc) {
42.96 GraphicsEnvironment.checkHeadless();
42.97
42.98 @@ -384,14 +435,10 @@
42.99 setWarningString();
42.100 this.cursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
42.101 this.visible = false;
42.102 - if (gc == null) {
42.103 - this.graphicsConfig =
42.104 - GraphicsEnvironment.getLocalGraphicsEnvironment().
42.105 - getDefaultScreenDevice().getDefaultConfiguration();
42.106 - } else {
42.107 - this.graphicsConfig = gc;
42.108 - }
42.109 - if (graphicsConfig.getDevice().getType() !=
42.110 +
42.111 + gc = initGC(gc);
42.112 +
42.113 + if (gc.getDevice().getType() !=
42.114 GraphicsDevice.TYPE_RASTER_SCREEN) {
42.115 throw new IllegalArgumentException("not a screen device");
42.116 }
42.117 @@ -399,8 +446,8 @@
42.118
42.119 /* offset the initial location with the original of the screen */
42.120 /* and any insets */
42.121 - Rectangle screenBounds = graphicsConfig.getBounds();
42.122 - Insets screenInsets = getToolkit().getScreenInsets(graphicsConfig);
42.123 + Rectangle screenBounds = gc.getBounds();
42.124 + Insets screenInsets = getToolkit().getScreenInsets(gc);
42.125 int x = getX() + screenBounds.x + screenInsets.left;
42.126 int y = getY() + screenBounds.y + screenInsets.top;
42.127 if (x != this.x || y != this.y) {
42.128 @@ -2744,7 +2791,7 @@
42.129 sun.java2d.Disposer.addRecord(anchor, new WindowDisposerRecord(appContext, this));
42.130
42.131 addToWindowList();
42.132 -
42.133 + initGC(null);
42.134 }
42.135
42.136 private void deserializeResources(ObjectInputStream s)
42.137 @@ -2849,6 +2896,15 @@
42.138 if(aot) {
42.139 setAlwaysOnTop(aot); // since 1.5; subject to permission check
42.140 }
42.141 + shape = (Shape)f.get("shape", null);
42.142 + opacity = (Float)f.get("opacity", 1.0f);
42.143 +
42.144 + this.securityWarningWidth = 0;
42.145 + this.securityWarningHeight = 0;
42.146 + this.securityWarningPointX = 2.0;
42.147 + this.securityWarningPointY = 0.0;
42.148 + this.securityWarningAlignmentX = RIGHT_ALIGNMENT;
42.149 + this.securityWarningAlignmentY = TOP_ALIGNMENT;
42.150
42.151 deserializeResources(s);
42.152 }
42.153 @@ -2916,41 +2972,18 @@
42.154
42.155 } // inner class AccessibleAWTWindow
42.156
42.157 - /**
42.158 - * This method returns the GraphicsConfiguration used by this Window.
42.159 - * @since 1.3
42.160 - */
42.161 - public GraphicsConfiguration getGraphicsConfiguration() {
42.162 - //NOTE: for multiscreen, this will need to take into account
42.163 - //which screen the window is on/mostly on instead of returning the
42.164 - //default or constructor argument config.
42.165 - synchronized(getTreeLock()) {
42.166 - if (graphicsConfig == null && !GraphicsEnvironment.isHeadless()) {
42.167 - graphicsConfig =
42.168 - GraphicsEnvironment. getLocalGraphicsEnvironment().
42.169 - getDefaultScreenDevice().
42.170 - getDefaultConfiguration();
42.171 - }
42.172 - return graphicsConfig;
42.173 - }
42.174 - }
42.175 -
42.176 - /**
42.177 - * Reset this Window's GraphicsConfiguration to match its peer.
42.178 - */
42.179 - void resetGC() {
42.180 - if (!GraphicsEnvironment.isHeadless()) {
42.181 - // use the peer's GC
42.182 - setGCFromPeer();
42.183 - // if it's still null, use the default
42.184 - if (graphicsConfig == null) {
42.185 - graphicsConfig = GraphicsEnvironment.
42.186 + @Override
42.187 + void setGraphicsConfiguration(GraphicsConfiguration gc) {
42.188 + if (gc == null) {
42.189 + gc = GraphicsEnvironment.
42.190 getLocalGraphicsEnvironment().
42.191 getDefaultScreenDevice().
42.192 getDefaultConfiguration();
42.193 - }
42.194 + }
42.195 + synchronized (getTreeLock()) {
42.196 + super.setGraphicsConfiguration(gc);
42.197 if (log.isLoggable(Level.FINER)) {
42.198 - log.finer("+ Window.resetGC(): new GC is \n+ " + graphicsConfig + "\n+ this is " + this);
42.199 + log.finer("+ Window.setGraphicsConfiguration(): new GC is \n+ " + getGraphicsConfiguration_NoClientCode() + "\n+ this is " + this);
42.200 }
42.201 }
42.202 }
42.203 @@ -3010,13 +3043,13 @@
42.204 // target location
42.205 int dx = 0, dy = 0;
42.206 // target GC
42.207 - GraphicsConfiguration gc = this.graphicsConfig;
42.208 + GraphicsConfiguration gc = getGraphicsConfiguration_NoClientCode();
42.209 Rectangle gcBounds = gc.getBounds();
42.210
42.211 Dimension windowSize = getSize();
42.212
42.213 // search a top-level of c
42.214 - Window componentWindow = Component.getContainingWindow(c);
42.215 + Window componentWindow = SunToolkit.getContainingWindow(c);
42.216 if ((c == null) || (componentWindow == null)) {
42.217 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
42.218 gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
42.219 @@ -3304,6 +3337,225 @@
42.220 }
42.221
42.222
42.223 + // ******************** SHAPES & TRANSPARENCY CODE ********************
42.224 +
42.225 + /**
42.226 + * JavaDoc
42.227 + */
42.228 + /*public */float getOpacity() {
42.229 + synchronized (getTreeLock()) {
42.230 + return opacity;
42.231 + }
42.232 + }
42.233 +
42.234 + /**
42.235 + * JavaDoc
42.236 + */
42.237 + /*public */void setOpacity(float opacity) {
42.238 + synchronized (getTreeLock()) {
42.239 + if (opacity < 0.0f || opacity > 1.0f) {
42.240 + throw new IllegalArgumentException(
42.241 + "The value of opacity should be in the range [0.0f .. 1.0f].");
42.242 + }
42.243 + GraphicsConfiguration gc = getGraphicsConfiguration();
42.244 + GraphicsDevice gd = gc.getDevice();
42.245 + if (!gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {
42.246 + throw new UnsupportedOperationException(
42.247 + "TRANSLUCENT translucency is not supported.");
42.248 + }
42.249 + if ((gc.getDevice().getFullScreenWindow() == this) && (opacity < 1.0f)) {
42.250 + throw new IllegalArgumentException(
42.251 + "Setting opacity for full-screen window is not supported.");
42.252 + }
42.253 + this.opacity = opacity;
42.254 + WindowPeer peer = (WindowPeer)getPeer();
42.255 + if (peer != null) {
42.256 + peer.setOpacity(opacity);
42.257 + }
42.258 + }
42.259 + }
42.260 +
42.261 + /**
42.262 + * JavaDoc
42.263 + */
42.264 + /*public */Shape getShape() {
42.265 + synchronized (getTreeLock()) {
42.266 + return shape;
42.267 + }
42.268 + }
42.269 +
42.270 + /**
42.271 + * JavaDoc
42.272 + *
42.273 + * @param window the window to set the shape to
42.274 + * @param shape the shape to set to the window
42.275 + * @throws IllegalArgumentException if the window is in full screen mode,
42.276 + * and the shape is not null
42.277 + */
42.278 + /*public */void setShape(Shape shape) {
42.279 + synchronized (getTreeLock()) {
42.280 + GraphicsConfiguration gc = getGraphicsConfiguration();
42.281 + GraphicsDevice gd = gc.getDevice();
42.282 + if (!gd.isWindowTranslucencySupported(
42.283 + GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT))
42.284 + {
42.285 + throw new UnsupportedOperationException(
42.286 + "PERPIXEL_TRANSPARENT translucency is not supported.");
42.287 + }
42.288 + if ((gc.getDevice().getFullScreenWindow() == this) && (shape != null)) {
42.289 + throw new IllegalArgumentException(
42.290 + "Setting shape for full-screen window is not supported.");
42.291 + }
42.292 + this.shape = shape;
42.293 + WindowPeer peer = (WindowPeer)getPeer();
42.294 + if (peer != null) {
42.295 + peer.applyShape(shape == null ? null : Region.getInstance(shape, null));
42.296 + }
42.297 + }
42.298 + }
42.299 +
42.300 + /**
42.301 + * JavaDoc
42.302 + */
42.303 +/*
42.304 + @Override
42.305 + public void setBackground(Color bgColor) {
42.306 + int alpha = bgColor.getAlpha();
42.307 + if (alpha < 255) { // non-opaque window
42.308 + GraphicsConfiguration gc = getGraphicsConfiguration();
42.309 + GraphicsDevice gd = gc.getDevice();
42.310 + if (gc.getDevice().getFullScreenWindow() == this) {
42.311 + throw new IllegalArgumentException(
42.312 + "Making full-screen window non opaque is not supported.");
42.313 + }
42.314 + if (!gc.isTranslucencyCapable()) {
42.315 + GraphicsConfiguration capableGC = gd.getTranslucencyCapableGC();
42.316 + if (capableGC == null) {
42.317 + throw new IllegalArgumentException(
42.318 + "PERPIXEL_TRANSLUCENT translucency is not supported");
42.319 + }
42.320 + // TODO: change GC
42.321 + }
42.322 + setLayersOpaque(this, false);
42.323 + }
42.324 +
42.325 + super.setBackground(bgColor);
42.326 +
42.327 + WindowPeer peer = (WindowPeer)getPeer();
42.328 + if (peer != null) {
42.329 + peer.setOpaque(alpha == 255);
42.330 + }
42.331 + }
42.332 +*/
42.333 +
42.334 + private transient boolean opaque = true;
42.335 +
42.336 + void setOpaque(boolean opaque) {
42.337 + synchronized (getTreeLock()) {
42.338 + GraphicsConfiguration gc = getGraphicsConfiguration();
42.339 + if (!opaque && !com.sun.awt.AWTUtilities.isTranslucencyCapable(gc)) {
42.340 + throw new IllegalArgumentException(
42.341 + "The window must use a translucency-compatible graphics configuration");
42.342 + }
42.343 + if (!com.sun.awt.AWTUtilities.isTranslucencySupported(
42.344 + com.sun.awt.AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT))
42.345 + {
42.346 + throw new UnsupportedOperationException(
42.347 + "PERPIXEL_TRANSLUCENT translucency is not supported.");
42.348 + }
42.349 + if ((gc.getDevice().getFullScreenWindow() == this) && !opaque) {
42.350 + throw new IllegalArgumentException(
42.351 + "Making full-screen window non opaque is not supported.");
42.352 + }
42.353 + setLayersOpaque(this, opaque);
42.354 + this.opaque = opaque;
42.355 + WindowPeer peer = (WindowPeer)getPeer();
42.356 + if (peer != null) {
42.357 + peer.setOpaque(opaque);
42.358 + }
42.359 + }
42.360 + }
42.361 +
42.362 + private void updateWindow(BufferedImage backBuffer) {
42.363 + synchronized (getTreeLock()) {
42.364 + WindowPeer peer = (WindowPeer)getPeer();
42.365 + if (peer != null) {
42.366 + peer.updateWindow(backBuffer);
42.367 + }
42.368 + }
42.369 + }
42.370 +
42.371 + private static final Color TRANSPARENT_BACKGROUND_COLOR = new Color(0, 0, 0, 0);
42.372 +
42.373 + private static void setLayersOpaque(Component component, boolean isOpaque) {
42.374 + // Shouldn't use instanceof to avoid loading Swing classes
42.375 + // if it's a pure AWT application.
42.376 + if (Component.doesImplement(component, "javax.swing.RootPaneContainer")) {
42.377 + javax.swing.RootPaneContainer rpc = (javax.swing.RootPaneContainer)component;
42.378 + javax.swing.JRootPane root = rpc.getRootPane();
42.379 + javax.swing.JLayeredPane lp = root.getLayeredPane();
42.380 + Container c = root.getContentPane();
42.381 + javax.swing.JComponent content =
42.382 + (c instanceof javax.swing.JComponent) ? (javax.swing.JComponent)c : null;
42.383 + javax.swing.JComponent gp =
42.384 + (rpc.getGlassPane() instanceof javax.swing.JComponent) ?
42.385 + (javax.swing.JComponent)rpc.getGlassPane() : null;
42.386 + if (gp != null) {
42.387 + gp.setDoubleBuffered(isOpaque);
42.388 + }
42.389 + lp.setOpaque(isOpaque);
42.390 + root.setOpaque(isOpaque);
42.391 + root.setDoubleBuffered(isOpaque); //XXX: the "white rect" workaround
42.392 + if (content != null) {
42.393 + content.setOpaque(isOpaque);
42.394 + content.setDoubleBuffered(isOpaque); //XXX: the "white rect" workaround
42.395 +
42.396 + // Iterate down one level to see whether we have a JApplet
42.397 + // (which is also a RootPaneContainer) which requires processing
42.398 + int numChildren = content.getComponentCount();
42.399 + if (numChildren > 0) {
42.400 + Component child = content.getComponent(0);
42.401 + // It's OK to use instanceof here because we've
42.402 + // already loaded the RootPaneContainer class by now
42.403 + if (child instanceof javax.swing.RootPaneContainer) {
42.404 + setLayersOpaque(child, isOpaque);
42.405 + }
42.406 + }
42.407 + }
42.408 + }
42.409 +
42.410 + Color bg = component.getBackground();
42.411 + boolean hasTransparentBg = TRANSPARENT_BACKGROUND_COLOR.equals(bg);
42.412 +
42.413 + Container container = null;
42.414 + if (component instanceof Container) {
42.415 + container = (Container) component;
42.416 + }
42.417 +
42.418 + if (isOpaque) {
42.419 + if (hasTransparentBg) {
42.420 + // Note: we use the SystemColor.window color as the default.
42.421 + // This color is used in the WindowPeer implementations to
42.422 + // initialize the background color of the window if it is null.
42.423 + // (This might not be the right thing to do for other
42.424 + // RootPaneContainers we might be invoked with)
42.425 + Color newColor = null;
42.426 + if (container != null && container.preserveBackgroundColor != null) {
42.427 + newColor = container.preserveBackgroundColor;
42.428 + } else {
42.429 + newColor = SystemColor.window;
42.430 + }
42.431 + component.setBackground(newColor);
42.432 + }
42.433 + } else {
42.434 + if (!hasTransparentBg && container != null) {
42.435 + container.preserveBackgroundColor = bg;
42.436 + }
42.437 + component.setBackground(TRANSPARENT_BACKGROUND_COLOR);
42.438 + }
42.439 + }
42.440 +
42.441 +
42.442 // ************************** MIXING CODE *******************************
42.443
42.444 // A window has a parent, but it does NOT have a container
42.445 @@ -3341,6 +3593,87 @@
42.446
42.447 // ****************** END OF MIXING CODE ********************************
42.448
42.449 + // This method gets the window location/size as reported by the native
42.450 + // system since the locally cached values may represent outdated data.
42.451 + // NOTE: this method is invoked on the toolkit thread, and therefore
42.452 + // is not supposed to become public/user-overridable.
42.453 + private Point2D calculateSecurityWarningPosition(double x, double y,
42.454 + double w, double h)
42.455 + {
42.456 + return new Point2D.Double(
42.457 + x + w * securityWarningAlignmentX + securityWarningPointX,
42.458 + y + h * securityWarningAlignmentY + securityWarningPointY);
42.459 + }
42.460 +
42.461 + static {
42.462 + AWTAccessor.setWindowAccessor(new AWTAccessor.WindowAccessor() {
42.463 + public float getOpacity(Window window) {
42.464 + return window.opacity;
42.465 + }
42.466 + public void setOpacity(Window window, float opacity) {
42.467 + window.setOpacity(opacity);
42.468 + }
42.469 + public Shape getShape(Window window) {
42.470 + return window.getShape();
42.471 + }
42.472 + public void setShape(Window window, Shape shape) {
42.473 + window.setShape(shape);
42.474 + }
42.475 + public boolean isOpaque(Window window) {
42.476 + /*
42.477 + return window.getBackground().getAlpha() < 255;
42.478 + */
42.479 + synchronized (window.getTreeLock()) {
42.480 + return window.opaque;
42.481 + }
42.482 + }
42.483 + public void setOpaque(Window window, boolean opaque) {
42.484 + /*
42.485 + Color bg = window.getBackground();
42.486 + window.setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue(),
42.487 + opaque ? 255 : 0));
42.488 + */
42.489 + window.setOpaque(opaque);
42.490 + }
42.491 + public void updateWindow(Window window, BufferedImage backBuffer) {
42.492 + window.updateWindow(backBuffer);
42.493 + }
42.494 +
42.495 + public Dimension getSecurityWarningSize(Window window) {
42.496 + return new Dimension(window.securityWarningWidth,
42.497 + window.securityWarningHeight);
42.498 + }
42.499 +
42.500 + public void setSecurityWarningSize(Window window, int width, int height)
42.501 + {
42.502 + window.securityWarningWidth = width;
42.503 + window.securityWarningHeight = height;
42.504 + }
42.505 +
42.506 + public void setSecurityWarningPosition(Window window,
42.507 + Point2D point, float alignmentX, float alignmentY)
42.508 + {
42.509 + window.securityWarningPointX = point.getX();
42.510 + window.securityWarningPointY = point.getY();
42.511 + window.securityWarningAlignmentX = alignmentX;
42.512 + window.securityWarningAlignmentY = alignmentY;
42.513 +
42.514 + synchronized (window.getTreeLock()) {
42.515 + WindowPeer peer = (WindowPeer)window.getPeer();
42.516 + if (peer != null) {
42.517 + peer.repositionSecurityWarning();
42.518 + }
42.519 + }
42.520 + }
42.521 +
42.522 + public Point2D calculateSecurityWarningPosition(Window window,
42.523 + double x, double y, double w, double h)
42.524 + {
42.525 + return window.calculateSecurityWarningPosition(x, y, w, h);
42.526 + }
42.527 + }); // WindowAccessor
42.528 + } // static
42.529 +
42.530 } // class Window
42.531
42.532
43.1 --- a/src/share/classes/java/awt/event/KeyEvent.java Thu Apr 16 17:42:00 2009 +0100
43.2 +++ b/src/share/classes/java/awt/event/KeyEvent.java Thu Apr 16 19:10:32 2009 -0700
43.3 @@ -1,5 +1,5 @@
43.4 /*
43.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
43.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
43.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
43.8 *
43.9 * This code is free software; you can redistribute it and/or modify it
43.10 @@ -65,15 +65,16 @@
43.11 * <p>
43.12 * For key pressed and key released events, the getKeyCode method returns
43.13 * the event's keyCode. For key typed events, the getKeyCode method
43.14 - * always returns VK_UNDEFINED.
43.15 + * always returns {@code VK_UNDEFINED}. The {@code getExtendedKeyCode} method
43.16 + * may also be used with many international keyboard layouts.
43.17 *
43.18 * <p>
43.19 * <em>"Key pressed" and "key released" events</em> are lower-level and depend
43.20 * on the platform and keyboard layout. They are generated whenever a key is
43.21 * pressed or released, and are the only way to find out about keys that don't
43.22 * generate character input (e.g., action keys, modifier keys, etc.). The key
43.23 - * being pressed or released is indicated by the getKeyCode method, which returns
43.24 - * a virtual key code.
43.25 + * being pressed or released is indicated by the {@code getKeyCode} and {@code getExtendedKeyCode}
43.26 + * methods, which return a virtual key code.
43.27 *
43.28 * <p>
43.29 * <em>Virtual key codes</em> are used to report which keyboard key has
43.30 @@ -111,6 +112,11 @@
43.31 * platform and keyboard layout. For example, the key that generates VK_Q
43.32 * when using a U.S. keyboard layout will generate VK_A when using a French
43.33 * keyboard layout.
43.34 + * <li>The key that generates {@code VK_Q} when using a U.S. keyboard layout also
43.35 + * generates a unique code for Russian or Hebrew layout. There is no a
43.36 + * {@code VK_} constant for these and many other codes in various layouts. These codes
43.37 + * may be obtained by using {@code getExtendedKeyCode} and are used whenever
43.38 + * a {@code VK_} constant is used.
43.39 * <li>Not all characters have a keycode associated with them. For example,
43.40 * there is no keycode for the question mark because there is no keyboard
43.41 * for which it appears on the primary layer.
43.42 @@ -891,6 +897,12 @@
43.43 */
43.44 int keyLocation;
43.45
43.46 + //set from native code.
43.47 + private transient long rawCode = 0;
43.48 + private transient long primaryLevelUnicode = 0;
43.49 + private transient long scancode = 0; // for MS Windows only
43.50 + private transient long extendedKeyCode = 0;
43.51 +
43.52 /*
43.53 * JDK 1.1 serialVersionUID
43.54 */
43.55 @@ -1315,6 +1327,9 @@
43.56 return numpad + "-" + c;
43.57 }
43.58
43.59 + if ((keyCode & 0x01000000) != 0) {
43.60 + return String.valueOf((char)(keyCode ^ 0x01000000 ));
43.61 + }
43.62 String unknown = Toolkit.getProperty("AWT.unknown", "Unknown");
43.63 return unknown + " keyCode: 0x" + Integer.toString(keyCode, 16);
43.64 }
43.65 @@ -1551,9 +1566,44 @@
43.66 str.append("KEY_LOCATION_UNKNOWN");
43.67 break;
43.68 }
43.69 + str.append(",rawCode=").append(rawCode);
43.70 + str.append(",primaryLevelUnicode=").append(primaryLevelUnicode);
43.71 + str.append(",scancode=").append(scancode);
43.72 + str.append(",extendedKeyCode=0x").append(Long.toHexString(extendedKeyCode));
43.73
43.74 return str.toString();
43.75 }
43.76 + /**
43.77 + * Returns an extended key code for the event.
43.78 + * The extended key code is a unique id assigned to a key on the keyboard
43.79 + * just like {@code keyCode}. However, unlike {@code keyCode}, this value depends on the
43.80 + * current keyboard layout. For instance, pressing the left topmost letter key
43.81 + * in a common English layout produces the same value as {@code keyCode}, {@code VK_Q}.
43.82 + * Pressing the same key in a regular Russian layout gives another code, unique for the
43.83 + * letter "Cyrillic I short".
43.84 + *
43.85 + * @since 1.7
43.86 + *
43.87 + */
43.88 + public int getExtendedKeyCode() {
43.89 + return (int)extendedKeyCode;
43.90 + }
43.91 + /**
43.92 + * Returns an extended key code for a unicode character.
43.93 + *
43.94 + * @return for a unicode character with a corresponding {@code VK_} constant -- this
43.95 + * {@code VK_} constant; for a character appearing on the primary
43.96 + * level of a known keyboard layout -- a unique integer.
43.97 + * If a character does not appear on the primary level of a known keyboard,
43.98 + * {@code VK_UNDEFINED} is returned.
43.99 + *
43.100 + * @since 1.7
43.101 + *
43.102 + */
43.103 + public static int getExtendedKeyCodeForChar(int c) {
43.104 + // Return a keycode (if any) associated with a character.
43.105 + return sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(c);
43.106 + }
43.107
43.108 /**
43.109 * Sets new modifiers by the old ones. The key modifiers
44.1 --- a/src/share/classes/java/awt/peer/CanvasPeer.java Thu Apr 16 17:42:00 2009 +0100
44.2 +++ b/src/share/classes/java/awt/peer/CanvasPeer.java Thu Apr 16 19:10:32 2009 -0700
44.3 @@ -25,6 +25,7 @@
44.4 package java.awt.peer;
44.5
44.6 import java.awt.Canvas;
44.7 +import java.awt.GraphicsConfiguration;
44.8
44.9 /**
44.10 * The peer interface for {@link Canvas}.
44.11 @@ -36,4 +37,13 @@
44.12 * instances.
44.13 */
44.14 public interface CanvasPeer extends ComponentPeer {
44.15 + /**
44.16 + * Requests a GC that best suits this Canvas. The returned GC may differ
44.17 + * from the requested GC passed as the argument to this method. This method
44.18 + * must return a non-null value (given the argument is non-null as well).
44.19 + *
44.20 + * @since 1.7
44.21 + */
44.22 + GraphicsConfiguration getAppropriateGraphicsConfiguration(
44.23 + GraphicsConfiguration gc);
44.24 }
45.1 --- a/src/share/classes/java/awt/peer/ComponentPeer.java Thu Apr 16 17:42:00 2009 +0100
45.2 +++ b/src/share/classes/java/awt/peer/ComponentPeer.java Thu Apr 16 19:10:32 2009 -0700
45.3 @@ -539,4 +539,16 @@
45.4 */
45.5 void applyShape(Region shape);
45.6
45.7 + /**
45.8 + * Lowers this component at the bottom of the above HW peer. If the above parameter
45.9 + * is null then the method places this component at the top of the Z-order.
45.10 + */
45.11 + void setZOrder(ComponentPeer above);
45.12 +
45.13 + /**
45.14 + * Updates internal data structures related to the component's GC.
45.15 + *
45.16 + * @since 1.7
45.17 + */
45.18 + void updateGraphicsData(GraphicsConfiguration gc);
45.19 }
46.1 --- a/src/share/classes/java/awt/peer/ContainerPeer.java Thu Apr 16 17:42:00 2009 +0100
46.2 +++ b/src/share/classes/java/awt/peer/ContainerPeer.java Thu Apr 16 19:10:32 2009 -0700
46.3 @@ -76,21 +76,4 @@
46.4 * @see Container#validateTree()
46.5 */
46.6 void endLayout();
46.7 -
46.8 - /**
46.9 - * Restacks native windows - children of this native window - according to
46.10 - * Java container order.
46.11 - *
46.12 - * @since 1.5
46.13 - */
46.14 - void restack();
46.15 -
46.16 - /**
46.17 - * Indicates availability of restacking operation in this container.
46.18 - *
46.19 - * @return Returns true if restack is supported, false otherwise
46.20 - *
46.21 - * @since 1.5
46.22 - */
46.23 - boolean isRestackSupported();
46.24 }
47.1 --- a/src/share/classes/java/awt/peer/WindowPeer.java Thu Apr 16 17:42:00 2009 +0100
47.2 +++ b/src/share/classes/java/awt/peer/WindowPeer.java Thu Apr 16 19:10:32 2009 -0700
47.3 @@ -1,5 +1,5 @@
47.4 /*
47.5 - * Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved.
47.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
47.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
47.8 *
47.9 * This code is free software; you can redistribute it and/or modify it
47.10 @@ -27,6 +27,8 @@
47.11
47.12 import java.awt.*;
47.13
47.14 +import java.awt.image.BufferedImage;
47.15 +
47.16 /**
47.17 * The peer interface for {@link Window}.
47.18 *
47.19 @@ -92,4 +94,31 @@
47.20 * @see Window#setIconImages(java.util.List)
47.21 */
47.22 void updateIconImages();
47.23 +
47.24 + /**
47.25 + * Sets the level of opacity for the window.
47.26 + *
47.27 + * @see Window#setOpacity(float)
47.28 + */
47.29 + void setOpacity(float opacity);
47.30 +
47.31 + /**
47.32 + * Enables the per-pixel alpha support for the window.
47.33 + *
47.34 + * @see Window#setBackground(Color)
47.35 + */
47.36 + void setOpaque(boolean isOpaque);
47.37 +
47.38 + /**
47.39 + * Updates the native part of non-opaque window using
47.40 + * the given image with color+alpha values for each pixel.
47.41 + *
47.42 + * @see Window#setBackground(Color)
47.43 + */
47.44 + void updateWindow(BufferedImage backBuffer);
47.45 +
47.46 + /**
47.47 + * Instructs the peer to update the position of the security warning.
47.48 + */
47.49 + void repositionSecurityWarning();
47.50 }
48.1 --- a/src/share/classes/java/beans/Beans.java Thu Apr 16 17:42:00 2009 +0100
48.2 +++ b/src/share/classes/java/beans/Beans.java Thu Apr 16 19:10:32 2009 -0700
48.3 @@ -1,5 +1,5 @@
48.4 /*
48.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
48.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
48.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
48.8 *
48.9 * This code is free software; you can redistribute it and/or modify it
48.10 @@ -27,26 +27,41 @@
48.11
48.12 import com.sun.beans.finder.ClassFinder;
48.13
48.14 -import java.applet.*;
48.15 +import java.applet.Applet;
48.16 +import java.applet.AppletContext;
48.17 +import java.applet.AppletStub;
48.18 +import java.applet.AudioClip;
48.19
48.20 -import java.awt.*;
48.21 -
48.22 -import java.beans.AppletInitializer;
48.23 +import java.awt.GraphicsEnvironment;
48.24 +import java.awt.Image;
48.25
48.26 import java.beans.beancontext.BeanContext;
48.27
48.28 -import java.io.*;
48.29 -
48.30 -import java.lang.reflect.Constructor;
48.31 +import java.io.IOException;
48.32 +import java.io.InputStream;
48.33 +import java.io.ObjectInputStream;
48.34 +import java.io.ObjectStreamClass;
48.35 +import java.io.StreamCorruptedException;
48.36
48.37 import java.net.URL;
48.38 -import java.lang.reflect.Array;
48.39 +
48.40 +import java.security.AccessController;
48.41 +import java.security.PrivilegedAction;
48.42 +
48.43 +import java.util.Enumeration;
48.44 +import java.util.Hashtable;
48.45 +import java.util.Iterator;
48.46 +import java.util.Vector;
48.47 +
48.48 +import sun.awt.AppContext;
48.49
48.50 /**
48.51 * This class provides some general purpose beans control methods.
48.52 */
48.53
48.54 public class Beans {
48.55 + private static final Object DESIGN_TIME = new Object();
48.56 + private static final Object GUI_AVAILABLE = new Object();
48.57
48.58 /**
48.59 * <p>
48.60 @@ -59,12 +74,12 @@
48.61 * @param beanName the name of the bean within the class-loader.
48.62 * For example "sun.beanbox.foobah"
48.63 *
48.64 - * @exception java.lang.ClassNotFoundException if the class of a serialized
48.65 + * @exception ClassNotFoundException if the class of a serialized
48.66 * object could not be found.
48.67 - * @exception java.io.IOException if an I/O error occurs.
48.68 + * @exception IOException if an I/O error occurs.
48.69 */
48.70
48.71 - public static Object instantiate(ClassLoader cls, String beanName) throws java.io.IOException, ClassNotFoundException {
48.72 + public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException {
48.73 return Beans.instantiate(cls, beanName, null, null);
48.74 }
48.75
48.76 @@ -80,12 +95,12 @@
48.77 * For example "sun.beanbox.foobah"
48.78 * @param beanContext The BeanContext in which to nest the new bean
48.79 *
48.80 - * @exception java.lang.ClassNotFoundException if the class of a serialized
48.81 + * @exception ClassNotFoundException if the class of a serialized
48.82 * object could not be found.
48.83 - * @exception java.io.IOException if an I/O error occurs.
48.84 + * @exception IOException if an I/O error occurs.
48.85 */
48.86
48.87 - public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws java.io.IOException, ClassNotFoundException {
48.88 + public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws IOException, ClassNotFoundException {
48.89 return Beans.instantiate(cls, beanName, beanContext, null);
48.90 }
48.91
48.92 @@ -135,19 +150,19 @@
48.93 * @param beanContext The BeanContext in which to nest the new bean
48.94 * @param initializer The AppletInitializer for the new bean
48.95 *
48.96 - * @exception java.lang.ClassNotFoundException if the class of a serialized
48.97 + * @exception ClassNotFoundException if the class of a serialized
48.98 * object could not be found.
48.99 - * @exception java.io.IOException if an I/O error occurs.
48.100 + * @exception IOException if an I/O error occurs.
48.101 */
48.102
48.103 public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext, AppletInitializer initializer)
48.104 - throws java.io.IOException, ClassNotFoundException {
48.105 + throws IOException, ClassNotFoundException {
48.106
48.107 - java.io.InputStream ins;
48.108 - java.io.ObjectInputStream oins = null;
48.109 + InputStream ins;
48.110 + ObjectInputStream oins = null;
48.111 Object result = null;
48.112 boolean serialized = false;
48.113 - java.io.IOException serex = null;
48.114 + IOException serex = null;
48.115
48.116 // If the given classloader is null, we check if an
48.117 // system classloader is available and (if so)
48.118 @@ -166,8 +181,8 @@
48.119 // Try to find a serialized object with this name
48.120 final String serName = beanName.replace('.','/').concat(".ser");
48.121 final ClassLoader loader = cls;
48.122 - ins = (InputStream)java.security.AccessController.doPrivileged
48.123 - (new java.security.PrivilegedAction() {
48.124 + ins = (InputStream)AccessController.doPrivileged
48.125 + (new PrivilegedAction() {
48.126 public Object run() {
48.127 if (loader == null)
48.128 return ClassLoader.getSystemResourceAsStream(serName);
48.129 @@ -185,7 +200,7 @@
48.130 result = oins.readObject();
48.131 serialized = true;
48.132 oins.close();
48.133 - } catch (java.io.IOException ex) {
48.134 + } catch (IOException ex) {
48.135 ins.close();
48.136 // Drop through and try opening the class. But remember
48.137 // the exception in case we can't find the class either.
48.138 @@ -264,8 +279,8 @@
48.139
48.140 final ClassLoader cloader = cls;
48.141 objectUrl = (URL)
48.142 - java.security.AccessController.doPrivileged
48.143 - (new java.security.PrivilegedAction() {
48.144 + AccessController.doPrivileged
48.145 + (new PrivilegedAction() {
48.146 public Object run() {
48.147 if (cloader == null)
48.148 return ClassLoader.getSystemResource
48.149 @@ -377,10 +392,11 @@
48.150 * @return True if we are running in an application construction
48.151 * environment.
48.152 *
48.153 - * @see java.beans.DesignMode
48.154 + * @see DesignMode
48.155 */
48.156 public static boolean isDesignTime() {
48.157 - return designTime;
48.158 + Object value = AppContext.getAppContext().get(DESIGN_TIME);
48.159 + return (value instanceof Boolean) && (Boolean) value;
48.160 }
48.161
48.162 /**
48.163 @@ -393,11 +409,12 @@
48.164 * false in a server environment or if an application is
48.165 * running as part of a batch job.
48.166 *
48.167 - * @see java.beans.Visibility
48.168 + * @see Visibility
48.169 *
48.170 */
48.171 public static boolean isGuiAvailable() {
48.172 - return guiAvailable;
48.173 + Object value = AppContext.getAppContext().get(GUI_AVAILABLE);
48.174 + return (value instanceof Boolean) ? (Boolean) value : !GraphicsEnvironment.isHeadless();
48.175 }
48.176
48.177 /**
48.178 @@ -423,7 +440,7 @@
48.179 if (sm != null) {
48.180 sm.checkPropertiesAccess();
48.181 }
48.182 - designTime = isDesignTime;
48.183 + AppContext.getAppContext().put(DESIGN_TIME, Boolean.valueOf(isDesignTime));
48.184 }
48.185
48.186 /**
48.187 @@ -449,14 +466,7 @@
48.188 if (sm != null) {
48.189 sm.checkPropertiesAccess();
48.190 }
48.191 - guiAvailable = isGuiAvailable;
48.192 - }
48.193 -
48.194 -
48.195 - private static boolean designTime;
48.196 - private static boolean guiAvailable;
48.197 - static {
48.198 - guiAvailable = !GraphicsEnvironment.isHeadless();
48.199 + AppContext.getAppContext().put(GUI_AVAILABLE, Boolean.valueOf(isGuiAvailable));
48.200 }
48.201 }
48.202
48.203 @@ -501,7 +511,7 @@
48.204
48.205 class BeansAppletContext implements AppletContext {
48.206 Applet target;
48.207 - java.util.Hashtable imageCache = new java.util.Hashtable();
48.208 + Hashtable imageCache = new Hashtable();
48.209
48.210 BeansAppletContext(Applet target) {
48.211 this.target = target;
48.212 @@ -546,8 +556,8 @@
48.213 return null;
48.214 }
48.215
48.216 - public java.util.Enumeration getApplets() {
48.217 - java.util.Vector applets = new java.util.Vector();
48.218 + public Enumeration getApplets() {
48.219 + Vector applets = new Vector();
48.220 applets.addElement(target);
48.221 return applets.elements();
48.222 }
48.223 @@ -573,7 +583,7 @@
48.224 return null;
48.225 }
48.226
48.227 - public java.util.Iterator getStreamKeys(){
48.228 + public Iterator getStreamKeys(){
48.229 // We do nothing.
48.230 return null;
48.231 }
49.1 --- a/src/share/classes/java/beans/IndexedPropertyChangeEvent.java Thu Apr 16 17:42:00 2009 +0100
49.2 +++ b/src/share/classes/java/beans/IndexedPropertyChangeEvent.java Thu Apr 16 19:10:32 2009 -0700
49.3 @@ -1,5 +1,5 @@
49.4 /*
49.5 - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
49.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
49.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
49.8 *
49.9 * This code is free software; you can redistribute it and/or modify it
49.10 @@ -41,6 +41,7 @@
49.11 * @author Mark Davidson
49.12 */
49.13 public class IndexedPropertyChangeEvent extends PropertyChangeEvent {
49.14 + private static final long serialVersionUID = -320227448495806870L;
49.15
49.16 private int index;
49.17
50.1 --- a/src/share/classes/java/beans/IntrospectionException.java Thu Apr 16 17:42:00 2009 +0100
50.2 +++ b/src/share/classes/java/beans/IntrospectionException.java Thu Apr 16 19:10:32 2009 -0700
50.3 @@ -1,5 +1,5 @@
50.4 /*
50.5 - * Copyright 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
50.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
50.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
50.8 *
50.9 * This code is free software; you can redistribute it and/or modify it
50.10 @@ -36,6 +36,7 @@
50.11
50.12 public
50.13 class IntrospectionException extends Exception {
50.14 + private static final long serialVersionUID = -3728150539969542619L;
50.15
50.16 /**
50.17 * Constructs an <code>IntrospectionException</code> with a
51.1 --- a/src/share/classes/java/beans/PropertyChangeEvent.java Thu Apr 16 17:42:00 2009 +0100
51.2 +++ b/src/share/classes/java/beans/PropertyChangeEvent.java Thu Apr 16 19:10:32 2009 -0700
51.3 @@ -1,5 +1,5 @@
51.4 /*
51.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
51.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
51.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
51.8 *
51.9 * This code is free software; you can redistribute it and/or modify it
51.10 @@ -44,6 +44,7 @@
51.11 */
51.12
51.13 public class PropertyChangeEvent extends java.util.EventObject {
51.14 + private static final long serialVersionUID = 7042693688939648123L;
51.15
51.16 /**
51.17 * Constructs a new <code>PropertyChangeEvent</code>.
52.1 --- a/src/share/classes/java/beans/PropertyVetoException.java Thu Apr 16 17:42:00 2009 +0100
52.2 +++ b/src/share/classes/java/beans/PropertyVetoException.java Thu Apr 16 19:10:32 2009 -0700
52.3 @@ -1,5 +1,5 @@
52.4 /*
52.5 - * Copyright 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
52.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
52.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
52.8 *
52.9 * This code is free software; you can redistribute it and/or modify it
52.10 @@ -33,7 +33,7 @@
52.11
52.12 public
52.13 class PropertyVetoException extends Exception {
52.14 -
52.15 + private static final long serialVersionUID = 129596057694162164L;
52.16
52.17 /**
52.18 * Constructs a <code>PropertyVetoException</code> with a
53.1 --- a/src/share/classes/java/beans/beancontext/BeanContextEvent.java Thu Apr 16 17:42:00 2009 +0100
53.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextEvent.java Thu Apr 16 19:10:32 2009 -0700
53.3 @@ -1,5 +1,5 @@
53.4 /*
53.5 - * Copyright 1997-2003 Sun Microsystems, Inc. All Rights Reserved.
53.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
53.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
53.8 *
53.9 * This code is free software; you can redistribute it and/or modify it
53.10 @@ -48,6 +48,7 @@
53.11 */
53.12
53.13 public abstract class BeanContextEvent extends EventObject {
53.14 + private static final long serialVersionUID = 7267998073569045052L;
53.15
53.16 /**
53.17 * Contruct a BeanContextEvent
54.1 --- a/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java Thu Apr 16 17:42:00 2009 +0100
54.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java Thu Apr 16 19:10:32 2009 -0700
54.3 @@ -1,5 +1,5 @@
54.4 /*
54.5 - * Copyright 1997-2004 Sun Microsystems, Inc. All Rights Reserved.
54.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
54.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
54.8 *
54.9 * This code is free software; you can redistribute it and/or modify it
54.10 @@ -55,6 +55,7 @@
54.11 * @see java.beans.beancontext.BeanContextMembershipListener
54.12 */
54.13 public class BeanContextMembershipEvent extends BeanContextEvent {
54.14 + private static final long serialVersionUID = 3499346510334590959L;
54.15
54.16 /**
54.17 * Contruct a BeanContextMembershipEvent
55.1 --- a/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java Thu Apr 16 17:42:00 2009 +0100
55.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java Thu Apr 16 19:10:32 2009 -0700
55.3 @@ -1,5 +1,5 @@
55.4 /*
55.5 - * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved.
55.6 + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
55.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
55.8 *
55.9 * This code is free software; you can redistribute it and/or modify it
55.10 @@ -40,6 +40,7 @@
55.11 */
55.12
55.13 public class BeanContextServiceAvailableEvent extends BeanContextEvent {
55.14 + private static final long serialVersionUID = -5333985775656400778L;
55.15
55.16 /**
55.17 * Construct a <code>BeanContextAvailableServiceEvent</code>.
56.1 --- a/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java Thu Apr 16 17:42:00 2009 +0100
56.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java Thu Apr 16 19:10:32 2009 -0700
56.3 @@ -1,5 +1,5 @@
56.4 /*
56.5 - * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved.
56.6 + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
56.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
56.8 *
56.9 * This code is free software; you can redistribute it and/or modify it
56.10 @@ -37,6 +37,7 @@
56.11 * </p>
56.12 */
56.13 public class BeanContextServiceRevokedEvent extends BeanContextEvent {
56.14 + private static final long serialVersionUID = -1295543154724961754L;
56.15
56.16 /**
56.17 * Construct a <code>BeanContextServiceEvent</code>.
57.1 --- a/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java Thu Apr 16 17:42:00 2009 +0100
57.2 +++ b/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java Thu Apr 16 19:10:32 2009 -0700
57.3 @@ -1,5 +1,5 @@
57.4 /*
57.5 - * Copyright 1998-2006 Sun Microsystems, Inc. All Rights Reserved.
57.6 + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
57.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
57.8 *
57.9 * This code is free software; you can redistribute it and/or modify it
57.10 @@ -60,6 +60,7 @@
57.11
57.12 public class BeanContextServicesSupport extends BeanContextSupport
57.13 implements BeanContextServices {
57.14 + private static final long serialVersionUID = -8494482757288719206L;
57.15
57.16 /**
57.17 * <p>
57.18 @@ -594,6 +595,7 @@
57.19 */
57.20
57.21 protected static class BCSSServiceProvider implements Serializable {
57.22 + private static final long serialVersionUID = 861278251667444782L;
57.23
57.24 BCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) {
57.25 super();
58.1 --- a/src/share/classes/java/lang/Character.java Thu Apr 16 17:42:00 2009 +0100
58.2 +++ b/src/share/classes/java/lang/Character.java Thu Apr 16 19:10:32 2009 -0700
58.3 @@ -1,5 +1,5 @@
58.4 /*
58.5 - * Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved.
58.6 + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
58.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
58.8 *
58.9 * This code is free software; you can redistribute it and/or modify it
58.10 @@ -920,9 +920,9 @@
58.11 */
58.12 public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS =
58.13 new UnicodeBlock("COMBINING_MARKS_FOR_SYMBOLS", new String[] {"Combining Diacritical Marks for Symbols",
58.14 - "CombiningDiacriticalMarksforSymbols",
58.15 - "Combining Marks for Symbols",
58.16 - "CombiningMarksforSymbols" });
58.17 + "CombiningDiacriticalMarksforSymbols",
58.18 + "Combining Marks for Symbols",
58.19 + "CombiningMarksforSymbols" });
58.20
58.21 /**
58.22 * Constant for the "Letterlike Symbols" Unicode character block.
58.23 @@ -1332,8 +1332,11 @@
58.24 * @since 1.5
58.25 */
58.26 public static final UnicodeBlock CYRILLIC_SUPPLEMENTARY =
58.27 - new UnicodeBlock("CYRILLIC_SUPPLEMENTARY", new String[] {"Cyrillic Supplementary",
58.28 - "CyrillicSupplementary"});
58.29 + new UnicodeBlock("CYRILLIC_SUPPLEMENTARY",
58.30 + new String[] {"Cyrillic Supplementary",
58.31 + "CyrillicSupplementary",
58.32 + "Cyrillic Supplement",
58.33 + "CyrillicSupplement"});
58.34
58.35 /**
58.36 * Constant for the "Tagalog" Unicode character block.
58.37 @@ -1641,157 +1644,579 @@
58.38 public static final UnicodeBlock LOW_SURROGATES =
58.39 new UnicodeBlock("LOW_SURROGATES", new String[] {"Low Surrogates", "LowSurrogates"});
58.40
58.41 + /**
58.42 + * Constant for the "Arabic Supplement" Unicode character block.
58.43 + * @since 1.7
58.44 + */
58.45 + public static final UnicodeBlock ARABIC_SUPPLEMENT =
58.46 + new UnicodeBlock("ARABIC_SUPPLEMENT",
58.47 + new String[] { "Arabic Supplement",
58.48 + "ArabicSupplement"});
58.49 +
58.50 + /**
58.51 + * Constant for the "NKo" Unicode character block.
58.52 + * @since 1.7
58.53 + */
58.54 + public static final UnicodeBlock NKO = new UnicodeBlock("NKO");
58.55 +
58.56 + /**
58.57 + * Constant for the "Ethiopic Supplement" Unicode character block.
58.58 + * @since 1.7
58.59 + */
58.60 + public static final UnicodeBlock ETHIOPIC_SUPPLEMENT =
58.61 + new UnicodeBlock("ETHIOPIC_SUPPLEMENT",
58.62 + new String[] { "Ethiopic Supplement",
58.63 + "EthiopicSupplement"});
58.64 +
58.65 + /**
58.66 + * Constant for the "New Tai Lue" Unicode character block.
58.67 + * @since 1.7
58.68 + */
58.69 + public static final UnicodeBlock NEW_TAI_LUE =
58.70 + new UnicodeBlock("NEW_TAI_LUE",
58.71 + new String[] { "New Tai Lue",
58.72 + "NewTaiLue"});
58.73 +
58.74 + /**
58.75 + * Constant for the "Buginese" Unicode character block.
58.76 + * @since 1.7
58.77 + */
58.78 + public static final UnicodeBlock BUGINESE =
58.79 + new UnicodeBlock("BUGINESE");
58.80 +
58.81 + /**
58.82 + * Constant for the "Balinese" Unicode character block.
58.83 + * @since 1.7
58.84 + */
58.85 + public static final UnicodeBlock BALINESE =
58.86 + new UnicodeBlock("BALINESE");
58.87 +
58.88 + /**
58.89 + * Constant for the "Sundanese" Unicode character block.
58.90 + * @since 1.7
58.91 + */
58.92 + public static final UnicodeBlock SUNDANESE =
58.93 + new UnicodeBlock("SUNDANESE");
58.94 +
58.95 + /**
58.96 + * Constant for the "Lepcha" Unicode character block.
58.97 + * @since 1.7
58.98 + */
58.99 + public static final UnicodeBlock LEPCHA = new UnicodeBlock("LEPCHA");
58.100 +
58.101 + /**
58.102 + * Constant for the "Ol Chiki" Unicode character block.
58.103 + * @since 1.7
58.104 + */
58.105 + public static final UnicodeBlock OL_CHIKI =
58.106 + new UnicodeBlock("OL_CHIKI",
58.107 + new String[] { "Ol Chiki",
58.108 + "OlChiki"});
58.109 +
58.110 + /**
58.111 + * Constant for the "Phonetic Extensions Supplement" Unicode character
58.112 + * block.
58.113 + * @since 1.7
58.114 + */
58.115 + public static final UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT =
58.116 + new UnicodeBlock("PHONETIC_EXTENSIONS_SUPPLEMENT",
58.117 + new String[] { "Phonetic Extensions Supplement",
58.118 + "PhoneticExtensionsSupplement"});
58.119 +
58.120 + /**
58.121 + * Constant for the "Combining Diacritical Marks Supplement" Unicode
58.122 + * character block.
58.123 + * @since 1.7
58.124 + */
58.125 + public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT =
58.126 + new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_SUPPLEMENT",
58.127 + new String[] { "Combining Diacritical Marks Supplement",
58.128 + "CombiningDiacriticalMarksSupplement"});
58.129 +
58.130 + /**
58.131 + * Constant for the "Glagolitic" Unicode character block.
58.132 + * @since 1.7
58.133 + */
58.134 + public static final UnicodeBlock GLAGOLITIC =
58.135 + new UnicodeBlock("GLAGOLITIC");
58.136 +
58.137 + /**
58.138 + * Constant for the "Latin Extended-C" Unicode character block.
58.139 + * @since 1.7
58.140 + */
58.141 + public static final UnicodeBlock LATIN_EXTENDED_C =
58.142 + new UnicodeBlock("LATIN_EXTENDED_C",
58.143 + new String[] { "Latin Extended-C",
58.144 + "LatinExtended-C"});
58.145 +
58.146 + /**
58.147 + * Constant for the "Coptic" Unicode character block.
58.148 + * @since 1.7
58.149 + */
58.150 + public static final UnicodeBlock COPTIC = new UnicodeBlock("COPTIC");
58.151 +
58.152 + /**
58.153 + * Constant for the "Georgian Supplement" Unicode character block.
58.154 + * @since 1.7
58.155 + */
58.156 + public static final UnicodeBlock GEORGIAN_SUPPLEMENT =
58.157 + new UnicodeBlock("GEORGIAN_SUPPLEMENT",
58.158 + new String[] { "Georgian Supplement",
58.159 + "GeorgianSupplement"});
58.160 +
58.161 + /**
58.162 + * Constant for the "Tifinagh" Unicode character block.
58.163 + * @since 1.7
58.164 + */
58.165 + public static final UnicodeBlock TIFINAGH =
58.166 + new UnicodeBlock("TIFINAGH");
58.167 +
58.168 + /**
58.169 + * Constant for the "Ethiopic Extended" Unicode character block.
58.170 + * @since 1.7
58.171 + */
58.172 + public static final UnicodeBlock ETHIOPIC_EXTENDED =
58.173 + new UnicodeBlock("ETHIOPIC_EXTENDED",
58.174 + new String[] { "Ethiopic Extended",
58.175 + "EthiopicExtended"});
58.176 +
58.177 + /**
58.178 + * Constant for the "Cyrillic Extended-A" Unicode character block.
58.179 + * @since 1.7
58.180 + */
58.181 + public static final UnicodeBlock CYRILLIC_EXTENDED_A =
58.182 + new UnicodeBlock("CYRILLIC_EXTENDED_A",
58.183 + new String[] { "Cyrillic Extended-A",
58.184 + "CyrillicExtended-A"});
58.185 +
58.186 + /**
58.187 + * Constant for the "Supplemental Punctuation" Unicode character block.
58.188 + * @since 1.7
58.189 + */
58.190 + public static final UnicodeBlock SUPPLEMENTAL_PUNCTUATION =
58.191 + new UnicodeBlock("SUPPLEMENTAL_PUNCTUATION",
58.192 + new String[] { "Supplemental Punctuation",
58.193 + "SupplementalPunctuation"});
58.194 +
58.195 + /**
58.196 + * Constant for the "CJK Strokes" Unicode character block.
58.197 + * @since 1.7
58.198 + */
58.199 + public static final UnicodeBlock CJK_STROKES =
58.200 + new UnicodeBlock("CJK_STROKES",
58.201 + new String[] { "CJK Strokes",
58.202 + "CJKStrokes"});
58.203 +
58.204 + /**
58.205 + * Constant for the "Vai" Unicode character block.
58.206 + * @since 1.7
58.207 + */
58.208 + public static final UnicodeBlock VAI = new UnicodeBlock("VAI");
58.209 +
58.210 + /**
58.211 + * Constant for the "Cyrillic Extended-B" Unicode character block.
58.212 + * @since 1.7
58.213 + */
58.214 + public static final UnicodeBlock CYRILLIC_EXTENDED_B =
58.215 + new UnicodeBlock("CYRILLIC_EXTENDED_B",
58.216 + new String[] { "Cyrillic Extended-B",
58.217 + "CyrillicExtended-B"});
58.218 +
58.219 + /**
58.220 + * Constant for the "Modifier Tone Letters" Unicode character block.
58.221 + * @since 1.7
58.222 + */
58.223 + public static final UnicodeBlock MODIFIER_TONE_LETTERS =
58.224 + new UnicodeBlock("MODIFIER_TONE_LETTERS",
58.225 + new String[] { "Modifier Tone Letters",
58.226 + "ModifierToneLetters"});
58.227 +
58.228 + /**
58.229 + * Constant for the "Latin Extended-D" Unicode character block.
58.230 + * @since 1.7
58.231 + */
58.232 + public static final UnicodeBlock LATIN_EXTENDED_D =
58.233 + new UnicodeBlock("LATIN_EXTENDED_D",
58.234 + new String[] { "Latin Extended-D",
58.235 + "LatinExtended-D"});
58.236 +
58.237 + /**
58.238 + * Constant for the "Syloti Nagri" Unicode character block.
58.239 + * @since 1.7
58.240 + */
58.241 + public static final UnicodeBlock SYLOTI_NAGRI =
58.242 + new UnicodeBlock("SYLOTI_NAGRI",
58.243 + new String[] { "Syloti Nagri",
58.244 + "SylotiNagri"});
58.245 +
58.246 + /**
58.247 + * Constant for the "Phags-pa" Unicode character block.
58.248 + * @since 1.7
58.249 + */
58.250 + public static final UnicodeBlock PHAGS_PA =
58.251 + new UnicodeBlock("PHAGS_PA", new String[] { "Phags-pa"});
58.252 +
58.253 + /**
58.254 + * Constant for the "Saurashtra" Unicode character block.
58.255 + * @since 1.7
58.256 + */
58.257 + public static final UnicodeBlock SAURASHTRA =
58.258 + new UnicodeBlock("SAURASHTRA");
58.259 +
58.260 + /**
58.261 + * Constant for the "Kayah Li" Unicode character block.
58.262 + * @since 1.7
58.263 + */
58.264 + public static final UnicodeBlock KAYAH_LI =
58.265 + new UnicodeBlock("KAYAH_LI",
58.266 + new String[] { "Kayah Li",
58.267 + "KayahLi"});
58.268 +
58.269 + /**
58.270 + * Constant for the "Rejang" Unicode character block.
58.271 + * @since 1.7
58.272 + */
58.273 + public static final UnicodeBlock REJANG = new UnicodeBlock("REJANG");
58.274 +
58.275 + /**
58.276 + * Constant for the "Cham" Unicode character block.
58.277 + * @since 1.7
58.278 + */
58.279 + public static final UnicodeBlock CHAM = new UnicodeBlock("CHAM");
58.280 +
58.281 + /**
58.282 + * Constant for the "Vertical Forms" Unicode character block.
58.283 + * @since 1.7
58.284 + */
58.285 + public static final UnicodeBlock VERTICAL_FORMS =
58.286 + new UnicodeBlock("VERTICAL_FORMS",
58.287 + new String[] { "Vertical Forms",
58.288 + "VerticalForms"});
58.289 +
58.290 + /**
58.291 + * Constant for the "Ancient Greek Numbers" Unicode character block.
58.292 + * @since 1.7
58.293 + */
58.294 + public static final UnicodeBlock ANCIENT_GREEK_NUMBERS =
58.295 + new UnicodeBlock("ANCIENT_GREEK_NUMBERS",
58.296 + new String[] { "Ancient Greek Numbers",
58.297 + "AncientGreekNumbers"});
58.298 +
58.299 + /**
58.300 + * Constant for the "Ancient Symbols" Unicode character block.
58.301 + * @since 1.7
58.302 + */
58.303 + public static final UnicodeBlock ANCIENT_SYMBOLS =
58.304 + new UnicodeBlock("ANCIENT_SYMBOLS",
58.305 + new String[] { "Ancient Symbols",
58.306 + "AncientSymbols"});
58.307 +
58.308 + /**
58.309 + * Constant for the "Phaistos Disc" Unicode character block.
58.310 + * @since 1.7
58.311 + */
58.312 + public static final UnicodeBlock PHAISTOS_DISC =
58.313 + new UnicodeBlock("PHAISTOS_DISC",
58.314 + new String[] { "Phaistos Disc",
58.315 + "PhaistosDisc"});
58.316 +
58.317 + /**
58.318 + * Constant for the "Lycian" Unicode character block.
58.319 + * @since 1.7
58.320 + */
58.321 + public static final UnicodeBlock LYCIAN = new UnicodeBlock("LYCIAN");
58.322 +
58.323 + /**
58.324 + * Constant for the "Carian" Unicode character block.
58.325 + * @since 1.7
58.326 + */
58.327 + public static final UnicodeBlock CARIAN = new UnicodeBlock("CARIAN");
58.328 +
58.329 + /**
58.330 + * Constant for the "Old Persian" Unicode character block.
58.331 + * @since 1.7
58.332 + */
58.333 + public static final UnicodeBlock OLD_PERSIAN =
58.334 + new UnicodeBlock("OLD_PERSIAN",
58.335 + new String[] { "Old Persian",
58.336 + "OldPersian"});
58.337 +
58.338 + /**
58.339 + * Constant for the "Phoenician" Unicode character block.
58.340 + * @since 1.7
58.341 + */
58.342 + public static final UnicodeBlock PHOENICIAN =
58.343 + new UnicodeBlock("PHOENICIAN");
58.344 +
58.345 + /**
58.346 + * Constant for the "Lydian" Unicode character block.
58.347 + * @since 1.7
58.348 + */
58.349 + public static final UnicodeBlock LYDIAN = new UnicodeBlock("LYDIAN");
58.350 +
58.351 + /**
58.352 + * Constant for the "Kharoshthi" Unicode character block.
58.353 + * @since 1.7
58.354 + */
58.355 + public static final UnicodeBlock KHAROSHTHI =
58.356 + new UnicodeBlock("KHAROSHTHI");
58.357 +
58.358 + /**
58.359 + * Constant for the "Cuneiform" Unicode character block.
58.360 + * @since 1.7
58.361 + */
58.362 + public static final UnicodeBlock CUNEIFORM =
58.363 + new UnicodeBlock("CUNEIFORM");
58.364 +
58.365 + /**
58.366 + * Constant for the "Cuneiform Numbers and Punctuation" Unicode
58.367 + * character block.
58.368 + * @since 1.7
58.369 + */
58.370 + public static final UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION =
58.371 + new UnicodeBlock("CUNEIFORM_NUMBERS_AND_PUNCTUATION",
58.372 + new String[] { "Cuneiform Numbers and Punctuation",
58.373 + "CuneiformNumbersandPunctuation"});
58.374 +
58.375 + /**
58.376 + * Constant for the "Ancient Greek Musical Notation" Unicode character
58.377 + * block.
58.378 + * @since 1.7
58.379 + */
58.380 + public static final UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION =
58.381 + new UnicodeBlock("ANCIENT_GREEK_MUSICAL_NOTATION",
58.382 + new String[] { "Ancient Greek Musical Notation",
58.383 + "AncientGreekMusicalNotation"});
58.384 +
58.385 + /**
58.386 + * Constant for the "Counting Rod Numerals" Unicode character block.
58.387 + * @since 1.7
58.388 + */
58.389 + public static final UnicodeBlock COUNTING_ROD_NUMERALS =
58.390 + new UnicodeBlock("COUNTING_ROD_NUMERALS",
58.391 + new String[] { "Counting Rod Numerals",
58.392 + "CountingRodNumerals"});
58.393 +
58.394 + /**
58.395 + * Constant for the "Mahjong Tiles" Unicode character block.
58.396 + * @since 1.7
58.397 + */
58.398 + public static final UnicodeBlock MAHJONG_TILES =
58.399 + new UnicodeBlock("MAHJONG_TILES",
58.400 + new String[] { "Mahjong Tiles",
58.401 + "MahjongTiles"});
58.402 +
58.403 + /**
58.404 + * Constant for the "Domino Tiles" Unicode character block.
58.405 + * @since 1.7
58.406 + */
58.407 + public static final UnicodeBlock DOMINO_TILES =
58.408 + new UnicodeBlock("DOMINO_TILES",
58.409 + new String[] { "Domino Tiles",
58.410 + "DominoTiles"});
58.411 +
58.412 private static final int blockStarts[] = {
58.413 - 0x0000, // Basic Latin
58.414 - 0x0080, // Latin-1 Supplement
58.415 - 0x0100, // Latin Extended-A
58.416 - 0x0180, // Latin Extended-B
58.417 - 0x0250, // IPA Extensions
58.418 - 0x02B0, // Spacing Modifier Letters
58.419 - 0x0300, // Combining Diacritical Marks
58.420 - 0x0370, // Greek and Coptic
58.421 - 0x0400, // Cyrillic
58.422 - 0x0500, // Cyrillic Supplementary
58.423 - 0x0530, // Armenian
58.424 - 0x0590, // Hebrew
58.425 - 0x0600, // Arabic
58.426 - 0x0700, // Syriac
58.427 - 0x0750, // unassigned
58.428 - 0x0780, // Thaana
58.429 - 0x07C0, // unassigned
58.430 - 0x0900, // Devanagari
58.431 - 0x0980, // Bengali
58.432 - 0x0A00, // Gurmukhi
58.433 - 0x0A80, // Gujarati
58.434 - 0x0B00, // Oriya
58.435 - 0x0B80, // Tamil
58.436 - 0x0C00, // Telugu
58.437 - 0x0C80, // Kannada
58.438 - 0x0D00, // Malayalam
58.439 - 0x0D80, // Sinhala
58.440 - 0x0E00, // Thai
58.441 - 0x0E80, // Lao
58.442 - 0x0F00, // Tibetan
58.443 - 0x1000, // Myanmar
58.444 - 0x10A0, // Georgian
58.445 - 0x1100, // Hangul Jamo
58.446 - 0x1200, // Ethiopic
58.447 - 0x1380, // unassigned
58.448 - 0x13A0, // Cherokee
58.449 - 0x1400, // Unified Canadian Aboriginal Syllabics
58.450 - 0x1680, // Ogham
58.451 - 0x16A0, // Runic
58.452 - 0x1700, // Tagalog
58.453 - 0x1720, // Hanunoo
58.454 - 0x1740, // Buhid
58.455 - 0x1760, // Tagbanwa
58.456 - 0x1780, // Khmer
58.457 - 0x1800, // Mongolian
58.458 - 0x18B0, // unassigned
58.459 - 0x1900, // Limbu
58.460 - 0x1950, // Tai Le
58.461 - 0x1980, // unassigned
58.462 - 0x19E0, // Khmer Symbols
58.463 - 0x1A00, // unassigned
58.464 - 0x1D00, // Phonetic Extensions
58.465 - 0x1D80, // unassigned
58.466 - 0x1E00, // Latin Extended Additional
58.467 - 0x1F00, // Greek Extended
58.468 - 0x2000, // General Punctuation
58.469 - 0x2070, // Superscripts and Subscripts
58.470 - 0x20A0, // Currency Symbols
58.471 - 0x20D0, // Combining Diacritical Marks for Symbols
58.472 - 0x2100, // Letterlike Symbols
58.473 - 0x2150, // Number Forms
58.474 - 0x2190, // Arrows
58.475 - 0x2200, // Mathematical Operators
58.476 - 0x2300, // Miscellaneous Technical
58.477 - 0x2400, // Control Pictures
58.478 - 0x2440, // Optical Character Recognition
58.479 - 0x2460, // Enclosed Alphanumerics
58.480 - 0x2500, // Box Drawing
58.481 - 0x2580, // Block Elements
58.482 - 0x25A0, // Geometric Shapes
58.483 - 0x2600, // Miscellaneous Symbols
58.484 - 0x2700, // Dingbats
58.485 - 0x27C0, // Miscellaneous Mathematical Symbols-A
58.486 - 0x27F0, // Supplemental Arrows-A
58.487 - 0x2800, // Braille Patterns
58.488 - 0x2900, // Supplemental Arrows-B
58.489 - 0x2980, // Miscellaneous Mathematical Symbols-B
58.490 - 0x2A00, // Supplemental Mathematical Operators
58.491 - 0x2B00, // Miscellaneous Symbols and Arrows
58.492 - 0x2C00, // unassigned
58.493 - 0x2E80, // CJK Radicals Supplement
58.494 - 0x2F00, // Kangxi Radicals
58.495 - 0x2FE0, // unassigned
58.496 - 0x2FF0, // Ideographic Description Characters
58.497 - 0x3000, // CJK Symbols and Punctuation
58.498 - 0x3040, // Hiragana
58.499 - 0x30A0, // Katakana
58.500 - 0x3100, // Bopomofo
58.501 - 0x3130, // Hangul Compatibility Jamo
58.502 - 0x3190, // Kanbun
58.503 - 0x31A0, // Bopomofo Extended
58.504 - 0x31C0, // unassigned
58.505 - 0x31F0, // Katakana Phonetic Extensions
58.506 - 0x3200, // Enclosed CJK Letters and Months
58.507 - 0x3300, // CJK Compatibility
58.508 - 0x3400, // CJK Unified Ideographs Extension A
58.509 - 0x4DC0, // Yijing Hexagram Symbols
58.510 - 0x4E00, // CJK Unified Ideographs
58.511 - 0xA000, // Yi Syllables
58.512 - 0xA490, // Yi Radicals
58.513 - 0xA4D0, // unassigned
58.514 - 0xAC00, // Hangul Syllables
58.515 - 0xD7B0, // unassigned
58.516 - 0xD800, // High Surrogates
58.517 - 0xDB80, // High Private Use Surrogates
58.518 - 0xDC00, // Low Surrogates
58.519 - 0xE000, // Private Use
58.520 - 0xF900, // CJK Compatibility Ideographs
58.521 - 0xFB00, // Alphabetic Presentation Forms
58.522 - 0xFB50, // Arabic Presentation Forms-A
58.523 - 0xFE00, // Variation Selectors
58.524 - 0xFE10, // unassigned
58.525 - 0xFE20, // Combining Half Marks
58.526 - 0xFE30, // CJK Compatibility Forms
58.527 - 0xFE50, // Small Form Variants
58.528 - 0xFE70, // Arabic Presentation Forms-B
58.529 - 0xFF00, // Halfwidth and Fullwidth Forms
58.530 - 0xFFF0, // Specials
58.531 - 0x10000, // Linear B Syllabary
58.532 - 0x10080, // Linear B Ideograms
58.533 - 0x10100, // Aegean Numbers
58.534 - 0x10140, // unassigned
58.535 - 0x10300, // Old Italic
58.536 - 0x10330, // Gothic
58.537 - 0x10350, // unassigned
58.538 - 0x10380, // Ugaritic
58.539 - 0x103A0, // unassigned
58.540 - 0x10400, // Deseret
58.541 - 0x10450, // Shavian
58.542 - 0x10480, // Osmanya
58.543 - 0x104B0, // unassigned
58.544 - 0x10800, // Cypriot Syllabary
58.545 - 0x10840, // unassigned
58.546 - 0x1D000, // Byzantine Musical Symbols
58.547 - 0x1D100, // Musical Symbols
58.548 - 0x1D200, // unassigned
58.549 - 0x1D300, // Tai Xuan Jing Symbols
58.550 - 0x1D360, // unassigned
58.551 - 0x1D400, // Mathematical Alphanumeric Symbols
58.552 - 0x1D800, // unassigned
58.553 - 0x20000, // CJK Unified Ideographs Extension B
58.554 - 0x2A6E0, // unassigned
58.555 - 0x2F800, // CJK Compatibility Ideographs Supplement
58.556 - 0x2FA20, // unassigned
58.557 - 0xE0000, // Tags
58.558 - 0xE0080, // unassigned
58.559 - 0xE0100, // Variation Selectors Supplement
58.560 - 0xE01F0, // unassigned
58.561 - 0xF0000, // Supplementary Private Use Area-A
58.562 - 0x100000, // Supplementary Private Use Area-B
58.563 + 0x0000, // 0000..007F; Basic Latin
58.564 + 0x0080, // 0080..00FF; Latin-1 Supplement
58.565 + 0x0100, // 0100..017F; Latin Extended-A
58.566 + 0x0180, // 0180..024F; Latin Extended-B
58.567 + 0x0250, // 0250..02AF; IPA Extensions
58.568 + 0x02B0, // 02B0..02FF; Spacing Modifier Letters
58.569 + 0x0300, // 0300..036F; Combining Diacritical Marks
58.570 + 0x0370, // 0370..03FF; Greek and Coptic
58.571 + 0x0400, // 0400..04FF; Cyrillic
58.572 + 0x0500, // 0500..052F; Cyrillic Supplement
58.573 + 0x0530, // 0530..058F; Armenian
58.574 + 0x0590, // 0590..05FF; Hebrew
58.575 + 0x0600, // 0600..06FF; Arabic
58.576 + 0x0700, // 0700..074F; Syria
58.577 + 0x0750, // 0750..077F; Arabic Supplement
58.578 + 0x0780, // 0780..07BF; Thaana
58.579 + 0x07C0, // 07C0..07FF; NKo
58.580 + 0x0800, // unassigned
58.581 + 0x0900, // 0900..097F; Devanagari
58.582 + 0x0980, // 0980..09FF; Bengali
58.583 + 0x0A00, // 0A00..0A7F; Gurmukhi
58.584 + 0x0A80, // 0A80..0AFF; Gujarati
58.585 + 0x0B00, // 0B00..0B7F; Oriya
58.586 + 0x0B80, // 0B80..0BFF; Tamil
58.587 + 0x0C00, // 0C00..0C7F; Telugu
58.588 + 0x0C80, // 0C80..0CFF; Kannada
58.589 + 0x0D00, // 0D00..0D7F; Malayalam
58.590 + 0x0D80, // 0D80..0DFF; Sinhala
58.591 + 0x0E00, // 0E00..0E7F; Thai
58.592 + 0x0E80, // 0E80..0EFF; Lao
58.593 + 0x0F00, // 0F00..0FFF; Tibetan
58.594 + 0x1000, // 1000..109F; Myanmar
58.595 + 0x10A0, // 10A0..10FF; Georgian
58.596 + 0x1100, // 1100..11FF; Hangul Jamo
58.597 + 0x1200, // 1200..137F; Ethiopic
58.598 + 0x1380, // 1380..139F; Ethiopic Supplement
58.599 + 0x13A0, // 13A0..13FF; Cherokee
58.600 + 0x1400, // 1400..167F; Unified Canadian Aboriginal Syllabics
58.601 + 0x1680, // 1680..169F; Ogham
58.602 + 0x16A0, // 16A0..16FF; Runic
58.603 + 0x1700, // 1700..171F; Tagalog
58.604 + 0x1720, // 1720..173F; Hanunoo
58.605 + 0x1740, // 1740..175F; Buhid
58.606 + 0x1760, // 1760..177F; Tagbanwa
58.607 + 0x1780, // 1780..17FF; Khmer
58.608 + 0x1800, // 1800..18AF; Mongolian
58.609 + 0x18B0, // unassigned
58.610 + 0x1900, // 1900..194F; Limbu
58.611 + 0x1950, // 1950..197F; Tai Le
58.612 + 0x1980, // 1980..19DF; New Tai Lue
58.613 + 0x19E0, // 19E0..19FF; Khmer Symbols
58.614 + 0x1A00, // 1A00..1A1F; Buginese
58.615 + 0x1A20, // unassigned
58.616 + 0x1B00, // 1B00..1B7F; Balinese
58.617 + 0x1B80, // 1B80..1BBF; Sundanese
58.618 + 0x1BC0, // unassigned
58.619 + 0x1C00, // 1C00..1C4F; Lepcha
58.620 + 0x1C50, // 1C50..1C7F; Ol Chiki
58.621 + 0x1C80, // unassigned
58.622 + 0x1D00, // 1D00..1D7F; Phonetic Extensions
58.623 + 0x1D80, // 1D80..1DBF; Phonetic Extensions Supplement
58.624 + 0x1DC0, // 1DC0..1DFF; Combining Diacritical Marks Supplement
58.625 + 0x1E00, // 1E00..1EFF; Latin Extended Additional
58.626 + 0x1F00, // 1F00..1FFF; Greek Extended
58.627 + 0x2000, // 2000..206F; General Punctuation
58.628 + 0x2070, // 2070..209F; Superscripts and Subscripts
58.629 + 0x20A0, // 20A0..20CF; Currency Symbols
58.630 + 0x20D0, // 20D0..20FF; Combining Diacritical Marks for Symbols
58.631 + 0x2100, // 2100..214F; Letterlike Symbols
58.632 + 0x2150, // 2150..218F; Number Forms
58.633 + 0x2190, // 2190..21FF; Arrows
58.634 + 0x2200, // 2200..22FF; Mathematical Operators
58.635 + 0x2300, // 2300..23FF; Miscellaneous Technical
58.636 + 0x2400, // 2400..243F; Control Pictures
58.637 + 0x2440, // 2440..245F; Optical Character Recognition
58.638 + 0x2460, // 2460..24FF; Enclosed Alphanumerics
58.639 + 0x2500, // 2500..257F; Box Drawing
58.640 + 0x2580, // 2580..259F; Block Elements
58.641 + 0x25A0, // 25A0..25FF; Geometric Shapes
58.642 + 0x2600, // 2600..26FF; Miscellaneous Symbols
58.643 + 0x2700, // 2700..27BF; Dingbats
58.644 + 0x27C0, // 27C0..27EF; Miscellaneous Mathematical Symbols-A
58.645 + 0x27F0, // 27F0..27FF; Supplemental Arrows-A
58.646 + 0x2800, // 2800..28FF; Braille Patterns
58.647 + 0x2900, // 2900..297F; Supplemental Arrows-B
58.648 + 0x2980, // 2980..29FF; Miscellaneous Mathematical Symbols-B
58.649 + 0x2A00, // 2A00..2AFF; Supplemental Mathematical Operators
58.650 + 0x2B00, // 2B00..2BFF; Miscellaneous Symbols and Arrows
58.651 + 0x2C00, // 2C00..2C5F; Glagolitic
58.652 + 0x2C60, // 2C60..2C7F; Latin Extended-C
58.653 + 0x2C80, // 2C80..2CFF; Coptic
58.654 + 0x2D00, // 2D00..2D2F; Georgian Supplement
58.655 + 0x2D30, // 2D30..2D7F; Tifinagh
58.656 + 0x2D80, // 2D80..2DDF; Ethiopic Extended
58.657 + 0x2DE0, // 2DE0..2DFF; Cyrillic Extended-A
58.658 + 0x2E00, // 2E00..2E7F; Supplemental Punctuation
58.659 + 0x2E80, // 2E80..2EFF; CJK Radicals Supplement
58.660 + 0x2F00, // 2F00..2FDF; Kangxi Radicals
58.661 + 0x2FE0, // unassigned
58.662 + 0x2FF0, // 2FF0..2FFF; Ideographic Description Characters
58.663 + 0x3000, // 3000..303F; CJK Symbols and Punctuation
58.664 + 0x3040, // 3040..309F; Hiragana
58.665 + 0x30A0, // 30A0..30FF; Katakana
58.666 + 0x3100, // 3100..312F; Bopomofo
58.667 + 0x3130, // 3130..318F; Hangul Compatibility Jamo
58.668 + 0x3190, // 3190..319F; Kanbun
58.669 + 0x31A0, // 31A0..31BF; Bopomofo Extended
58.670 + 0x31C0, // 31C0..31EF; CJK Strokes
58.671 + 0x31F0, // 31F0..31FF; Katakana Phonetic Extensions
58.672 + 0x3200, // 3200..32FF; Enclosed CJK Letters and Months
58.673 + 0x3300, // 3300..33FF; CJK Compatibility
58.674 + 0x3400, // 3400..4DBF; CJK Unified Ideographs Extension A
58.675 + 0x4DC0, // 4DC0..4DFF; Yijing Hexagram Symbols
58.676 + 0x4E00, // 4E00..9FFF; CJK Unified Ideograph
58.677 + 0xA000, // A000..A48F; Yi Syllables
58.678 + 0xA490, // A490..A4CF; Yi Radicals
58.679 + 0xA4D0, // unassigned
58.680 + 0xA500, // A500..A63F; Vai
58.681 + 0xA640, // A640..A69F; Cyrillic Extended-B
58.682 + 0xA6A0, // unassigned
58.683 + 0xA700, // A700..A71F; Modifier Tone Letters
58.684 + 0xA720, // A720..A7FF; Latin Extended-D
58.685 + 0xA800, // A800..A82F; Syloti Nagri
58.686 + 0xA830, // unassigned
58.687 + 0xA840, // A840..A87F; Phags-pa
58.688 + 0xA880, // A880..A8DF; Saurashtra
58.689 + 0xA8E0, // unassigned
58.690 + 0xA900, // A900..A92F; Kayah Li
58.691 + 0xA930, // A930..A95F; Rejang
58.692 + 0xA960, // unassigned
58.693 + 0xAA00, // AA00..AA5F; Cham
58.694 + 0xAA60, // unassigned
58.695 + 0xAC00, // AC00..D7AF; Hangul Syllables
58.696 + 0xD7B0, // unassigned
58.697 + 0xD800, // D800..DB7F; High Surrogates
58.698 + 0xDB80, // DB80..DBFF; High Private Use Surrogates
58.699 + 0xDC00, // DC00..DFFF; Low Surrogates
58.700 + 0xE000, // E000..F8FF; Private Use Area
58.701 + 0xF900, // F900..FAFF; CJK Compatibility Ideographs
58.702 + 0xFB00, // FB00..FB4F; Alphabetic Presentation Forms
58.703 + 0xFB50, // FB50..FDFF; Arabic Presentation Forms-A
58.704 + 0xFE00, // FE00..FE0F; Variation Selectors
58.705 + 0xFE10, // FE10..FE1F; Vertical Forms
58.706 + 0xFE20, // FE20..FE2F; Combining Half Marks
58.707 + 0xFE30, // FE30..FE4F; CJK Compatibility Forms
58.708 + 0xFE50, // FE50..FE6F; Small Form Variants
58.709 + 0xFE70, // FE70..FEFF; Arabic Presentation Forms-B
58.710 + 0xFF00, // FF00..FFEF; Halfwidth and Fullwidth Forms
58.711 + 0xFFF0, // FFF0..FFFF; Specials
58.712 + 0x10000, // 10000..1007F; Linear B Syllabary
58.713 + 0x10080, // 10080..100FF; Linear B Ideograms
58.714 + 0x10100, // 10100..1013F; Aegean Numbers
58.715 + 0x10140, // 10140..1018F; Ancient Greek Numbers
58.716 + 0x10190, // 10190..101CF; Ancient Symbols
58.717 + 0x101D0, // 101D0..101FF; Phaistos Disc
58.718 + 0x10200, // unassigned
58.719 + 0x10280, // 10280..1029F; Lycian
58.720 + 0x102A0, // 102A0..102DF; Carian
58.721 + 0x102E0, // unassigned
58.722 + 0x10300, // 10300..1032F; Old Italic
58.723 + 0x10330, // 10330..1034F; Gothic
58.724 + 0x10350, // unassigned
58.725 + 0x10380, // 10380..1039F; Ugaritic
58.726 + 0x103A0, // 103A0..103DF; Old Persian
58.727 + 0x103E0, // unassigned
58.728 + 0x10400, // 10400..1044F; Desere
58.729 + 0x10450, // 10450..1047F; Shavian
58.730 + 0x10480, // 10480..104AF; Osmanya
58.731 + 0x104B0, // unassigned
58.732 + 0x10800, // 10800..1083F; Cypriot Syllabary
58.733 + 0x10840, // unassigned
58.734 + 0x10900, // 10900..1091F; Phoenician
58.735 + 0x10920, // 10920..1093F; Lydian
58.736 + 0x10940, // unassigned
58.737 + 0x10A00, // 10A00..10A5F; Kharoshthi
58.738 + 0x10A60, // unassigned
58.739 + 0x12000, // 12000..123FF; Cuneiform
58.740 + 0x12400, // 12400..1247F; Cuneiform Numbers and Punctuation
58.741 + 0x12480, // unassigned
58.742 + 0x1D000, // 1D000..1D0FF; Byzantine Musical Symbols
58.743 + 0x1D100, // 1D100..1D1FF; Musical Symbols
58.744 + 0x1D200, // 1D200..1D24F; Ancient Greek Musical Notation
58.745 + 0x1D250, // unassigned
58.746 + 0x1D300, // 1D300..1D35F; Tai Xuan Jing Symbols
58.747 + 0x1D360, // 1D360..1D37F; Counting Rod Numerals
58.748 + 0x1D380, // unassigned
58.749 + 0x1D400, // 1D400..1D7FF; Mathematical Alphanumeric Symbols
58.750 + 0x1D800, // unassigned
58.751 + 0x1F000, // 1F000..1F02F; Mahjong Tiles
58.752 + 0x1F030, // 1F030..1F09F; Domino Tiles
58.753 + 0x1F0A0, // unassigned
58.754 + 0x20000, // 20000..2A6DF; CJK Unified Ideographs Extension B
58.755 + 0x2A6E0, // unassigned
58.756 + 0x2F800, // 2F800..2FA1F; CJK Compatibility Ideographs Supplement
58.757 + 0x2FA20, // unassigned
58.758 + 0xE0000, // E0000..E007F; Tags
58.759 + 0xE0080, // unassigned
58.760 + 0xE0100, // E0100..E01EF; Variation Selectors Supplement
58.761 + 0xE01F0, // unassigned
58.762 + 0xF0000, // F0000..FFFFF; Supplementary Private Use Area-A
58.763 + 0x100000, // 100000..10FFFF; Supplementary Private Use Area-B
58.764 };
58.765
58.766 private static final UnicodeBlock[] blocks = {
58.767 @@ -1809,8 +2234,9 @@
58.768 HEBREW,
58.769 ARABIC,
58.770 SYRIAC,
58.771 - null,
58.772 + ARABIC_SUPPLEMENT,
58.773 THAANA,
58.774 + NKO,
58.775 null,
58.776 DEVANAGARI,
58.777 BENGALI,
58.778 @@ -1829,7 +2255,7 @@
58.779 GEORGIAN,
58.780 HANGUL_JAMO,
58.781 ETHIOPIC,
58.782 - null,
58.783 + ETHIOPIC_SUPPLEMENT,
58.784 CHEROKEE,
58.785 UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS,
58.786 OGHAM,
58.787 @@ -1843,11 +2269,19 @@
58.788 null,
58.789 LIMBU,
58.790 TAI_LE,
58.791 + NEW_TAI_LUE,
58.792 + KHMER_SYMBOLS,
58.793 + BUGINESE,
58.794 null,
58.795 - KHMER_SYMBOLS,
58.796 + BALINESE,
58.797 + SUNDANESE,
58.798 + null,
58.799 + LEPCHA,
58.800 + OL_CHIKI,
58.801 null,
58.802 PHONETIC_EXTENSIONS,
58.803 - null,
58.804 + PHONETIC_EXTENSIONS_SUPPLEMENT,
58.805 + COMBINING_DIACRITICAL_MARKS_SUPPLEMENT,
58.806 LATIN_EXTENDED_ADDITIONAL,
58.807 GREEK_EXTENDED,
58.808 GENERAL_PUNCTUATION,
58.809 @@ -1874,7 +2308,14 @@
58.810 MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B,
58.811 SUPPLEMENTAL_MATHEMATICAL_OPERATORS,
58.812 MISCELLANEOUS_SYMBOLS_AND_ARROWS,
58.813 - null,
58.814 + GLAGOLITIC,
58.815 + LATIN_EXTENDED_C,
58.816 + COPTIC,
58.817 + GEORGIAN_SUPPLEMENT,
58.818 + TIFINAGH,
58.819 + ETHIOPIC_EXTENDED,
58.820 + CYRILLIC_EXTENDED_A,
58.821 + SUPPLEMENTAL_PUNCTUATION,
58.822 CJK_RADICALS_SUPPLEMENT,
58.823 KANGXI_RADICALS,
58.824 null,
58.825 @@ -1886,7 +2327,7 @@
58.826 HANGUL_COMPATIBILITY_JAMO,
58.827 KANBUN,
58.828 BOPOMOFO_EXTENDED,
58.829 - null,
58.830 + CJK_STROKES,
58.831 KATAKANA_PHONETIC_EXTENSIONS,
58.832 ENCLOSED_CJK_LETTERS_AND_MONTHS,
58.833 CJK_COMPATIBILITY,
58.834 @@ -1896,6 +2337,21 @@
58.835 YI_SYLLABLES,
58.836 YI_RADICALS,
58.837 null,
58.838 + VAI,
58.839 + CYRILLIC_EXTENDED_B,
58.840 + null,
58.841 + MODIFIER_TONE_LETTERS,
58.842 + LATIN_EXTENDED_D,
58.843 + SYLOTI_NAGRI,
58.844 + null,
58.845 + PHAGS_PA,
58.846 + SAURASHTRA,
58.847 + null,
58.848 + KAYAH_LI,
58.849 + REJANG,
58.850 + null,
58.851 + CHAM,
58.852 + null,
58.853 HANGUL_SYLLABLES,
58.854 null,
58.855 HIGH_SURROGATES,
58.856 @@ -1906,7 +2362,7 @@
58.857 ALPHABETIC_PRESENTATION_FORMS,
58.858 ARABIC_PRESENTATION_FORMS_A,
58.859 VARIATION_SELECTORS,
58.860 - null,
58.861 + VERTICAL_FORMS,
58.862 COMBINING_HALF_MARKS,
58.863 CJK_COMPATIBILITY_FORMS,
58.864 SMALL_FORM_VARIANTS,
58.865 @@ -1916,11 +2372,18 @@
58.866 LINEAR_B_SYLLABARY,
58.867 LINEAR_B_IDEOGRAMS,
58.868 AEGEAN_NUMBERS,
58.869 + ANCIENT_GREEK_NUMBERS,
58.870 + ANCIENT_SYMBOLS,
58.871 + PHAISTOS_DISC,
58.872 + null,
58.873 + LYCIAN,
58.874 + CARIAN,
58.875 null,
58.876 OLD_ITALIC,
58.877 GOTHIC,
58.878 null,
58.879 UGARITIC,
58.880 + OLD_PERSIAN,
58.881 null,
58.882 DESERET,
58.883 SHAVIAN,
58.884 @@ -1928,13 +2391,26 @@
58.885 null,
58.886 CYPRIOT_SYLLABARY,
58.887 null,
58.888 + PHOENICIAN,
58.889 + LYDIAN,
58.890 + null,
58.891 + KHAROSHTHI,
58.892 + null,
58.893 + CUNEIFORM,
58.894 + CUNEIFORM_NUMBERS_AND_PUNCTUATION,
58.895 + null,
58.896 BYZANTINE_MUSICAL_SYMBOLS,
58.897 MUSICAL_SYMBOLS,
58.898 + ANCIENT_GREEK_MUSICAL_NOTATION,
58.899 null,
58.900 TAI_XUAN_JING_SYMBOLS,
58.901 + COUNTING_ROD_NUMERALS,
58.902 null,
58.903 MATHEMATICAL_ALPHANUMERIC_SYMBOLS,
58.904 null,
58.905 + MAHJONG_TILES,
58.906 + DOMINO_TILES,
58.907 + null,
58.908 CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B,
58.909 null,
58.910 CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT,
59.1 --- a/src/share/classes/java/lang/Class.java Thu Apr 16 17:42:00 2009 +0100
59.2 +++ b/src/share/classes/java/lang/Class.java Thu Apr 16 19:10:32 2009 -0700
59.3 @@ -1,5 +1,5 @@
59.4 /*
59.5 - * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved.
59.6 + * Copyright 1994-2009 Sun Microsystems, Inc. All Rights Reserved.
59.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
59.8 *
59.9 * This code is free software; you can redistribute it and/or modify it
59.10 @@ -2846,14 +2846,14 @@
59.11 if (loader == null)
59.12 return desiredAssertionStatus0(this);
59.13
59.14 - synchronized(loader) {
59.15 - // If the classloader has been initialized with
59.16 - // the assertion directives, ask it. Otherwise,
59.17 - // ask the VM.
59.18 - return (loader.classAssertionStatus == null ?
59.19 - desiredAssertionStatus0(this) :
59.20 - loader.desiredAssertionStatus(getName()));
59.21 + // If the classloader has been initialized with the assertion
59.22 + // directives, ask it. Otherwise, ask the VM.
59.23 + synchronized(loader.assertionLock) {
59.24 + if (loader.classAssertionStatus != null) {
59.25 + return loader.desiredAssertionStatus(getName());
59.26 + }
59.27 }
59.28 + return desiredAssertionStatus0(this);
59.29 }
59.30
59.31 // Retrieves the desired assertion status of this class from the VM
60.1 --- a/src/share/classes/java/lang/ClassLoader.java Thu Apr 16 17:42:00 2009 +0100
60.2 +++ b/src/share/classes/java/lang/ClassLoader.java Thu Apr 16 19:10:32 2009 -0700
60.3 @@ -1,5 +1,5 @@
60.4 /*
60.5 - * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved.
60.6 + * Copyright 1994-2009 Sun Microsystems, Inc. All Rights Reserved.
60.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
60.8 *
60.9 * This code is free software; you can redistribute it and/or modify it
60.10 @@ -40,14 +40,17 @@
60.11 import java.security.PrivilegedExceptionAction;
60.12 import java.security.ProtectionDomain;
60.13 import java.security.cert.Certificate;
60.14 +import java.util.Collections;
60.15 import java.util.Enumeration;
60.16 -import java.util.Hashtable;
60.17 import java.util.HashMap;
60.18 import java.util.HashSet;
60.19 import java.util.Set;
60.20 import java.util.Stack;
60.21 import java.util.Map;
60.22 import java.util.Vector;
60.23 +import java.util.Hashtable;
60.24 +import java.util.WeakHashMap;
60.25 +import java.util.concurrent.ConcurrentHashMap;
60.26 import sun.misc.ClassFileTransformer;
60.27 import sun.misc.CompoundEnumeration;
60.28 import sun.misc.Resource;
60.29 @@ -91,6 +94,17 @@
60.30 * called the "bootstrap class loader", does not itself have a parent but may
60.31 * serve as the parent of a <tt>ClassLoader</tt> instance.
60.32 *
60.33 + * <p> Class loaders that support concurrent loading of classes are known as
60.34 + * <em>parallel capable</em> class loaders and are required to register
60.35 + * themselves at their class initialization time by invoking the
60.36 + * {@link
60.37 + * #registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>}
60.38 + * method. In environments in which the delegation model is not strictly
60.39 + * hierarchical, class loaders need to be parallel capable, otherise class
60.40 + * loading can lead to deadlocks because the loader lock is held for the
60.41 + * duration of the class loading process (see {@link #loadClass
60.42 + * <tt>loadClass</tt>} methods).
60.43 + *
60.44 * <p> Normally, the Java virtual machine loads classes from the local file
60.45 * system in a platform-dependent manner. For example, on UNIX systems, the
60.46 * virtual machine loads classes from the directory defined by the
60.47 @@ -160,31 +174,51 @@
60.48 public abstract class ClassLoader {
60.49
60.50 private static native void registerNatives();
60.51 +
60.52 + // Set of classes which are registered as parallel capable class loaders
60.53 + private static final Set<Class<? extends ClassLoader>> parallelLoaders
60.54 + = Collections.newSetFromMap(Collections.synchronizedMap
60.55 + (new WeakHashMap<Class<? extends ClassLoader>, Boolean>()));
60.56 +
60.57 static {
60.58 registerNatives();
60.59 + parallelLoaders.add(ClassLoader.class);
60.60 }
60.61
60.62 // If initialization succeed this is set to true and security checks will
60.63 // succeed. Otherwise the object is not initialized and the object is
60.64 // useless.
60.65 - private boolean initialized = false;
60.66 + private final boolean initialized;
60.67
60.68 // The parent class loader for delegation
60.69 - private ClassLoader parent;
60.70 + // Note: VM hardcoded the offset of this field, thus all new fields
60.71 + // must be added *after* it.
60.72 + private final ClassLoader parent;
60.73 +
60.74 + // Maps class name to the corresponding lock object when the current
60.75 + // class loader is parallel capable.
60.76 + // Note: VM also uses this field to decide if the current class loader
60.77 + // is parallel capable and the appropriate lock object for class loading.
60.78 + private final ConcurrentHashMap<String, Object> parallelLockMap;
60.79
60.80 // Hashtable that maps packages to certs
60.81 - private Hashtable<String, Certificate[]> package2certs
60.82 - = new Hashtable<String, Certificate[]>(11);
60.83 + private final Map <String, Certificate[]> package2certs;
60.84
60.85 // Shared among all packages with unsigned classes
60.86 - Certificate[] nocerts;
60.87 + private static final Certificate[] nocerts = new Certificate[0];
60.88
60.89 - // The classes loaded by this class loader. The only purpose of this table
60.90 + // The classes loaded by this class loader. The only purpose of this table
60.91 // is to keep the classes from being GC'ed until the loader is GC'ed.
60.92 - private Vector<Class<?>> classes = new Vector<Class<?>>();
60.93 + private final Vector<Class<?>> classes = new Vector<Class<?>>();
60.94 +
60.95 + // The "default" domain. Set as the default ProtectionDomain on newly
60.96 + // created classes.
60.97 + private final ProtectionDomain defaultDomain =
60.98 + new ProtectionDomain(new CodeSource(null, (Certificate[]) null),
60.99 + null, this, null);
60.100
60.101 // The initiating protection domains for all classes loaded by this loader
60.102 - private Set<ProtectionDomain> domains = new HashSet<ProtectionDomain>();
60.103 + private final Set<ProtectionDomain> domains;
60.104
60.105 // Invoked by the VM to record every loaded class with this loader.
60.106 void addClass(Class c) {
60.107 @@ -193,7 +227,9 @@
60.108
60.109 // The packages defined in this class loader. Each package name is mapped
60.110 // to its corresponding Package object.
60.111 - private HashMap<String, Package> packages = new HashMap<String, Package>();
60.112 + // @GuardedBy("itself")
60.113 + private final HashMap<String, Package> packages =
60.114 + new HashMap<String, Package>();
60.115
60.116 /**
60.117 * Creates a new class loader using the specified parent class loader for
60.118 @@ -220,6 +256,19 @@
60.119 security.checkCreateClassLoader();
60.120 }
60.121 this.parent = parent;
60.122 + if (parallelLoaders.contains(this.getClass())) {
60.123 + parallelLockMap = new ConcurrentHashMap<String, Object>();
60.124 + package2certs = new ConcurrentHashMap<String, Certificate[]>();
60.125 + domains =
60.126 + Collections.synchronizedSet(new HashSet<ProtectionDomain>());
60.127 + assertionLock = new Object();
60.128 + } else {
60.129 + // no finer-grained lock; lock on the classloader instance
60.130 + parallelLockMap = null;
60.131 + package2certs = new Hashtable<String, Certificate[]>();
60.132 + domains = new HashSet<ProtectionDomain>();
60.133 + assertionLock = this;
60.134 + }
60.135 initialized = true;
60.136 }
60.137
60.138 @@ -244,10 +293,22 @@
60.139 security.checkCreateClassLoader();
60.140 }
60.141 this.parent = getSystemClassLoader();
60.142 + if (parallelLoaders.contains(this.getClass())) {
60.143 + parallelLockMap = new ConcurrentHashMap<String, Object>();
60.144 + package2certs = new ConcurrentHashMap<String, Certificate[]>();
60.145 + domains =
60.146 + Collections.synchronizedSet(new HashSet<ProtectionDomain>());
60.147 + assertionLock = new Object();
60.148 + } else {
60.149 + // no finer-grained lock; lock on the classloader instance
60.150 + parallelLockMap = null;
60.151 + package2certs = new Hashtable<String, Certificate[]>();
60.152 + domains = new HashSet<ProtectionDomain>();
60.153 + assertionLock = this;
60.154 + }
60.155 initialized = true;
60.156 }
60.157
60.158 -
60.159 // -- Class --
60.160
60.161 /**
60.162 @@ -296,6 +357,10 @@
60.163 * <p> Subclasses of <tt>ClassLoader</tt> are encouraged to override {@link
60.164 * #findClass(String)}, rather than this method. </p>
60.165 *
60.166 + * <p> Unless overridden, this method synchronizes on the result of
60.167 + * {@link #getClassLoadingLock <tt>getClassLoadingLock</tt>} method
60.168 + * during the entire class loading process.
60.169 + *
60.170 * @param name
60.171 * The <a href="#name">binary name</a> of the class
60.172 *
60.173 @@ -307,37 +372,80 @@
60.174 * @throws ClassNotFoundException
60.175 * If the class could not be found
60.176 */
60.177 - protected synchronized Class<?> loadClass(String name, boolean resolve)
60.178 + protected Class<?> loadClass(String name, boolean resolve)
60.179 throws ClassNotFoundException
60.180 {
60.181 - // First, check if the class has already been loaded
60.182 - Class c = findLoadedClass(name);
60.183 - if (c == null) {
60.184 - try {
60.185 - if (parent != null) {
60.186 - c = parent.loadClass(name, false);
60.187 - } else {
60.188 - c = findBootstrapClass0(name);
60.189 + synchronized (getClassLoadingLock(name)) {
60.190 + // First, check if the class has already been loaded
60.191 + Class c = findLoadedClass(name);
60.192 + if (c == null) {
60.193 + try {
60.194 + if (parent != null) {
60.195 + c = parent.loadClass(name, false);
60.196 + } else {
60.197 + c = findBootstrapClass0(name);
60.198 + }
60.199 + } catch (ClassNotFoundException e) {
60.200 + // If still not found, then invoke findClass in order
60.201 + // to find the class.
60.202 + c = findClass(name);
60.203 }
60.204 - } catch (ClassNotFoundException e) {
60.205 - // If still not found, then invoke findClass in order
60.206 - // to find the class.
60.207 - c = findClass(name);
60.208 + }
60.209 + if (resolve) {
60.210 + resolveClass(c);
60.211 + }
60.212 + return c;
60.213 + }
60.214 + }
60.215 +
60.216 + /**
60.217 + * Returns the lock object for class loading operations.
60.218 + * For backward compatibility, the default implementation of this method
60.219 + * behaves as follows. If this ClassLoader object is registered as
60.220 + * parallel capable, the method returns a dedicated object associated
60.221 + * with the specified class name. Otherwise, the method returns this
60.222 + * ClassLoader object. </p>
60.223 + *
60.224 + * @param className
60.225 + * The name of the to-be-loaded class
60.226 + *
60.227 + * @return the lock for class loading operations
60.228 + *
60.229 + * @throws NullPointerException
60.230 + * If registered as parallel capable and <tt>className</tt> is null
60.231 + *
60.232 + * @see #loadClass(String, boolean)
60.233 + *
60.234 + * @since 1.7
60.235 + */
60.236 + protected Object getClassLoadingLock(String className) {
60.237 + Object lock = this;
60.238 + if (parallelLockMap != null) {
60.239 + Object newLock = new Object();
60.240 + lock = parallelLockMap.putIfAbsent(className, newLock);
60.241 + if (lock == null) {
60.242 + lock = newLock;
60.243 }
60.244 }
60.245 - if (resolve) {
60.246 - resolveClass(c);
60.247 - }
60.248 - return c;
60.249 + return lock;
60.250 }
60.251
60.252 // This method is invoked by the virtual machine to load a class.
60.253 - private synchronized Class loadClassInternal(String name)
60.254 + private Class loadClassInternal(String name)
60.255 throws ClassNotFoundException
60.256 {
60.257 - return loadClass(name);
60.258 + // For backward compatibility, explicitly lock on 'this' when
60.259 + // the current class loader is not parallel capable.
60.260 + if (parallelLockMap == null) {
60.261 + synchronized (this) {
60.262 + return loadClass(name);
60.263 + }
60.264 + } else {
60.265 + return loadClass(name);
60.266 + }
60.267 }
60.268
60.269 + // Invoked by the VM after loading class with this loader.
60.270 private void checkPackageAccess(Class cls, ProtectionDomain pd) {
60.271 final SecurityManager sm = System.getSecurityManager();
60.272 if (sm != null) {
60.273 @@ -486,31 +594,32 @@
60.274
60.275 /* Determine protection domain, and check that:
60.276 - not define java.* class,
60.277 - - signer of this class matches signers for the rest of the classes in package.
60.278 + - signer of this class matches signers for the rest of the classes in
60.279 + package.
60.280 */
60.281 private ProtectionDomain preDefineClass(String name,
60.282 - ProtectionDomain protectionDomain)
60.283 + ProtectionDomain pd)
60.284 {
60.285 if (!checkName(name))
60.286 throw new NoClassDefFoundError("IllegalName: " + name);
60.287
60.288 if ((name != null) && name.startsWith("java.")) {
60.289 - throw new SecurityException("Prohibited package name: " +
60.290 - name.substring(0, name.lastIndexOf('.')));
60.291 + throw new SecurityException
60.292 + ("Prohibited package name: " +
60.293 + name.substring(0, name.lastIndexOf('.')));
60.294 }
60.295 - if (protectionDomain == null) {
60.296 - protectionDomain = getDefaultDomain();
60.297 + if (pd == null) {
60.298 + pd = defaultDomain;
60.299 }
60.300
60.301 - if (name != null)
60.302 - checkCerts(name, protectionDomain.getCodeSource());
60.303 + if (name != null) checkCerts(name, pd.getCodeSource());
60.304
60.305 - return protectionDomain;
60.306 + return pd;
60.307 }
60.308
60.309 - private String defineClassSourceLocation(ProtectionDomain protectionDomain)
60.310 + private String defineClassSourceLocation(ProtectionDomain pd)
60.311 {
60.312 - CodeSource cs = protectionDomain.getCodeSource();
60.313 + CodeSource cs = pd.getCodeSource();
60.314 String source = null;
60.315 if (cs != null && cs.getLocation() != null) {
60.316 source = cs.getLocation().toString();
60.317 @@ -519,14 +628,15 @@
60.318 }
60.319
60.320 private Class defineTransformedClass(String name, byte[] b, int off, int len,
60.321 - ProtectionDomain protectionDomain,
60.322 + ProtectionDomain pd,
60.323 ClassFormatError cfe, String source)
60.324 throws ClassFormatError
60.325 {
60.326 // Class format error - try to transform the bytecode and
60.327 // define the class again
60.328 //
60.329 - ClassFileTransformer[] transformers = ClassFileTransformer.getTransformers();
60.330 + ClassFileTransformer[] transformers =
60.331 + ClassFileTransformer.getTransformers();
60.332 Class c = null;
60.333
60.334 if (transformers != null) {
60.335 @@ -535,7 +645,7 @@
60.336 // Transform byte code using transformer
60.337 byte[] tb = transformer.transform(b, off, len);
60.338 c = defineClass1(name, tb, 0, tb.length,
60.339 - protectionDomain, source);
60.340 + pd, source);
60.341 break;
60.342 } catch (ClassFormatError cfe2) {
60.343 // If ClassFormatError occurs, try next transformer
60.344 @@ -552,11 +662,10 @@
60.345 return c;
60.346 }
60.347
60.348 - private void postDefineClass(Class c, ProtectionDomain protectionDomain)
60.349 + private void postDefineClass(Class c, ProtectionDomain pd)
60.350 {
60.351 - if (protectionDomain.getCodeSource() != null) {
60.352 - Certificate certs[] =
60.353 - protectionDomain.getCodeSource().getCertificates();
60.354 + if (pd.getCodeSource() != null) {
60.355 + Certificate certs[] = pd.getCodeSource().getCertificates();
60.356 if (certs != null)
60.357 setSigners(c, certs);
60.358 }
60.359 @@ -641,7 +750,8 @@
60.360 try {
60.361 c = defineClass1(name, b, off, len, protectionDomain, source);
60.362 } catch (ClassFormatError cfe) {
60.363 - c = defineTransformedClass(name, b, off, len, protectionDomain, cfe, source);
60.364 + c = defineTransformedClass(name, b, off, len, protectionDomain, cfe,
60.365 + source);
60.366 }
60.367
60.368 postDefineClass(c, protectionDomain);
60.369 @@ -656,10 +766,10 @@
60.370 * specified in the documentation for {@link #defineClass(String, byte[],
60.371 * int, int)}. Before the class can be used it must be resolved.
60.372 *
60.373 - * <p>The rules about the first class defined in a package determining the set of
60.374 - * certificates for the package, and the restrictions on class names are identical
60.375 - * to those specified in the documentation for {@link #defineClass(String, byte[],
60.376 - * int, int, ProtectionDomain)}.
60.377 + * <p>The rules about the first class defined in a package determining the
60.378 + * set of certificates for the package, and the restrictions on class names
60.379 + * are identical to those specified in the documentation for {@link
60.380 + * #defineClass(String, byte[], int, int, ProtectionDomain)}.
60.381 *
60.382 * <p> An invocation of this method of the form
60.383 * <i>cl</i><tt>.defineClass(</tt><i>name</i><tt>,</tt>
60.384 @@ -668,12 +778,13 @@
60.385 *
60.386 * <blockquote><tt>
60.387 * ...<br>
60.388 - * byte[] temp = new byte[</tt><i>bBuffer</i><tt>.{@link java.nio.ByteBuffer#remaining
60.389 - * remaining}()];<br>
60.390 + * byte[] temp = new byte[</tt><i>bBuffer</i><tt>.{@link
60.391 + * java.nio.ByteBuffer#remaining remaining}()];<br>
60.392 * </tt><i>bBuffer</i><tt>.{@link java.nio.ByteBuffer#get(byte[])
60.393 * get}(temp);<br>
60.394 * return {@link #defineClass(String, byte[], int, int, ProtectionDomain)
60.395 - * </tt><i>cl</i><tt>.defineClass}(</tt><i>name</i><tt>, temp, 0, temp.length, </tt><i>pd</i><tt>);<br>
60.396 + * </tt><i>cl</i><tt>.defineClass}(</tt><i>name</i><tt>, temp, 0,
60.397 + * temp.length, </tt><i>pd</i><tt>);<br>
60.398 * </tt></blockquote>
60.399 *
60.400 * @param name
60.401 @@ -682,9 +793,9 @@
60.402 *
60.403 * @param b
60.404 * The bytes that make up the class data. The bytes from positions
60.405 - * <tt>b.position()</tt> through <tt>b.position() + b.limit() -1 </tt>
60.406 - * should have the format of a valid class file as defined by the <a
60.407 - * href="http://java.sun.com/docs/books/vmspec/">Java Virtual
60.408 + * <tt>b.position()</tt> through <tt>b.position() + b.limit() -1
60.409 + * </tt> should have the format of a valid class file as defined by
60.410 + * the <a href="http://java.sun.com/docs/books/vmspec/">Java Virtual
60.411 * Machine Specification</a>.
60.412 *
60.413 * @param protectionDomain
60.414 @@ -738,11 +849,13 @@
60.415 String source = defineClassSourceLocation(protectionDomain);
60.416
60.417 try {
60.418 - c = defineClass2(name, b, b.position(), len, protectionDomain, source);
60.419 + c = defineClass2(name, b, b.position(), len, protectionDomain,
60.420 + source);
60.421 } catch (ClassFormatError cfe) {
60.422 byte[] tb = new byte[len];
60.423 b.get(tb); // get bytes out of byte buffer.
60.424 - c = defineTransformedClass(name, tb, 0, len, protectionDomain, cfe, source);
60.425 + c = defineTransformedClass(name, tb, 0, len, protectionDomain, cfe,
60.426 + source);
60.427 }
60.428
60.429 postDefineClass(c, protectionDomain);
60.430 @@ -769,33 +882,29 @@
60.431 return true;
60.432 }
60.433
60.434 - private synchronized void checkCerts(String name, CodeSource cs) {
60.435 + private void checkCerts(String name, CodeSource cs) {
60.436 int i = name.lastIndexOf('.');
60.437 String pname = (i == -1) ? "" : name.substring(0, i);
60.438 - Certificate[] pcerts = package2certs.get(pname);
60.439 - if (pcerts == null) {
60.440 - // first class in this package gets to define which
60.441 - // certificates must be the same for all other classes
60.442 - // in this package
60.443 - if (cs != null) {
60.444 - pcerts = cs.getCertificates();
60.445 +
60.446 + Certificate[] certs = null;
60.447 + if (cs != null) {
60.448 + certs = cs.getCertificates();
60.449 + }
60.450 + Certificate[] pcerts = null;
60.451 + if (parallelLockMap == null) {
60.452 + synchronized (this) {
60.453 + pcerts = package2certs.get(pname);
60.454 + if (pcerts == null) {
60.455 + package2certs.put(pname, (certs == null? nocerts:certs));
60.456 + }
60.457 }
60.458 - if (pcerts == null) {
60.459 - if (nocerts == null)
60.460 - nocerts = new Certificate[0];
60.461 - pcerts = nocerts;
60.462 - }
60.463 - package2certs.put(pname, pcerts);
60.464 } else {
60.465 - Certificate[] certs = null;
60.466 - if (cs != null) {
60.467 - certs = cs.getCertificates();
60.468 - }
60.469 -
60.470 - if (!compareCerts(pcerts, certs)) {
60.471 - throw new SecurityException("class \""+ name +
60.472 - "\"'s signer information does not match signer information of other classes in the same package");
60.473 - }
60.474 + pcerts = ((ConcurrentHashMap<String, Certificate[]>)package2certs).
60.475 + putIfAbsent(pname, (certs == null? nocerts:certs));
60.476 + }
60.477 + if (pcerts != null && !compareCerts(pcerts, certs)) {
60.478 + throw new SecurityException("class \""+ name +
60.479 + "\"'s signer information does not match signer information of other classes in the same package");
60.480 }
60.481 }
60.482
60.483 @@ -1075,6 +1184,47 @@
60.484 return java.util.Collections.emptyEnumeration();
60.485 }
60.486
60.487 + // index 0: java.lang.ClassLoader.class
60.488 + // index 1: the immediate caller of index 0.
60.489 + // index 2: the immediate caller of index 1.
60.490 + private static native Class<? extends ClassLoader> getCaller(int index);
60.491 +
60.492 + /**
60.493 + * Registers the caller class loader as parallel capable.
60.494 + * In order for the registration to succeed, all super classes
60.495 + * of the caller class loader must also be registered as
60.496 + * parallel capable when this method is called. </p>
60.497 + * Note that once a class loader is registered as
60.498 + * parallel capable, there is no way to change it back.
60.499 + * In addition, registration should be done statically before
60.500 + * any instance of the caller classloader being constructed. </p>
60.501 + *
60.502 + * @return true if the caller is successfully registered as
60.503 + * parallel capable and false if otherwise.
60.504 + *
60.505 + * @since 1.7
60.506 + */
60.507 + protected static boolean registerAsParallelCapable() {
60.508 + Class<? extends ClassLoader> caller = getCaller(1);
60.509 + Class superCls = caller.getSuperclass();
60.510 + boolean result = false;
60.511 + // Explicit synchronization needed for composite action
60.512 + synchronized (parallelLoaders) {
60.513 + if (!parallelLoaders.contains(caller)) {
60.514 + if (parallelLoaders.contains(superCls)) {
60.515 + // register the immediate caller as parallel capable
60.516 + // if and only if all of its super classes are.
60.517 + // Note: given current classloading sequence, if
60.518 + // the immediate super class is parallel capable,
60.519 + // all the super classes higher up must be too.
60.520 + result = true;
60.521 + parallelLoaders.add(caller);
60.522 + }
60.523 + } else result = true;
60.524 + }
60.525 + return result;
60.526 + }
60.527 +
60.528 /**
60.529 * Find a resource of the specified name from the search path used to load
60.530 * classes. This method locates the resource through the system class
60.531 @@ -1141,7 +1291,8 @@
60.532 private static Enumeration<URL> getBootstrapResources(String name)
60.533 throws IOException
60.534 {
60.535 - final Enumeration<Resource> e = getBootstrapClassPath().getResources(name);
60.536 + final Enumeration<Resource> e =
60.537 + getBootstrapClassPath().getResources(name);
60.538 return new Enumeration<URL> () {
60.539 public URL nextElement() {
60.540 return e.nextElement().getURL();
60.541 @@ -1377,9 +1528,11 @@
60.542 }
60.543
60.544 // The class loader for the system
60.545 + // @GuardedBy("ClassLoader.class")
60.546 private static ClassLoader scl;
60.547
60.548 // Set to true once the system class loader has been set
60.549 + // @GuardedBy("ClassLoader.class")
60.550 private static boolean sclSet;
60.551
60.552
60.553 @@ -1592,19 +1745,6 @@
60.554 }
60.555 }
60.556
60.557 - // The "default" domain. Set as the default ProtectionDomain on newly
60.558 - // created classes.
60.559 - private ProtectionDomain defaultDomain = null;
60.560 -
60.561 - // Returns (and initializes) the default domain.
60.562 - private synchronized ProtectionDomain getDefaultDomain() {
60.563 - if (defaultDomain == null) {
60.564 - CodeSource cs = new CodeSource(null, (Certificate[]) null);
60.565 - defaultDomain = new ProtectionDomain(cs, null, this, null);
60.566 - }
60.567 - return defaultDomain;
60.568 - }
60.569 -
60.570 // All native library names we've loaded.
60.571 private static Vector<String> loadedLibraryNames
60.572 = new Vector<String>();
60.573 @@ -1622,8 +1762,8 @@
60.574 = new Stack<NativeLibrary>();
60.575
60.576 // The paths searched for libraries
60.577 - static private String usr_paths[];
60.578 - static private String sys_paths[];
60.579 + private static String usr_paths[];
60.580 + private static String sys_paths[];
60.581
60.582 private static String[] initializePath(String propname) {
60.583 String ldpath = System.getProperty(propname, "");
60.584 @@ -1803,7 +1943,10 @@
60.585
60.586 // -- Assertion management --
60.587
60.588 + final Object assertionLock;
60.589 +
60.590 // The default toggle for assertion checking.
60.591 + // @GuardedBy("assertionLock")
60.592 private boolean defaultAssertionStatus = false;
60.593
60.594 // Maps String packageName to Boolean package default assertion status Note
60.595 @@ -1811,12 +1954,14 @@
60.596 // is null then we are delegating assertion status queries to the VM, i.e.,
60.597 // none of this ClassLoader's assertion status modification methods have
60.598 // been invoked.
60.599 + // @GuardedBy("assertionLock")
60.600 private Map<String, Boolean> packageAssertionStatus = null;
60.601
60.602 // Maps String fullyQualifiedClassName to Boolean assertionStatus If this
60.603 // field is null then we are delegating assertion status queries to the VM,
60.604 // i.e., none of this ClassLoader's assertion status modification methods
60.605 // have been invoked.
60.606 + // @GuardedBy("assertionLock")
60.607 Map<String, Boolean> classAssertionStatus = null;
60.608
60.609 /**
60.610 @@ -1834,11 +1979,13 @@
60.611 *
60.612 * @since 1.4
60.613 */
60.614 - public synchronized void setDefaultAssertionStatus(boolean enabled) {
60.615 - if (classAssertionStatus == null)
60.616 - initializeJavaAssertionMaps();
60.617 + public void setDefaultAssertionStatus(boolean enabled) {
60.618 + synchronized (assertionLock) {
60.619 + if (classAssertionStatus == null)
60.620 + initializeJavaAssertionMaps();
60.621
60.622 - defaultAssertionStatus = enabled;
60.623 + defaultAssertionStatus = enabled;
60.624 + }
60.625 }
60.626
60.627 /**
60.628 @@ -1878,13 +2025,14 @@
60.629 *
60.630 * @since 1.4
60.631 */
60.632 - public synchronized void setPackageAssertionStatus(String packageName,
60.633 - boolean enabled)
60.634 - {
60.635 - if (packageAssertionStatus == null)
60.636 - initializeJavaAssertionMaps();
60.637 + public void setPackageAssertionStatus(String packageName,
60.638 + boolean enabled) {
60.639 + synchronized (assertionLock) {
60.640 + if (packageAssertionStatus == null)
60.641 + initializeJavaAssertionMaps();
60.642
60.643 - packageAssertionStatus.put(packageName, enabled);
60.644 + packageAssertionStatus.put(packageName, enabled);
60.645 + }
60.646 }
60.647
60.648 /**
60.649 @@ -1909,13 +2057,13 @@
60.650 *
60.651 * @since 1.4
60.652 */
60.653 - public synchronized void setClassAssertionStatus(String className,
60.654 - boolean enabled)
60.655 - {
60.656 - if (classAssertionStatus == null)
60.657 - initializeJavaAssertionMaps();
60.658 + public void setClassAssertionStatus(String className, boolean enabled) {
60.659 + synchronized (assertionLock) {
60.660 + if (classAssertionStatus == null)
60.661 + initializeJavaAssertionMaps();
60.662
60.663 - classAssertionStatus.put(className, enabled);
60.664 + classAssertionStatus.put(className, enabled);
60.665 + }
60.666 }
60.667
60.668 /**
60.669 @@ -1928,15 +2076,16 @@
60.670 *
60.671 * @since 1.4
60.672 */
60.673 - public synchronized void clearAssertionStatus() {
60.674 + public void clearAssertionStatus() {
60.675 /*
60.676 * Whether or not "Java assertion maps" are initialized, set
60.677 * them to empty maps, effectively ignoring any present settings.
60.678 */
60.679 - classAssertionStatus = new HashMap<String, Boolean>();
60.680 - packageAssertionStatus = new HashMap<String, Boolean>();
60.681 -
60.682 - defaultAssertionStatus = false;
60.683 + synchronized (assertionLock) {
60.684 + classAssertionStatus = new HashMap<String, Boolean>();
60.685 + packageAssertionStatus = new HashMap<String, Boolean>();
60.686 + defaultAssertionStatus = false;
60.687 + }
60.688 }
60.689
60.690 /**
60.691 @@ -1961,39 +2110,40 @@
60.692 *
60.693 * @since 1.4
60.694 */
60.695 - synchronized boolean desiredAssertionStatus(String className) {
60.696 - Boolean result;
60.697 + boolean desiredAssertionStatus(String className) {
60.698 + synchronized (assertionLock) {
60.699 + // assert classAssertionStatus != null;
60.700 + // assert packageAssertionStatus != null;
60.701
60.702 - // assert classAssertionStatus != null;
60.703 - // assert packageAssertionStatus != null;
60.704 -
60.705 - // Check for a class entry
60.706 - result = classAssertionStatus.get(className);
60.707 - if (result != null)
60.708 - return result.booleanValue();
60.709 -
60.710 - // Check for most specific package entry
60.711 - int dotIndex = className.lastIndexOf(".");
60.712 - if (dotIndex < 0) { // default package
60.713 - result = packageAssertionStatus.get(null);
60.714 + // Check for a class entry
60.715 + Boolean result = classAssertionStatus.get(className);
60.716 if (result != null)
60.717 return result.booleanValue();
60.718 +
60.719 + // Check for most specific package entry
60.720 + int dotIndex = className.lastIndexOf(".");
60.721 + if (dotIndex < 0) { // default package
60.722 + result = packageAssertionStatus.get(null);
60.723 + if (result != null)
60.724 + return result.booleanValue();
60.725 + }
60.726 + while(dotIndex > 0) {
60.727 + className = className.substring(0, dotIndex);
60.728 + result = packageAssertionStatus.get(className);
60.729 + if (result != null)
60.730 + return result.booleanValue();
60.731 + dotIndex = className.lastIndexOf(".", dotIndex-1);
60.732 + }
60.733 +
60.734 + // Return the classloader default
60.735 + return defaultAssertionStatus;
60.736 }
60.737 - while(dotIndex > 0) {
60.738 - className = className.substring(0, dotIndex);
60.739 - result = packageAssertionStatus.get(className);
60.740 - if (result != null)
60.741 - return result.booleanValue();
60.742 - dotIndex = className.lastIndexOf(".", dotIndex-1);
60.743 - }
60.744 -
60.745 - // Return the classloader default
60.746 - return defaultAssertionStatus;
60.747 }
60.748
60.749 // Set up the assertions with information provided by the VM.
60.750 + // Note: Should only be called inside a synchronized block
60.751 private void initializeJavaAssertionMaps() {
60.752 - // assert Thread.holdsLock(this);
60.753 + // assert Thread.holdsLock(assertionLock);
60.754
60.755 classAssertionStatus = new HashMap<String, Boolean>();
60.756 packageAssertionStatus = new HashMap<String, Boolean>();
61.1 --- a/src/share/classes/java/lang/ConditionalSpecialCasing.java Thu Apr 16 17:42:00 2009 +0100
61.2 +++ b/src/share/classes/java/lang/ConditionalSpecialCasing.java Thu Apr 16 19:10:32 2009 -0700
61.3 @@ -74,6 +74,7 @@
61.4 new Entry(0x00CC, new char[]{0x0069, 0x0307, 0x0300}, new char[]{0x00CC}, "lt", 0), // # LATIN CAPITAL LETTER I WITH GRAVE
61.5 new Entry(0x00CD, new char[]{0x0069, 0x0307, 0x0301}, new char[]{0x00CD}, "lt", 0), // # LATIN CAPITAL LETTER I WITH ACUTE
61.6 new Entry(0x0128, new char[]{0x0069, 0x0307, 0x0303}, new char[]{0x0128}, "lt", 0), // # LATIN CAPITAL LETTER I WITH TILDE
61.7 + new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "lt", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
61.8
61.9 //# ================================================================================
61.10 //# Turkish and Azeri
61.11 @@ -84,7 +85,10 @@
61.12 new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
61.13 new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "az", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
61.14 new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN SMALL LETTER I
61.15 - new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0) // # LATIN SMALL LETTER I
61.16 + new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN SMALL LETTER I
61.17 + //# ================================================================================
61.18 + //# Other
61.19 + new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "en", 0), // # LATIN CAPITALLETTER I WITH DOT ABOVE
61.20 };
61.21
61.22 // A hash table that contains the above entries
62.1 --- a/src/share/classes/java/lang/Integer.java Thu Apr 16 17:42:00 2009 +0100
62.2 +++ b/src/share/classes/java/lang/Integer.java Thu Apr 16 19:10:32 2009 -0700
62.3 @@ -25,6 +25,8 @@
62.4
62.5 package java.lang;
62.6
62.7 +import java.util.Properties;
62.8 +
62.9 /**
62.10 * The {@code Integer} class wraps a value of the primitive type
62.11 * {@code int} in an object. An object of type {@code Integer}
62.12 @@ -442,6 +444,12 @@
62.13 public static int parseInt(String s, int radix)
62.14 throws NumberFormatException
62.15 {
62.16 + /*
62.17 + * WARNING: This method may be invoked early during VM initialization
62.18 + * before IntegerCache is initialized. Care must be taken to not use
62.19 + * the valueOf method.
62.20 + */
62.21 +
62.22 if (s == null) {
62.23 throw new NumberFormatException("null");
62.24 }
62.25 @@ -545,7 +553,7 @@
62.26 * does not contain a parsable {@code int}.
62.27 */
62.28 public static Integer valueOf(String s, int radix) throws NumberFormatException {
62.29 - return new Integer(parseInt(s,radix));
62.30 + return Integer.valueOf(parseInt(s,radix));
62.31 }
62.32
62.33 /**
62.34 @@ -570,20 +578,56 @@
62.35 * @exception NumberFormatException if the string cannot be parsed
62.36 * as an integer.
62.37 */
62.38 - public static Integer valueOf(String s) throws NumberFormatException
62.39 - {
62.40 - return new Integer(parseInt(s, 10));
62.41 + public static Integer valueOf(String s) throws NumberFormatException {
62.42 + return Integer.valueOf(parseInt(s, 10));
62.43 + }
62.44 +
62.45 + /**
62.46 + * Cache to support the object identity semantics of autoboxing for values between
62.47 + * -128 and 127 (inclusive) as required by JLS.
62.48 + *
62.49 + * The cache is initialized on first usage. During VM initialization the
62.50 + * getAndRemoveCacheProperties method may be used to get and remove any system
62.51 + * properites that configure the cache size. At this time, the size of the
62.52 + * cache may be controlled by the -XX:AutoBoxCacheMax=<size> option.
62.53 + */
62.54 +
62.55 + // value of java.lang.Integer.IntegerCache.high property (obtained during VM init)
62.56 + private static String integerCacheHighPropValue;
62.57 +
62.58 + static void getAndRemoveCacheProperties() {
62.59 + if (!sun.misc.VM.isBooted()) {
62.60 + Properties props = System.getProperties();
62.61 + integerCacheHighPropValue =
62.62 + (String)props.remove("java.lang.Integer.IntegerCache.high");
62.63 + if (integerCacheHighPropValue != null)
62.64 + System.setProperties(props); // remove from system props
62.65 + }
62.66 }
62.67
62.68 private static class IntegerCache {
62.69 - private IntegerCache(){}
62.70 -
62.71 - static final Integer cache[] = new Integer[-(-128) + 127 + 1];
62.72 + static final int low = -128;
62.73 + static final int high;
62.74 + static final Integer cache[];
62.75
62.76 static {
62.77 - for(int i = 0; i < cache.length; i++)
62.78 - cache[i] = new Integer(i - 128);
62.79 + // high value may be configured by property
62.80 + int h = 127;
62.81 + if (integerCacheHighPropValue != null) {
62.82 + int i = parseInt(integerCacheHighPropValue);
62.83 + i = Math.max(i, 127);
62.84 + // Maximum array size is Integer.MAX_VALUE
62.85 + h = Math.min(i, Integer.MAX_VALUE - (-low));
62.86 + }
62.87 + high = h;
62.88 +
62.89 + cache = new Integer[(high - low) + 1];
62.90 + int j = low;
62.91 + for(int k = 0; k < cache.length; k++)
62.92 + cache[k] = new Integer(j++);
62.93 }
62.94 +
62.95 + private IntegerCache() {}
62.96 }
62.97
62.98 /**
62.99 @@ -599,10 +643,9 @@
62.100 * @since 1.5
62.101 */
62.102 public static Integer valueOf(int i) {
62.103 - final int offset = 128;
62.104 - if (i >= -128 && i <= 127) { // must cache
62.105 - return IntegerCache.cache[i + offset];
62.106 - }
62.107 + assert IntegerCache.high >= 127;
62.108 + if (i >= IntegerCache.low && i <= IntegerCache.high)
62.109 + return IntegerCache.cache[i + (-IntegerCache.low)];
62.110 return new Integer(i);
62.111 }
62.112
62.113 @@ -806,7 +849,7 @@
62.114 */
62.115 public static Integer getInteger(String nm, int val) {
62.116 Integer result = getInteger(nm, null);
62.117 - return (result == null) ? new Integer(val) : result;
62.118 + return (result == null) ? Integer.valueOf(val) : result;
62.119 }
62.120
62.121 /**
62.122 @@ -938,7 +981,7 @@
62.123
62.124 try {
62.125 result = Integer.valueOf(nm.substring(index), radix);
62.126 - result = negative ? new Integer(-result.intValue()) : result;
62.127 + result = negative ? Integer.valueOf(-result.intValue()) : result;
62.128 } catch (NumberFormatException e) {
62.129 // If number is Integer.MIN_VALUE, we'll end up here. The next line
62.130 // handles this case, and causes any genuine format error to be
63.1 --- a/src/share/classes/java/lang/Long.java Thu Apr 16 17:42:00 2009 +0100
63.2 +++ b/src/share/classes/java/lang/Long.java Thu Apr 16 19:10:32 2009 -0700
63.3 @@ -510,7 +510,7 @@
63.4 * contain a parsable {@code long}.
63.5 */
63.6 public static Long valueOf(String s, int radix) throws NumberFormatException {
63.7 - return new Long(parseLong(s, radix));
63.8 + return Long.valueOf(parseLong(s, radix));
63.9 }
63.10
63.11 /**
63.12 @@ -537,7 +537,7 @@
63.13 */
63.14 public static Long valueOf(String s) throws NumberFormatException
63.15 {
63.16 - return new Long(parseLong(s, 10));
63.17 + return Long.valueOf(parseLong(s, 10));
63.18 }
63.19
63.20 private static class LongCache {
63.21 @@ -650,7 +650,7 @@
63.22
63.23 try {
63.24 result = Long.valueOf(nm.substring(index), radix);
63.25 - result = negative ? new Long(-result.longValue()) : result;
63.26 + result = negative ? Long.valueOf(-result.longValue()) : result;
63.27 } catch (NumberFormatException e) {
63.28 // If number is Long.MIN_VALUE, we'll end up here. The next line
63.29 // handles this case, and causes any genuine format error to be
63.30 @@ -869,7 +869,7 @@
63.31 */
63.32 public static Long getLong(String nm, long val) {
63.33 Long result = Long.getLong(nm, null);
63.34 - return (result == null) ? new Long(val) : result;
63.35 + return (result == null) ? Long.valueOf(val) : result;
63.36 }
63.37
63.38 /**
64.1 --- a/src/share/classes/java/lang/String.java Thu Apr 16 17:42:00 2009 +0100
64.2 +++ b/src/share/classes/java/lang/String.java Thu Apr 16 19:10:32 2009 -0700
64.3 @@ -2451,14 +2451,21 @@
64.4 }
64.5 if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
64.6 lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
64.7 + } else if (srcChar == '\u0130') { // LATIN CAPITAL LETTER I DOT
64.8 + lowerChar = Character.ERROR;
64.9 } else {
64.10 lowerChar = Character.toLowerCase(srcChar);
64.11 }
64.12 if ((lowerChar == Character.ERROR) ||
64.13 (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) {
64.14 if (lowerChar == Character.ERROR) {
64.15 - lowerCharArray =
64.16 - ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
64.17 + if (!localeDependent && srcChar == '\u0130') {
64.18 + lowerCharArray =
64.19 + ConditionalSpecialCasing.toLowerCaseCharArray(this, i, Locale.ENGLISH);
64.20 + } else {
64.21 + lowerCharArray =
64.22 + ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
64.23 + }
64.24 } else if (srcCount == 2) {
64.25 resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount;
64.26 continue;
65.1 --- a/src/share/classes/java/lang/System.java Thu Apr 16 17:42:00 2009 +0100
65.2 +++ b/src/share/classes/java/lang/System.java Thu Apr 16 19:10:32 2009 -0700
65.3 @@ -1105,6 +1105,13 @@
65.4 props = new Properties();
65.5 initProperties(props);
65.6 sun.misc.Version.init();
65.7 +
65.8 + // Gets and removes system properties that configure the Integer
65.9 + // cache used to support the object identity semantics of autoboxing.
65.10 + // At this time, the size of the cache may be controlled by the
65.11 + // -XX:AutoBoxCacheMax=<size> option.
65.12 + Integer.getAndRemoveCacheProperties();
65.13 +
65.14 FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
65.15 FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
65.16 FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
66.1 --- a/src/share/classes/java/lang/ref/ReferenceQueue.java Thu Apr 16 17:42:00 2009 +0100
66.2 +++ b/src/share/classes/java/lang/ref/ReferenceQueue.java Thu Apr 16 19:10:32 2009 -0700
66.3 @@ -51,7 +51,7 @@
66.4
66.5 static private class Lock { };
66.6 private Lock lock = new Lock();
66.7 - private Reference<? extends T> head = null;
66.8 + private volatile Reference<? extends T> head = null;
66.9 private long queueLength = 0;
66.10
66.11 boolean enqueue(Reference<? extends T> r) { /* Called only by Reference class */
66.12 @@ -95,6 +95,8 @@
66.13 * otherwise <code>null</code>
66.14 */
66.15 public Reference<? extends T> poll() {
66.16 + if (head == null)
66.17 + return null;
66.18 synchronized (lock) {
66.19 return reallyPoll();
66.20 }
67.1 --- a/src/share/classes/java/lang/ref/SoftReference.java Thu Apr 16 17:42:00 2009 +0100
67.2 +++ b/src/share/classes/java/lang/ref/SoftReference.java Thu Apr 16 19:10:32 2009 -0700
67.3 @@ -63,11 +63,13 @@
67.4
67.5 public class SoftReference<T> extends Reference<T> {
67.6
67.7 - /* Timestamp clock, updated by the garbage collector
67.8 + /**
67.9 + * Timestamp clock, updated by the garbage collector
67.10 */
67.11 static private long clock;
67.12
67.13 - /* Timestamp updated by each invocation of the get method. The VM may use
67.14 + /**
67.15 + * Timestamp updated by each invocation of the get method. The VM may use
67.16 * this field when selecting soft references to be cleared, but it is not
67.17 * required to do so.
67.18 */
67.19 @@ -108,7 +110,8 @@
67.20 */
67.21 public T get() {
67.22 T o = super.get();
67.23 - if (o != null) this.timestamp = clock;
67.24 + if (o != null && this.timestamp != clock)
67.25 + this.timestamp = clock;
67.26 return o;
67.27 }
67.28
68.1 --- a/src/share/classes/java/net/AbstractPlainSocketImpl.java Thu Apr 16 17:42:00 2009 +0100
68.2 +++ b/src/share/classes/java/net/AbstractPlainSocketImpl.java Thu Apr 16 19:10:32 2009 -0700
68.3 @@ -33,6 +33,7 @@
68.4 import java.io.ByteArrayOutputStream;
68.5
68.6 import sun.net.ConnectionResetException;
68.7 +import sun.net.NetHooks;
68.8
68.9 /**
68.10 * Default Socket Implementation. This implementation does
68.11 @@ -304,6 +305,11 @@
68.12 */
68.13
68.14 synchronized void doConnect(InetAddress address, int port, int timeout) throws IOException {
68.15 + synchronized (fdLock) {
68.16 + if (!closePending && (socket == null || !socket.isBound())) {
68.17 + NetHooks.beforeTcpConnect(fd, address, port);
68.18 + }
68.19 + }
68.20 try {
68.21 FileDescriptor fd = acquireFD();
68.22 try {
68.23 @@ -339,6 +345,11 @@
68.24 protected synchronized void bind(InetAddress address, int lport)
68.25 throws IOException
68.26 {
68.27 + synchronized (fdLock) {
68.28 + if (!closePending && (socket == null || !socket.isBound())) {
68.29 + NetHooks.beforeTcpBind(fd, address, lport);
68.30 + }
68.31 + }
68.32 socketBind(address, lport);
68.33 if (socket != null)
68.34 socket.setBound();
69.1 --- a/src/share/classes/java/net/URLClassLoader.java Thu Apr 16 17:42:00 2009 +0100
69.2 +++ b/src/share/classes/java/net/URLClassLoader.java Thu Apr 16 19:10:32 2009 -0700
69.3 @@ -1,5 +1,5 @@
69.4 /*
69.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
69.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
69.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
69.8 *
69.9 * This code is free software; you can redistribute it and/or modify it
69.10 @@ -74,10 +74,10 @@
69.11 */
69.12 public class URLClassLoader extends SecureClassLoader implements Closeable {
69.13 /* The search path for classes and resources */
69.14 - URLClassPath ucp;
69.15 + private final URLClassPath ucp;
69.16
69.17 /* The context to be used when loading classes and resources */
69.18 - private AccessControlContext acc;
69.19 + private final AccessControlContext acc;
69.20
69.21 /**
69.22 * Constructs a new URLClassLoader for the given URLs. The URLs will be
69.23 @@ -105,7 +105,19 @@
69.24 security.checkCreateClassLoader();
69.25 }
69.26 ucp = new URLClassPath(urls);
69.27 - acc = AccessController.getContext();
69.28 + this.acc = AccessController.getContext();
69.29 + }
69.30 +
69.31 + URLClassLoader(URL[] urls, ClassLoader parent,
69.32 + AccessControlContext acc) {
69.33 + super(parent);
69.34 + // this is to make the stack depth consistent with 1.1
69.35 + SecurityManager security = System.getSecurityManager();
69.36 + if (security != null) {
69.37 + security.checkCreateClassLoader();
69.38 + }
69.39 + ucp = new URLClassPath(urls);
69.40 + this.acc = acc;
69.41 }
69.42
69.43 /**
69.44 @@ -136,7 +148,18 @@
69.45 security.checkCreateClassLoader();
69.46 }
69.47 ucp = new URLClassPath(urls);
69.48 - acc = AccessController.getContext();
69.49 + this.acc = AccessController.getContext();
69.50 + }
69.51 +
69.52 + URLClassLoader(URL[] urls, AccessControlContext acc) {
69.53 + super();
69.54 + // this is to make the stack depth consistent with 1.1
69.55 + SecurityManager security = System.getSecurityManager();
69.56 + if (security != null) {
69.57 + security.checkCreateClassLoader();
69.58 + }
69.59 + ucp = new URLClassPath(urls);
69.60 + this.acc = acc;
69.61 }
69.62
69.63 /**
69.64 @@ -599,17 +622,14 @@
69.65 public static URLClassLoader newInstance(final URL[] urls,
69.66 final ClassLoader parent) {
69.67 // Save the caller's context
69.68 - AccessControlContext acc = AccessController.getContext();
69.69 + final AccessControlContext acc = AccessController.getContext();
69.70 // Need a privileged block to create the class loader
69.71 URLClassLoader ucl = AccessController.doPrivileged(
69.72 new PrivilegedAction<URLClassLoader>() {
69.73 public URLClassLoader run() {
69.74 - return new FactoryURLClassLoader(urls, parent);
69.75 + return new FactoryURLClassLoader(urls, parent, acc);
69.76 }
69.77 });
69.78 - // Now set the context on the loader using the one we saved,
69.79 - // not the one inside the privileged block...
69.80 - ucl.acc = acc;
69.81 return ucl;
69.82 }
69.83
69.84 @@ -626,18 +646,14 @@
69.85 */
69.86 public static URLClassLoader newInstance(final URL[] urls) {
69.87 // Save the caller's context
69.88 - AccessControlContext acc = AccessController.getContext();
69.89 + final AccessControlContext acc = AccessController.getContext();
69.90 // Need a privileged block to create the class loader
69.91 URLClassLoader ucl = AccessController.doPrivileged(
69.92 new PrivilegedAction<URLClassLoader>() {
69.93 public URLClassLoader run() {
69.94 - return new FactoryURLClassLoader(urls);
69.95 + return new FactoryURLClassLoader(urls, acc);
69.96 }
69.97 });
69.98 -
69.99 - // Now set the context on the loader using the one we saved,
69.100 - // not the one inside the privileged block...
69.101 - ucl.acc = acc;
69.102 return ucl;
69.103 }
69.104
69.105 @@ -649,20 +665,26 @@
69.106 }
69.107 }
69.108 );
69.109 + ClassLoader.registerAsParallelCapable();
69.110 }
69.111 }
69.112
69.113 final class FactoryURLClassLoader extends URLClassLoader {
69.114
69.115 - FactoryURLClassLoader(URL[] urls, ClassLoader parent) {
69.116 - super(urls, parent);
69.117 + static {
69.118 + ClassLoader.registerAsParallelCapable();
69.119 }
69.120
69.121 - FactoryURLClassLoader(URL[] urls) {
69.122 - super(urls);
69.123 + FactoryURLClassLoader(URL[] urls, ClassLoader parent,
69.124 + AccessControlContext acc) {
69.125 + super(urls, parent, acc);
69.126 }
69.127
69.128 - public final synchronized Class loadClass(String name, boolean resolve)
69.129 + FactoryURLClassLoader(URL[] urls, AccessControlContext acc) {
69.130 + super(urls, acc);
69.131 + }
69.132 +
69.133 + public final Class loadClass(String name, boolean resolve)
69.134 throws ClassNotFoundException
69.135 {
69.136 // First check if we have permission to access the package. This
70.1 --- a/src/share/classes/java/nio/channels/DatagramChannel.java Thu Apr 16 17:42:00 2009 +0100
70.2 +++ b/src/share/classes/java/nio/channels/DatagramChannel.java Thu Apr 16 19:10:32 2009 -0700
70.3 @@ -261,7 +261,10 @@
70.4 *
70.5 * <p> This method may be invoked at any time. It will not have any effect
70.6 * on read or write operations that are already in progress at the moment
70.7 - * that it is invoked. </p>
70.8 + * that it is invoked. If this channel's socket is not bound then this method
70.9 + * will first cause the socket to be bound to an address that is assigned
70.10 + * automatically, as if invoking the {@link #bind bind} method with a
70.11 + * parameter of {@code null}. </p>
70.12 *
70.13 * @param remote
70.14 * The remote address to which this channel is to be connected
70.15 @@ -356,7 +359,10 @@
70.16 * <p> This method may be invoked at any time. If another thread has
70.17 * already initiated a read operation upon this channel, however, then an
70.18 * invocation of this method will block until the first operation is
70.19 - * complete. </p>
70.20 + * complete. If this channel's socket is not bound then this method will
70.21 + * first cause the socket to be bound to an address that is assigned
70.22 + * automatically, as if invoking the {@link #bind bind} method with a
70.23 + * parameter of {@code null}. </p>
70.24 *
70.25 * @param dst
70.26 * The buffer into which the datagram is to be transferred
70.27 @@ -413,7 +419,10 @@
70.28 * <p> This method may be invoked at any time. If another thread has
70.29 * already initiated a write operation upon this channel, however, then an
70.30 * invocation of this method will block until the first operation is
70.31 - * complete. </p>
70.32 + * complete. If this channel's socket is not bound then this method will
70.33 + * first cause the socket to be bound to an address that is assigned
70.34 + * automatically, as if by invoking the {@link #bind bind) method with a
70.35 + * parameter of {@code null}. </p>
70.36 *
70.37 * @param src
70.38 * The buffer containing the datagram to be sent
71.1 --- a/src/share/classes/java/security/SecureClassLoader.java Thu Apr 16 17:42:00 2009 +0100
71.2 +++ b/src/share/classes/java/security/SecureClassLoader.java Thu Apr 16 19:10:32 2009 -0700
71.3 @@ -1,5 +1,5 @@
71.4 /*
71.5 - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved.
71.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
71.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
71.8 *
71.9 * This code is free software; you can redistribute it and/or modify it
71.10 @@ -45,14 +45,19 @@
71.11 * succeed. Otherwise the object is not initialized and the object is
71.12 * useless.
71.13 */
71.14 - private boolean initialized = false;
71.15 + private final boolean initialized;
71.16
71.17 // HashMap that maps CodeSource to ProtectionDomain
71.18 - private HashMap<CodeSource, ProtectionDomain> pdcache =
71.19 + // @GuardedBy("pdcache")
71.20 + private final HashMap<CodeSource, ProtectionDomain> pdcache =
71.21 new HashMap<CodeSource, ProtectionDomain>(11);
71.22
71.23 private static final Debug debug = Debug.getInstance("scl");
71.24
71.25 + static {
71.26 + ClassLoader.registerAsParallelCapable();
71.27 + }
71.28 +
71.29 /**
71.30 * Creates a new SecureClassLoader using the specified parent
71.31 * class loader for delegation.
71.32 @@ -136,10 +141,7 @@
71.33 byte[] b, int off, int len,
71.34 CodeSource cs)
71.35 {
71.36 - if (cs == null)
71.37 - return defineClass(name, b, off, len);
71.38 - else
71.39 - return defineClass(name, b, off, len, getProtectionDomain(cs));
71.40 + return defineClass(name, b, off, len, getProtectionDomain(cs));
71.41 }
71.42
71.43 /**
71.44 @@ -172,10 +174,7 @@
71.45 protected final Class<?> defineClass(String name, java.nio.ByteBuffer b,
71.46 CodeSource cs)
71.47 {
71.48 - if (cs == null)
71.49 - return defineClass(name, b, (ProtectionDomain)null);
71.50 - else
71.51 - return defineClass(name, b, getProtectionDomain(cs));
71.52 + return defineClass(name, b, getProtectionDomain(cs));
71.53 }
71.54
71.55 /**
71.56 @@ -209,12 +208,10 @@
71.57 if (pd == null) {
71.58 PermissionCollection perms = getPermissions(cs);
71.59 pd = new ProtectionDomain(cs, perms, this, null);
71.60 - if (pd != null) {
71.61 - pdcache.put(cs, pd);
71.62 - if (debug != null) {
71.63 - debug.println(" getPermissions "+ pd);
71.64 - debug.println("");
71.65 - }
71.66 + pdcache.put(cs, pd);
71.67 + if (debug != null) {
71.68 + debug.println(" getPermissions "+ pd);
71.69 + debug.println("");
71.70 }
71.71 }
71.72 }
72.1 --- a/src/share/classes/java/util/TreeMap.java Thu Apr 16 17:42:00 2009 +0100
72.2 +++ b/src/share/classes/java/util/TreeMap.java Thu Apr 16 19:10:32 2009 -0700
72.3 @@ -1068,14 +1068,14 @@
72.4 }
72.5 public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
72.6 E toElement, boolean toInclusive) {
72.7 - return new TreeSet<E>(m.subMap(fromElement, fromInclusive,
72.8 - toElement, toInclusive));
72.9 + return new KeySet<E>(m.subMap(fromElement, fromInclusive,
72.10 + toElement, toInclusive));
72.11 }
72.12 public NavigableSet<E> headSet(E toElement, boolean inclusive) {
72.13 - return new TreeSet<E>(m.headMap(toElement, inclusive));
72.14 + return new KeySet<E>(m.headMap(toElement, inclusive));
72.15 }
72.16 public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
72.17 - return new TreeSet<E>(m.tailMap(fromElement, inclusive));
72.18 + return new KeySet<E>(m.tailMap(fromElement, inclusive));
72.19 }
72.20 public SortedSet<E> subSet(E fromElement, E toElement) {
72.21 return subSet(fromElement, true, toElement, false);
72.22 @@ -1087,7 +1087,7 @@
72.23 return tailSet(fromElement, true);
72.24 }
72.25 public NavigableSet<E> descendingSet() {
72.26 - return new TreeSet(m.descendingMap());
72.27 + return new KeySet(m.descendingMap());
72.28 }
72.29 }
72.30
73.1 --- a/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Thu Apr 16 17:42:00 2009 +0100
73.2 +++ b/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Thu Apr 16 19:10:32 2009 -0700
73.3 @@ -2394,15 +2394,14 @@
73.4 boolean fromInclusive,
73.5 E toElement,
73.6 boolean toInclusive) {
73.7 - return new ConcurrentSkipListSet<E>
73.8 - (m.subMap(fromElement, fromInclusive,
73.9 - toElement, toInclusive));
73.10 + return new KeySet<E>(m.subMap(fromElement, fromInclusive,
73.11 + toElement, toInclusive));
73.12 }
73.13 public NavigableSet<E> headSet(E toElement, boolean inclusive) {
73.14 - return new ConcurrentSkipListSet<E>(m.headMap(toElement, inclusive));
73.15 + return new KeySet<E>(m.headMap(toElement, inclusive));
73.16 }
73.17 public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
73.18 - return new ConcurrentSkipListSet<E>(m.tailMap(fromElement, inclusive));
73.19 + return new KeySet<E>(m.tailMap(fromElement, inclusive));
73.20 }
73.21 public NavigableSet<E> subSet(E fromElement, E toElement) {
73.22 return subSet(fromElement, true, toElement, false);
73.23 @@ -2414,7 +2413,7 @@
73.24 return tailSet(fromElement, true);
73.25 }
73.26 public NavigableSet<E> descendingSet() {
73.27 - return new ConcurrentSkipListSet(m.descendingMap());
73.28 + return new KeySet(m.descendingMap());
73.29 }
73.30 }
73.31
74.1 --- a/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Thu Apr 16 17:42:00 2009 +0100
74.2 +++ b/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Thu Apr 16 19:10:32 2009 -0700
74.3 @@ -166,6 +166,11 @@
74.4 static final int SIGNAL = -1;
74.5 /** waitStatus value to indicate thread is waiting on condition */
74.6 static final int CONDITION = -2;
74.7 + /**
74.8 + * waitStatus value to indicate the next acquireShared should
74.9 + * unconditionally propagate
74.10 + */
74.11 + static final int PROPAGATE = -3;
74.12
74.13 /**
74.14 * Status field, taking on only the values:
74.15 @@ -180,10 +185,16 @@
74.16 * Nodes never leave this state. In particular,
74.17 * a thread with cancelled node never again blocks.
74.18 * CONDITION: This node is currently on a condition queue.
74.19 - * It will not be used as a sync queue node until
74.20 - * transferred. (Use of this value here
74.21 - * has nothing to do with the other uses
74.22 - * of the field, but simplifies mechanics.)
74.23 + * It will not be used as a sync queue node
74.24 + * until transferred, at which time the status
74.25 + * will be set to 0. (Use of this value here has
74.26 + * nothing to do with the other uses of the
74.27 + * field, but simplifies mechanics.)
74.28 + * PROPAGATE: A releaseShared should be propagated to other
74.29 + * nodes. This is set (for head node only) in
74.30 + * doReleaseShared to ensure propagation
74.31 + * continues, even if other operations have
74.32 + * since intervened.
74.33 * 0: None of the above
74.34 *
74.35 * The values are arranged numerically to simplify use.
74.36 @@ -403,10 +414,13 @@
74.37 */
74.38 private void unparkSuccessor(Node node) {
74.39 /*
74.40 - * Try to clear status in anticipation of signalling. It is
74.41 - * OK if this fails or if status is changed by waiting thread.
74.42 + * If status is negative (i.e., possibly needing signal) try
74.43 + * to clear in anticipation of signalling. It is OK if this
74.44 + * fails or if status is changed by waiting thread.
74.45 */
74.46 - compareAndSetWaitStatus(node, Node.SIGNAL, 0);
74.47 + int ws = node.waitStatus;
74.48 + if (ws < 0)
74.49 + compareAndSetWaitStatus(node, ws, 0);
74.50
74.51 /*
74.52 * Thread to unpark is held in successor, which is normally
74.53 @@ -426,23 +440,70 @@
74.54 }
74.55
74.56 /**
74.57 + * Release action for shared mode -- signal successor and ensure
74.58 + * propagation. (Note: For exclusive mode, release just amounts
74.59 + * to calling unparkSuccessor of head if it needs signal.)
74.60 + */
74.61 + private void doReleaseShared() {
74.62 + /*
74.63 + * Ensure that a release propagates, even if there are other
74.64 + * in-progress acquires/releases. This proceeds in the usual
74.65 + * way of trying to unparkSuccessor of head if it needs
74.66 + * signal. But if it does not, status is set to PROPAGATE to
74.67 + * ensure that upon release, propagation continues.
74.68 + * Additionally, we must loop in case a new node is added
74.69 + * while we are doing this. Also, unlike other uses of
74.70 + * unparkSuccessor, we need to know if CAS to reset status
74.71 + * fails, if so rechecking.
74.72 + */
74.73 + for (;;) {
74.74 + Node h = head;
74.75 + if (h != null && h != tail) {
74.76 + int ws = h.waitStatus;
74.77 + if (ws == Node.SIGNAL) {
74.78 + if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))
74.79 + continue; // loop to recheck cases
74.80 + unparkSuccessor(h);
74.81 + }
74.82 + else if (ws == 0 &&
74.83 + !compareAndSetWaitStatus(h, 0, Node.PROPAGATE))
74.84 + continue; // loop on failed CAS
74.85 + }
74.86 + if (h == head) // loop if head changed
74.87 + break;
74.88 + }
74.89 + }
74.90 +
74.91 + /**
74.92 * Sets head of queue, and checks if successor may be waiting
74.93 - * in shared mode, if so propagating if propagate > 0.
74.94 + * in shared mode, if so propagating if either propagate > 0 or
74.95 + * PROPAGATE status was set.
74.96 *
74.97 - * @param pred the node holding waitStatus for node
74.98 * @param node the node
74.99 * @param propagate the return value from a tryAcquireShared
74.100 */
74.101 private void setHeadAndPropagate(Node node, long propagate) {
74.102 + Node h = head; // Record old head for check below
74.103 setHead(node);
74.104 - if (propagate > 0 && node.waitStatus != 0) {
74.105 - /*
74.106 - * Don't bother fully figuring out successor. If it
74.107 - * looks null, call unparkSuccessor anyway to be safe.
74.108 - */
74.109 + /*
74.110 + * Try to signal next queued node if:
74.111 + * Propagation was indicated by caller,
74.112 + * or was recorded (as h.waitStatus) by a previous operation
74.113 + * (note: this uses sign-check of waitStatus because
74.114 + * PROPAGATE status may transition to SIGNAL.)
74.115 + * and
74.116 + * The next node is waiting in shared mode,
74.117 + * or we don't know, because it appears null
74.118 + *
74.119 + * The conservatism in both of these checks may cause
74.120 + * unnecessary wake-ups, but only when there are multiple
74.121 + * racing acquires/releases, so most need signals now or soon
74.122 + * anyway.
74.123 + */
74.124 + if (propagate > 0 || h == null || h.waitStatus < 0) {
74.125 Node s = node.next;
74.126 if (s == null || s.isShared())
74.127 - unparkSuccessor(node);
74.128 + doReleaseShared();
74.129 }
74.130 }
74.131
74.132 @@ -465,23 +526,27 @@
74.133 while (pred.waitStatus > 0)
74.134 node.prev = pred = pred.prev;
74.135
74.136 - // Getting this before setting waitStatus ensures staleness
74.137 + // predNext is the apparent node to unsplice. CASes below will
74.138 + // fail if not, in which case, we lost race vs another cancel
74.139 + // or signal, so no further action is necessary.
74.140 Node predNext = pred.next;
74.141
74.142 - // Can use unconditional write instead of CAS here
74.143 + // Can use unconditional write instead of CAS here.
74.144 + // After this atomic step, other Nodes can skip past us.
74.145 + // Before, we are free of interference from other threads.
74.146 node.waitStatus = Node.CANCELLED;
74.147
74.148 - // If we are the tail, remove ourselves
74.149 + // If we are the tail, remove ourselves.
74.150 if (node == tail && compareAndSetTail(node, pred)) {
74.151 compareAndSetNext(pred, predNext, null);
74.152 } else {
74.153 - // If "active" predecessor found...
74.154 - if (pred != head
74.155 - && (pred.waitStatus == Node.SIGNAL
74.156 - || compareAndSetWaitStatus(pred, 0, Node.SIGNAL))
74.157 - && pred.thread != null) {
74.158 -
74.159 - // If successor is active, set predecessor's next link
74.160 + // If successor needs signal, try to set pred's next-link
74.161 + // so it will get one. Otherwise wake it up to propagate.
74.162 + int ws;
74.163 + if (pred != head &&
74.164 + ((ws = pred.waitStatus) == Node.SIGNAL ||
74.165 + (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) &&
74.166 + pred.thread != null) {
74.167 Node next = node.next;
74.168 if (next != null && next.waitStatus <= 0)
74.169 compareAndSetNext(pred, predNext, next);
74.170 @@ -503,14 +568,14 @@
74.171 * @return {@code true} if thread should block
74.172 */
74.173 private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {
74.174 - int s = pred.waitStatus;
74.175 - if (s < 0)
74.176 + int ws = pred.waitStatus;
74.177 + if (ws == Node.SIGNAL)
74.178 /*
74.179 * This node has already set status asking a release
74.180 * to signal it, so it can safely park.
74.181 */
74.182 return true;
74.183 - if (s > 0) {
74.184 + if (ws > 0) {
74.185 /*
74.186 * Predecessor was cancelled. Skip over predecessors and
74.187 * indicate retry.
74.188 @@ -519,14 +584,14 @@
74.189 node.prev = pred = pred.prev;
74.190 } while (pred.waitStatus > 0);
74.191 pred.next = node;
74.192 + } else {
74.193 + /*
74.194 + * waitStatus must be 0 or PROPAGATE. Indicate that we
74.195 + * need a signal, but don't park yet. Caller will need to
74.196 + * retry to make sure it cannot acquire before parking.
74.197 + */
74.198 + compareAndSetWaitStatus(pred, ws, Node.SIGNAL);
74.199 }
74.200 - else
74.201 - /*
74.202 - * Indicate that we need a signal, but don't park yet. Caller
74.203 - * will need to retry to make sure it cannot acquire before
74.204 - * parking.
74.205 - */
74.206 - compareAndSetWaitStatus(pred, 0, Node.SIGNAL);
74.207 return false;
74.208 }
74.209
74.210 @@ -1046,9 +1111,7 @@
74.211 */
74.212 public final boolean releaseShared(long arg) {
74.213 if (tryReleaseShared(arg)) {
74.214 - Node h = head;
74.215 - if (h != null && h.waitStatus != 0)
74.216 - unparkSuccessor(h);
74.217 + doReleaseShared();
74.218 return true;
74.219 }
74.220 return false;
74.221 @@ -1390,8 +1453,8 @@
74.222 * case the waitStatus can be transiently and harmlessly wrong).
74.223 */
74.224 Node p = enq(node);
74.225 - int c = p.waitStatus;
74.226 - if (c > 0 || !compareAndSetWaitStatus(p, c, Node.SIGNAL))
74.227 + int ws = p.waitStatus;
74.228 + if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL))
74.229 LockSupport.unpark(node.thread);
74.230 return true;
74.231 }
75.1 --- a/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Thu Apr 16 17:42:00 2009 +0100
75.2 +++ b/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Thu Apr 16 19:10:32 2009 -0700
75.3 @@ -389,6 +389,11 @@
75.4 static final int SIGNAL = -1;
75.5 /** waitStatus value to indicate thread is waiting on condition */
75.6 static final int CONDITION = -2;
75.7 + /**
75.8 + * waitStatus value to indicate the next acquireShared should
75.9 + * unconditionally propagate
75.10 + */
75.11 + static final int PROPAGATE = -3;
75.12
75.13 /**
75.14 * Status field, taking on only the values:
75.15 @@ -403,10 +408,16 @@
75.16 * Nodes never leave this state. In particular,
75.17 * a thread with cancelled node never again blocks.
75.18 * CONDITION: This node is currently on a condition queue.
75.19 - * It will not be used as a sync queue node until
75.20 - * transferred. (Use of this value here
75.21 - * has nothing to do with the other uses
75.22 - * of the field, but simplifies mechanics.)
75.23 + * It will not be used as a sync queue node
75.24 + * until transferred, at which time the status
75.25 + * will be set to 0. (Use of this value here has
75.26 + * nothing to do with the other uses of the
75.27 + * field, but simplifies mechanics.)
75.28 + * PROPAGATE: A releaseShared should be propagated to other
75.29 + * nodes. This is set (for head node only) in
75.30 + * doReleaseShared to ensure propagation
75.31 + * continues, even if other operations have
75.32 + * since intervened.
75.33 * 0: None of the above
75.34 *
75.35 * The values are arranged numerically to simplify use.
75.36 @@ -626,10 +637,13 @@
75.37 */
75.38 private void unparkSuccessor(Node node) {
75.39 /*
75.40 - * Try to clear status in anticipation of signalling. It is
75.41 - * OK if this fails or if status is changed by waiting thread.
75.42 + * If status is negative (i.e., possibly needing signal) try
75.43 + * to clear in anticipation of signalling. It is OK if this
75.44 + * fails or if status is changed by waiting thread.
75.45 */
75.46 - compareAndSetWaitStatus(node, Node.SIGNAL, 0);
75.47 + int ws = node.waitStatus;
75.48 + if (ws < 0)
75.49 + compareAndSetWaitStatus(node, ws, 0);
75.50
75.51 /*
75.52 * Thread to unpark is held in successor, which is normally
75.53 @@ -649,23 +663,70 @@
75.54 }
75.55
75.56 /**
75.57 + * Release action for shared mode -- signal successor and ensure
75.58 + * propagation. (Note: For exclusive mode, release just amounts
75.59 + * to calling unparkSuccessor of head if it needs signal.)
75.60 + */
75.61 + private void doReleaseShared() {
75.62 + /*
75.63 + * Ensure that a release propagates, even if there are other
75.64 + * in-progress acquires/releases. This proceeds in the usual
75.65 + * way of trying to unparkSuccessor of head if it needs
75.66 + * signal. But if it does not, status is set to PROPAGATE to
75.67 + * ensure that upon release, propagation continues.
75.68 + * Additionally, we must loop in case a new node is added
75.69 + * while we are doing this. Also, unlike other uses of
75.70 + * unparkSuccessor, we need to know if CAS to reset status
75.71 + * fails, if so rechecking.
75.72 + */
75.73 + for (;;) {
75.74 + Node h = head;
75.75 + if (h != null && h != tail) {
75.76 + int ws = h.waitStatus;
75.77 + if (ws == Node.SIGNAL) {
75.78 + if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))
75.79 + continue; // loop to recheck cases
75.80 + unparkSuccessor(h);
75.81 + }
75.82 + else if (ws == 0 &&
75.83 + !compareAndSetWaitStatus(h, 0, Node.PROPAGATE))
75.84 + continue; // loop on failed CAS
75.85 + }
75.86 + if (h == head) // loop if head changed
75.87 + break;
75.88 + }
75.89 + }
75.90 +
75.91 + /**
75.92 * Sets head of queue, and checks if successor may be waiting
75.93 - * in shared mode, if so propagating if propagate > 0.
75.94 + * in shared mode, if so propagating if either propagate > 0 or
75.95 + * PROPAGATE status was set.
75.96 *
75.97 - * @param pred the node holding waitStatus for node
75.98 * @param node the node
75.99 * @param propagate the return value from a tryAcquireShared
75.100 */
75.101 private void setHeadAndPropagate(Node node, int propagate) {
75.102 + Node h = head; // Record old head for check below
75.103 setHead(node);
75.104 - if (propagate > 0 && node.waitStatus != 0) {
75.105 - /*
75.106 - * Don't bother fully figuring out successor. If it
75.107 - * looks null, call unparkSuccessor anyway to be safe.
75.108 - */
75.109 + /*
75.110 + * Try to signal next queued node if:
75.111 + * Propagation was indicated by caller,
75.112 + * or was recorded (as h.waitStatus) by a previous operation
75.113 + * (note: this uses sign-check of waitStatus because
75.114 + * PROPAGATE status may transition to SIGNAL.)
75.115 + * and
75.116 + * The next node is waiting in shared mode,
75.117 + * or we don't know, because it appears null
75.118 + *
75.119 + * The conservatism in both of these checks may cause
75.120 + * unnecessary wake-ups, but only when there are multiple
75.121 + * racing acquires/releases, so most need signals now or soon
75.122 + * anyway.
75.123 + */
75.124 + if (propagate > 0 || h == null || h.waitStatus < 0) {
75.125 Node s = node.next;
75.126 if (s == null || s.isShared())
75.127 - unparkSuccessor(node);
75.128 + doReleaseShared();
75.129 }
75.130 }
75.131
75.132 @@ -688,23 +749,27 @@
75.133 while (pred.waitStatus > 0)
75.134 node.prev = pred = pred.prev;
75.135
75.136 - // Getting this before setting waitStatus ensures staleness
75.137 + // predNext is the apparent node to unsplice. CASes below will
75.138 + // fail if not, in which case, we lost race vs another cancel
75.139 + // or signal, so no further action is necessary.
75.140 Node predNext = pred.next;
75.141
75.142 - // Can use unconditional write instead of CAS here
75.143 + // Can use unconditional write instead of CAS here.
75.144 + // After this atomic step, other Nodes can skip past us.
75.145 + // Before, we are free of interference from other threads.
75.146 node.waitStatus = Node.CANCELLED;
75.147
75.148 - // If we are the tail, remove ourselves
75.149 + // If we are the tail, remove ourselves.
75.150 if (node == tail && compareAndSetTail(node, pred)) {
75.151 compareAndSetNext(pred, predNext, null);
75.152 } else {
75.153 - // If "active" predecessor found...
75.154 - if (pred != head
75.155 - && (pred.waitStatus == Node.SIGNAL
75.156 - || compareAndSetWaitStatus(pred, 0, Node.SIGNAL))
75.157 - && pred.thread != null) {
75.158 -
75.159 - // If successor is active, set predecessor's next link
75.160 + // If successor needs signal, try to set pred's next-link
75.161 + // so it will get one. Otherwise wake it up to propagate.
75.162 + int ws;
75.163 + if (pred != head &&
75.164 + ((ws = pred.waitStatus) == Node.SIGNAL ||
75.165 + (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) &&
75.166 + pred.thread != null) {
75.167 Node next = node.next;
75.168 if (next != null && next.waitStatus <= 0)
75.169 compareAndSetNext(pred, predNext, next);
75.170 @@ -726,14 +791,14 @@
75.171 * @return {@code true} if thread should block
75.172 */
75.173 private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) {
75.174 - int s = pred.waitStatus;
75.175 - if (s < 0)
75.176 + int ws = pred.waitStatus;
75.177 + if (ws == Node.SIGNAL)
75.178 /*
75.179 * This node has already set status asking a release
75.180 * to signal it, so it can safely park.
75.181 */
75.182 return true;
75.183 - if (s > 0) {
75.184 + if (ws > 0) {
75.185 /*
75.186 * Predecessor was cancelled. Skip over predecessors and
75.187 * indicate retry.
75.188 @@ -742,14 +807,14 @@
75.189 node.prev = pred = pred.prev;
75.190 } while (pred.waitStatus > 0);
75.191 pred.next = node;
75.192 + } else {
75.193 + /*
75.194 + * waitStatus must be 0 or PROPAGATE. Indicate that we
75.195 + * need a signal, but don't park yet. Caller will need to
75.196 + * retry to make sure it cannot acquire before parking.
75.197 + */
75.198 + compareAndSetWaitStatus(pred, ws, Node.SIGNAL);
75.199 }
75.200 - else
75.201 - /*
75.202 - * Indicate that we need a signal, but don't park yet. Caller
75.203 - * will need to retry to make sure it cannot acquire before
75.204 - * parking.
75.205 - */
75.206 - compareAndSetWaitStatus(pred, 0, Node.SIGNAL);
75.207 return false;
75.208 }
75.209
75.210 @@ -1269,9 +1334,7 @@
75.211 */
75.212 public final boolean releaseShared(int arg) {
75.213 if (tryReleaseShared(arg)) {
75.214 - Node h = head;
75.215 - if (h != null && h.waitStatus != 0)
75.216 - unparkSuccessor(h);
75.217 + doReleaseShared();
75.218 return true;
75.219 }
75.220 return false;
75.221 @@ -1613,8 +1676,8 @@
75.222 * case the waitStatus can be transiently and harmlessly wrong).
75.223 */
75.224 Node p = enq(node);
75.225 - int c = p.waitStatus;
75.226 - if (c > 0 || !compareAndSetWaitStatus(p, c, Node.SIGNAL))
75.227 + int ws = p.waitStatus;
75.228 + if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL))
75.229 LockSupport.unpark(node.thread);
75.230 return true;
75.231 }
76.1 --- a/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java Thu Apr 16 17:42:00 2009 +0100
76.2 +++ b/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java Thu Apr 16 19:10:32 2009 -0700
76.3 @@ -276,7 +276,7 @@
76.4 * Maintained as a ThreadLocal; cached in cachedHoldCounter
76.5 */
76.6 static final class HoldCounter {
76.7 - int count;
76.8 + int count = 0;
76.9 // Use id, not reference, to avoid garbage retention
76.10 final long tid = Thread.currentThread().getId();
76.11 }
76.12 @@ -293,8 +293,9 @@
76.13 }
76.14
76.15 /**
76.16 - * The number of read locks held by current thread.
76.17 + * The number of reentrant read locks held by current thread.
76.18 * Initialized only in constructor and readObject.
76.19 + * Removed whenever a thread's read hold count drops to 0.
76.20 */
76.21 private transient ThreadLocalHoldCounter readHolds;
76.22
76.23 @@ -304,17 +305,35 @@
76.24 * where the next thread to release is the last one to
76.25 * acquire. This is non-volatile since it is just used
76.26 * as a heuristic, and would be great for threads to cache.
76.27 + *
76.28 + * <p>Can outlive the Thread for which it is caching the read
76.29 + * hold count, but avoids garbage retention by not retaining a
76.30 + * reference to the Thread.
76.31 + *
76.32 + * <p>Accessed via a benign data race; relies on the memory
76.33 + * model's final field and out-of-thin-air guarantees.
76.34 */
76.35 private transient HoldCounter cachedHoldCounter;
76.36
76.37 /**
76.38 * firstReader is the first thread to have acquired the read lock.
76.39 * firstReaderHoldCount is firstReader's hold count.
76.40 - * This allows tracking of read holds for uncontended read
76.41 + *
76.42 + * <p>More precisely, firstReader is the unique thread that last
76.43 + * changed the shared count from 0 to 1, and has not released the
76.44 + * read lock since then; null if there is no such thread.
76.45 + *
76.46 + * <p>Cannot cause garbage retention unless the thread terminated
76.47 + * without relinquishing its read locks, since tryReleaseShared
76.48 + * sets it to null.
76.49 + *
76.50 + * <p>Accessed via a benign data race; relies on the memory
76.51 + * model's out-of-thin-air guarantees for references.
76.52 + *
76.53 + * <p>This allows tracking of read holds for uncontended read
76.54 * locks to be very cheap.
76.55 */
76.56 - private final static long INVALID_THREAD_ID = -1;
76.57 - private transient long firstReader = INVALID_THREAD_ID;
76.58 + private transient Thread firstReader = null;
76.59 private transient int firstReaderHoldCount;
76.60
76.61 Sync() {
76.62 @@ -393,16 +412,16 @@
76.63 }
76.64
76.65 protected final boolean tryReleaseShared(int unused) {
76.66 - long tid = Thread.currentThread().getId();
76.67 - if (firstReader == tid) {
76.68 + Thread current = Thread.currentThread();
76.69 + if (firstReader == current) {
76.70 // assert firstReaderHoldCount > 0;
76.71 if (firstReaderHoldCount == 1)
76.72 - firstReader = INVALID_THREAD_ID;
76.73 + firstReader = null;
76.74 else
76.75 firstReaderHoldCount--;
76.76 } else {
76.77 HoldCounter rh = cachedHoldCounter;
76.78 - if (rh == null || rh.tid != tid)
76.79 + if (rh == null || rh.tid != current.getId())
76.80 rh = readHolds.get();
76.81 int count = rh.count;
76.82 if (count <= 1) {
76.83 @@ -416,6 +435,9 @@
76.84 int c = getState();
76.85 int nextc = c - SHARED_UNIT;
76.86 if (compareAndSetState(c, nextc))
76.87 + // Releasing the read lock has no effect on readers,
76.88 + // but it may allow waiting writers to proceed if
76.89 + // both read and write locks are now free.
76.90 return nextc == 0;
76.91 }
76.92 }
76.93 @@ -450,15 +472,14 @@
76.94 if (!readerShouldBlock() &&
76.95 r < MAX_COUNT &&
76.96 compareAndSetState(c, c + SHARED_UNIT)) {
76.97 - long tid = current.getId();
76.98 if (r == 0) {
76.99 - firstReader = tid;
76.100 + firstReader = current;
76.101 firstReaderHoldCount = 1;
76.102 - } else if (firstReader == tid) {
76.103 + } else if (firstReader == current) {
76.104 firstReaderHoldCount++;
76.105 } else {
76.106 HoldCounter rh = cachedHoldCounter;
76.107 - if (rh == null || rh.tid != tid)
76.108 + if (rh == null || rh.tid != current.getId())
76.109 cachedHoldCounter = rh = readHolds.get();
76.110 else if (rh.count == 0)
76.111 readHolds.set(rh);
76.112 @@ -485,19 +506,17 @@
76.113 int c = getState();
76.114 if (exclusiveCount(c) != 0) {
76.115 if (getExclusiveOwnerThread() != current)
76.116 - //if (removeNeeded) readHolds.remove();
76.117 return -1;
76.118 // else we hold the exclusive lock; blocking here
76.119 // would cause deadlock.
76.120 } else if (readerShouldBlock()) {
76.121 // Make sure we're not acquiring read lock reentrantly
76.122 - long tid = current.getId();
76.123 - if (firstReader == tid) {
76.124 + if (firstReader == current) {
76.125 // assert firstReaderHoldCount > 0;
76.126 } else {
76.127 if (rh == null) {
76.128 rh = cachedHoldCounter;
76.129 - if (rh == null || rh.tid != tid) {
76.130 + if (rh == null || rh.tid != current.getId()) {
76.131 rh = readHolds.get();
76.132 if (rh.count == 0)
76.133 readHolds.remove();
76.134 @@ -510,25 +529,20 @@
76.135 if (sharedCount(c) == MAX_COUNT)
76.136 throw new Error("Maximum lock count exceeded");
76.137 if (compareAndSetState(c, c + SHARED_UNIT)) {
76.138 - long tid = current.getId();
76.139 if (sharedCount(c) == 0) {
76.140 - firstReader = tid;
76.141 + firstReader = current;
76.142 firstReaderHoldCount = 1;
76.143 - } else if (firstReader == tid) {
76.144 + } else if (firstReader == current) {
76.145 firstReaderHoldCount++;
76.146 } else {
76.147 - if (rh == null) {
76.148 + if (rh == null)
76.149 rh = cachedHoldCounter;
76.150 - if (rh != null && rh.tid == tid) {
76.151 - if (rh.count == 0)
76.152 - readHolds.set(rh);
76.153 - } else {
76.154 - rh = readHolds.get();
76.155 - }
76.156 - } else if (rh.count == 0)
76.157 + if (rh == null || rh.tid != current.getId())
76.158 + rh = readHolds.get();
76.159 + else if (rh.count == 0)
76.160 readHolds.set(rh);
76.161 + rh.count++;
76.162 cachedHoldCounter = rh; // cache for release
76.163 - rh.count++;
76.164 }
76.165 return 1;
76.166 }
76.167 @@ -572,15 +586,14 @@
76.168 if (r == MAX_COUNT)
76.169 throw new Error("Maximum lock count exceeded");
76.170 if (compareAndSetState(c, c + SHARED_UNIT)) {
76.171 - long tid = current.getId();
76.172 if (r == 0) {
76.173 - firstReader = tid;
76.174 + firstReader = current;
76.175 firstReaderHoldCount = 1;
76.176 - } else if (firstReader == tid) {
76.177 + } else if (firstReader == current) {
76.178 firstReaderHoldCount++;
76.179 } else {
76.180 HoldCounter rh = cachedHoldCounter;
76.181 - if (rh == null || rh.tid != tid)
76.182 + if (rh == null || rh.tid != current.getId())
76.183 cachedHoldCounter = rh = readHolds.get();
76.184 else if (rh.count == 0)
76.185 readHolds.set(rh);
76.186 @@ -626,12 +639,12 @@
76.187 if (getReadLockCount() == 0)
76.188 return 0;
76.189
76.190 - long tid = Thread.currentThread().getId();
76.191 - if (firstReader == tid)
76.192 + Thread current = Thread.currentThread();
76.193 + if (firstReader == current)
76.194 return firstReaderHoldCount;
76.195
76.196 HoldCounter rh = cachedHoldCounter;
76.197 - if (rh != null && rh.tid == tid)
76.198 + if (rh != null && rh.tid == current.getId())
76.199 return rh.count;
76.200
76.201 int count = readHolds.get().count;
76.202 @@ -647,7 +660,6 @@
76.203 throws java.io.IOException, ClassNotFoundException {
76.204 s.defaultReadObject();
76.205 readHolds = new ThreadLocalHoldCounter();
76.206 - firstReader = INVALID_THREAD_ID;
76.207 setState(0); // reset to unlocked state
76.208 }
76.209
77.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
77.2 +++ b/src/share/classes/java/util/zip/ZipConstants64.java Thu Apr 16 19:10:32 2009 -0700
77.3 @@ -0,0 +1,77 @@
77.4 +/*
77.5 + * Copyright 1995-1996 Sun Microsystems, Inc. All Rights Reserved.
77.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
77.7 + *
77.8 + * This code is free software; you can redistribute it and/or modify it
77.9 + * under the terms of the GNU General Public License version 2 only, as
77.10 + * published by the Free Software Foundation. Sun designates this
77.11 + * particular file as subject to the "Classpath" exception as provided
77.12 + * by Sun in the LICENSE file that accompanied this code.
77.13 + *
77.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
77.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
77.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
77.17 + * version 2 for more details (a copy is included in the LICENSE file that
77.18 + * accompanied this code).
77.19 + *
77.20 + * You should have received a copy of the GNU General Public License version
77.21 + * 2 along with this work; if not, write to the Free Software Foundation,
77.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
77.23 + *
77.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
77.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
77.26 + * have any questions.
77.27 + */
77.28 +
77.29 +package java.util.zip;
77.30 +
77.31 +/*
77.32 + * This class defines the constants that are used by the classes
77.33 + * which manipulate Zip64 files.
77.34 + */
77.35 +
77.36 +class ZipConstants64 {
77.37 +
77.38 + /*
77.39 + * ZIP64 constants
77.40 + */
77.41 + static final long ZIP64_ENDSIG = 0x06064b50L; // "PK\006\006"
77.42 + static final long ZIP64_LOCSIG = 0x07064b50L; // "PK\006\007"
77.43 + static final int ZIP64_ENDHDR = 56; // ZIP64 end header size
77.44 + static final int ZIP64_LOCHDR = 20; // ZIP64 end loc header size
77.45 + static final int ZIP64_EXTHDR = 24; // EXT header size
77.46 + static final int ZIP64_EXTID = 0x0001; // Extra field Zip64 header ID
77.47 +
77.48 + static final int ZIP64_MAGICCOUNT = 0xFFFF;
77.49 + static final long ZIP64_MAGICVAL = 0xFFFFFFFFL;
77.50 +
77.51 + /*
77.52 + * Zip64 End of central directory (END) header field offsets
77.53 + */
77.54 + static final int ZIP64_ENDLEN = 4; // size of zip64 end of central dir
77.55 + static final int ZIP64_ENDVEM = 12; // version made by
77.56 + static final int ZIP64_ENDVER = 14; // version needed to extract
77.57 + static final int ZIP64_ENDNMD = 16; // number of this disk
77.58 + static final int ZIP64_ENDDSK = 20; // disk number of start
77.59 + static final int ZIP64_ENDTOD = 24; // total number of entries on this disk
77.60 + static final int ZIP64_ENDTOT = 32; // total number of entries
77.61 + static final int ZIP64_ENDSIZ = 40; // central directory size in bytes
77.62 + static final int ZIP64_ENDOFF = 48; // offset of first CEN header
77.63 + static final int ZIP64_ENDEXT = 56; // zip64 extensible data sector
77.64 +
77.65 + /*
77.66 + * Zip64 End of central directory locator field offsets
77.67 + */
77.68 + static final int ZIP64_LOCDSK = 4; // disk number start
77.69 + static final int ZIP64_LOCOFF = 8; // offset of zip64 end
77.70 + static final int ZIP64_LOCTOT = 16; // total number of disks
77.71 +
77.72 + /*
77.73 + * Zip64 Extra local (EXT) header field offsets
77.74 + */
77.75 + static final int ZIP64_EXTCRC = 4; // uncompressed file crc-32 value
77.76 + static final int ZIP64_EXTSIZ = 8; // compressed size, 8-byte
77.77 + static final int ZIP64_EXTLEN = 16; // uncompressed size, 8-byte
77.78 +
77.79 + private ZipConstants64() {}
77.80 +}
78.1 --- a/src/share/classes/java/util/zip/ZipEntry.java Thu Apr 16 17:42:00 2009 +0100
78.2 +++ b/src/share/classes/java/util/zip/ZipEntry.java Thu Apr 16 19:10:32 2009 -0700
78.3 @@ -1,5 +1,5 @@
78.4 /*
78.5 - * Copyright 1995-2005 Sun Microsystems, Inc. All Rights Reserved.
78.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
78.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
78.8 *
78.9 * This code is free software; you can redistribute it and/or modify it
78.10 @@ -144,11 +144,13 @@
78.11 * Sets the uncompressed size of the entry data.
78.12 * @param size the uncompressed size in bytes
78.13 * @exception IllegalArgumentException if the specified size is less
78.14 - * than 0 or greater than 0xFFFFFFFF bytes
78.15 + * than 0, is greater than 0xFFFFFFFF when
78.16 + * <a href="package-summary.html#zip64">ZIP64 format</a> is not supported,
78.17 + * or is less than 0 when ZIP64 is supported
78.18 * @see #getSize()
78.19 */
78.20 public void setSize(long size) {
78.21 - if (size < 0 || size > 0xFFFFFFFFL) {
78.22 + if (size < 0) {
78.23 throw new IllegalArgumentException("invalid entry size");
78.24 }
78.25 this.size = size;
79.1 --- a/src/share/classes/java/util/zip/ZipInputStream.java Thu Apr 16 17:42:00 2009 +0100
79.2 +++ b/src/share/classes/java/util/zip/ZipInputStream.java Thu Apr 16 19:10:32 2009 -0700
79.3 @@ -1,5 +1,5 @@
79.4 /*
79.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
79.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
79.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
79.8 *
79.9 * This code is free software; you can redistribute it and/or modify it
79.10 @@ -29,6 +29,7 @@
79.11 import java.io.IOException;
79.12 import java.io.EOFException;
79.13 import java.io.PushbackInputStream;
79.14 +import static java.util.zip.ZipConstants64.*;
79.15
79.16 /**
79.17 * This class implements an input stream filter for reading files in the
79.18 @@ -285,6 +286,29 @@
79.19 byte[] bb = new byte[len];
79.20 readFully(bb, 0, len);
79.21 e.setExtra(bb);
79.22 + // extra fields are in "HeaderID(2)DataSize(2)Data... format
79.23 + if (e.csize == ZIP64_MAGICVAL || e.size == ZIP64_MAGICVAL) {
79.24 + int off = 0;
79.25 + while (off + 4 < len) {
79.26 + int sz = get16(bb, off + 2);
79.27 + if (get16(bb, off) == ZIP64_EXTID) {
79.28 + off += 4;
79.29 + // LOC extra zip64 entry MUST include BOTH original and
79.30 + // compressed file size fields
79.31 + if (sz < 16 || (off + sz) > len ) {
79.32 + // Invalid zip64 extra fields, simply skip. Even it's
79.33 + // rare, it's possible the entry size happens to be
79.34 + // the magic value and it "accidnetly" has some bytes
79.35 + // in extra match the id.
79.36 + return e;
79.37 + }
79.38 + e.size = get64(bb, off);
79.39 + e.csize = get64(bb, off + 8);
79.40 + break;
79.41 + }
79.42 + off += (sz + 4);
79.43 + }
79.44 + }
79.45 }
79.46 return e;
79.47 }
79.48 @@ -375,18 +399,36 @@
79.49 }
79.50 if ((flag & 8) == 8) {
79.51 /* "Data Descriptor" present */
79.52 - readFully(tmpbuf, 0, EXTHDR);
79.53 - long sig = get32(tmpbuf, 0);
79.54 - if (sig != EXTSIG) { // no EXTSIG present
79.55 - e.crc = sig;
79.56 - e.csize = get32(tmpbuf, EXTSIZ - EXTCRC);
79.57 - e.size = get32(tmpbuf, EXTLEN - EXTCRC);
79.58 - ((PushbackInputStream)in).unread(
79.59 - tmpbuf, EXTHDR - EXTCRC - 1, EXTCRC);
79.60 + if (inf.getBytesWritten() > ZIP64_MAGICVAL ||
79.61 + inf.getBytesRead() > ZIP64_MAGICVAL) {
79.62 + // ZIP64 format
79.63 + readFully(tmpbuf, 0, ZIP64_EXTHDR);
79.64 + long sig = get32(tmpbuf, 0);
79.65 + if (sig != EXTSIG) { // no EXTSIG present
79.66 + e.crc = sig;
79.67 + e.csize = get64(tmpbuf, ZIP64_EXTSIZ - ZIP64_EXTCRC);
79.68 + e.size = get64(tmpbuf, ZIP64_EXTLEN - ZIP64_EXTCRC);
79.69 + ((PushbackInputStream)in).unread(
79.70 + tmpbuf, ZIP64_EXTHDR - ZIP64_EXTCRC - 1, ZIP64_EXTCRC);
79.71 + } else {
79.72 + e.crc = get32(tmpbuf, ZIP64_EXTCRC);
79.73 + e.csize = get64(tmpbuf, ZIP64_EXTSIZ);
79.74 + e.size = get64(tmpbuf, ZIP64_EXTLEN);
79.75 + }
79.76 } else {
79.77 - e.crc = get32(tmpbuf, EXTCRC);
79.78 - e.csize = get32(tmpbuf, EXTSIZ);
79.79 - e.size = get32(tmpbuf, EXTLEN);
79.80 + readFully(tmpbuf, 0, EXTHDR);
79.81 + long sig = get32(tmpbuf, 0);
79.82 + if (sig != EXTSIG) { // no EXTSIG present
79.83 + e.crc = sig;
79.84 + e.csize = get32(tmpbuf, EXTSIZ - EXTCRC);
79.85 + e.size = get32(tmpbuf, EXTLEN - EXTCRC);
79.86 + ((PushbackInputStream)in).unread(
79.87 + tmpbuf, EXTHDR - EXTCRC - 1, EXTCRC);
79.88 + } else {
79.89 + e.crc = get32(tmpbuf, EXTCRC);
79.90 + e.csize = get32(tmpbuf, EXTSIZ);
79.91 + e.size = get32(tmpbuf, EXTLEN);
79.92 + }
79.93 }
79.94 }
79.95 if (e.size != inf.getBytesWritten()) {
79.96 @@ -433,6 +475,14 @@
79.97 * The bytes are assumed to be in Intel (little-endian) byte order.
79.98 */
79.99 private static final long get32(byte b[], int off) {
79.100 - return get16(b, off) | ((long)get16(b, off+2) << 16);
79.101 + return (get16(b, off) | ((long)get16(b, off+2) << 16)) & 0xffffffffL;
79.102 + }
79.103 +
79.104 + /*
79.105 + * Fetches signed 64-bit value from byte array at specified offset.
79.106 + * The bytes are assumed to be in Intel (little-endian) byte order.
79.107 + */
79.108 + private static final long get64(byte b[], int off) {
79.109 + return get32(b, off) | (get32(b, off+4) << 32);
79.110 }
79.111 }
80.1 --- a/src/share/classes/java/util/zip/ZipOutputStream.java Thu Apr 16 17:42:00 2009 +0100
80.2 +++ b/src/share/classes/java/util/zip/ZipOutputStream.java Thu Apr 16 19:10:32 2009 -0700
80.3 @@ -1,5 +1,5 @@
80.4 /*
80.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
80.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
80.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
80.8 *
80.9 * This code is free software; you can redistribute it and/or modify it
80.10 @@ -29,6 +29,7 @@
80.11 import java.io.IOException;
80.12 import java.util.Vector;
80.13 import java.util.HashSet;
80.14 +import static java.util.zip.ZipConstants64.*;
80.15
80.16 /**
80.17 * This class implements an output stream filter for writing files in the
80.18 @@ -343,26 +344,52 @@
80.19 private void writeLOC(XEntry xentry) throws IOException {
80.20 ZipEntry e = xentry.entry;
80.21 int flag = xentry.flag;
80.22 + int elen = (e.extra != null) ? e.extra.length : 0;
80.23 + boolean hasZip64 = false;
80.24 +
80.25 writeInt(LOCSIG); // LOC header signature
80.26 - writeShort(version(e)); // version needed to extract
80.27 - writeShort(flag); // general purpose bit flag
80.28 - writeShort(e.method); // compression method
80.29 - writeInt(e.time); // last modification time
80.30 +
80.31 if ((flag & 8) == 8) {
80.32 + writeShort(version(e)); // version needed to extract
80.33 + writeShort(flag); // general purpose bit flag
80.34 + writeShort(e.method); // compression method
80.35 + writeInt(e.time); // last modification time
80.36 +
80.37 // store size, uncompressed size, and crc-32 in data descriptor
80.38 // immediately following compressed entry data
80.39 writeInt(0);
80.40 writeInt(0);
80.41 writeInt(0);
80.42 } else {
80.43 - writeInt(e.crc); // crc-32
80.44 - writeInt(e.csize); // compressed size
80.45 - writeInt(e.size); // uncompressed size
80.46 + if (e.csize >= ZIP64_MAGICVAL || e.size >= ZIP64_MAGICVAL) {
80.47 + hasZip64 = true;
80.48 + writeShort(45); // ver 4.5 for zip64
80.49 + } else {
80.50 + writeShort(version(e)); // version needed to extract
80.51 + }
80.52 + writeShort(flag); // general purpose bit flag
80.53 + writeShort(e.method); // compression method
80.54 + writeInt(e.time); // last modification time
80.55 + writeInt(e.crc); // crc-32
80.56 + if (hasZip64) {
80.57 + writeInt(ZIP64_MAGICVAL);
80.58 + writeInt(ZIP64_MAGICVAL);
80.59 + elen += 20; //headid(2) + size(2) + size(8) + csize(8)
80.60 + } else {
80.61 + writeInt(e.csize); // compressed size
80.62 + writeInt(e.size); // uncompressed size
80.63 + }
80.64 }
80.65 byte[] nameBytes = getUTF8Bytes(e.name);
80.66 writeShort(nameBytes.length);
80.67 - writeShort(e.extra != null ? e.extra.length : 0);
80.68 + writeShort(elen);
80.69 writeBytes(nameBytes, 0, nameBytes.length);
80.70 + if (hasZip64) {
80.71 + writeShort(ZIP64_EXTID);
80.72 + writeShort(16);
80.73 + writeLong(e.size);
80.74 + writeLong(e.csize);
80.75 + }
80.76 if (e.extra != null) {
80.77 writeBytes(e.extra, 0, e.extra.length);
80.78 }
80.79 @@ -375,8 +402,13 @@
80.80 private void writeEXT(ZipEntry e) throws IOException {
80.81 writeInt(EXTSIG); // EXT header signature
80.82 writeInt(e.crc); // crc-32
80.83 - writeInt(e.csize); // compressed size
80.84 - writeInt(e.size); // uncompressed size
80.85 + if (e.csize >= ZIP64_MAGICVAL || e.size >= ZIP64_MAGICVAL) {
80.86 + writeLong(e.csize);
80.87 + writeLong(e.size);
80.88 + } else {
80.89 + writeInt(e.csize); // compressed size
80.90 + writeInt(e.size); // uncompressed size
80.91 + }
80.92 }
80.93
80.94 /*
80.95 @@ -387,18 +419,49 @@
80.96 ZipEntry e = xentry.entry;
80.97 int flag = xentry.flag;
80.98 int version = version(e);
80.99 +
80.100 + long csize = e.csize;
80.101 + long size = e.size;
80.102 + long offset = xentry.offset;
80.103 + int e64len = 0;
80.104 + boolean hasZip64 = false;
80.105 + if (e.csize >= ZIP64_MAGICVAL) {
80.106 + csize = ZIP64_MAGICVAL;
80.107 + e64len += 8; // csize(8)
80.108 + hasZip64 = true;
80.109 + }
80.110 + if (e.size >= ZIP64_MAGICVAL) {
80.111 + size = ZIP64_MAGICVAL; // size(8)
80.112 + e64len += 8;
80.113 + hasZip64 = true;
80.114 + }
80.115 + if (xentry.offset >= ZIP64_MAGICVAL) {
80.116 + offset = ZIP64_MAGICVAL;
80.117 + e64len += 8; // offset(8)
80.118 + hasZip64 = true;
80.119 + }
80.120 writeInt(CENSIG); // CEN header signature
80.121 - writeShort(version); // version made by
80.122 - writeShort(version); // version needed to extract
80.123 + if (hasZip64) {
80.124 + writeShort(45); // ver 4.5 for zip64
80.125 + writeShort(45);
80.126 + } else {
80.127 + writeShort(version); // version made by
80.128 + writeShort(version); // version needed to extract
80.129 + }
80.130 writeShort(flag); // general purpose bit flag
80.131 writeShort(e.method); // compression method
80.132 writeInt(e.time); // last modification time
80.133 writeInt(e.crc); // crc-32
80.134 - writeInt(e.csize); // compressed size
80.135 - writeInt(e.size); // uncompressed size
80.136 + writeInt(csize); // compressed size
80.137 + writeInt(size); // uncompressed size
80.138 byte[] nameBytes = getUTF8Bytes(e.name);
80.139 writeShort(nameBytes.length);
80.140 - writeShort(e.extra != null ? e.extra.length : 0);
80.141 + if (hasZip64) {
80.142 + // + headid(2) + datasize(2)
80.143 + writeShort(e64len + 4 + (e.extra != null ? e.extra.length : 0));
80.144 + } else {
80.145 + writeShort(e.extra != null ? e.extra.length : 0);
80.146 + }
80.147 byte[] commentBytes;
80.148 if (e.comment != null) {
80.149 commentBytes = getUTF8Bytes(e.comment);
80.150 @@ -410,8 +473,18 @@
80.151 writeShort(0); // starting disk number
80.152 writeShort(0); // internal file attributes (unused)
80.153 writeInt(0); // external file attributes (unused)
80.154 - writeInt(xentry.offset); // relative offset of local header
80.155 + writeInt(offset); // relative offset of local header
80.156 writeBytes(nameBytes, 0, nameBytes.length);
80.157 + if (hasZip64) {
80.158 + writeShort(ZIP64_EXTID);// Zip64 extra
80.159 + writeShort(e64len);
80.160 + if (size == ZIP64_MAGICVAL)
80.161 + writeLong(e.size);
80.162 + if (csize == ZIP64_MAGICVAL)
80.163 + writeLong(e.csize);
80.164 + if (offset == ZIP64_MAGICVAL)
80.165 + writeLong(xentry.offset);
80.166 + }
80.167 if (e.extra != null) {
80.168 writeBytes(e.extra, 0, e.extra.length);
80.169 }
80.170 @@ -424,15 +497,50 @@
80.171 * Writes end of central directory (END) header.
80.172 */
80.173 private void writeEND(long off, long len) throws IOException {
80.174 + boolean hasZip64 = false;
80.175 + long xlen = len;
80.176 + long xoff = off;
80.177 + if (xlen >= ZIP64_MAGICVAL) {
80.178 + xlen = ZIP64_MAGICVAL;
80.179 + hasZip64 = true;
80.180 + }
80.181 + if (xoff >= ZIP64_MAGICVAL) {
80.182 + xoff = ZIP64_MAGICVAL;
80.183 + hasZip64 = true;
80.184 + }
80.185 int count = xentries.size();
80.186 - writeInt(ENDSIG); // END record signature
80.187 - writeShort(0); // number of this disk
80.188 - writeShort(0); // central directory start disk
80.189 - writeShort(count); // number of directory entries on disk
80.190 - writeShort(count); // total number of directory entries
80.191 - writeInt(len); // length of central directory
80.192 - writeInt(off); // offset of central directory
80.193 - if (comment != null) { // zip file comment
80.194 + if (count >= ZIP64_MAGICCOUNT) {
80.195 + count = ZIP64_MAGICCOUNT;
80.196 + hasZip64 = true;
80.197 + }
80.198 + if (hasZip64) {
80.199 + long off64 = written;
80.200 + //zip64 end of central directory record
80.201 + writeInt(ZIP64_ENDSIG); // zip64 END record signature
80.202 + writeLong(ZIP64_ENDHDR - 12); // size of zip64 end
80.203 + writeShort(45); // version made by
80.204 + writeShort(45); // version needed to extract
80.205 + writeInt(0); // number of this disk
80.206 + writeInt(0); // central directory start disk
80.207 + writeLong(xentries.size()); // number of directory entires on disk
80.208 + writeLong(xentries.size()); // number of directory entires
80.209 + writeLong(len); // length of central directory
80.210 + writeLong(off); // offset of central directory
80.211 +
80.212 + //zip64 end of central directory locator
80.213 + writeInt(ZIP64_LOCSIG); // zip64 END locator signature
80.214 + writeInt(0); // zip64 END start disk
80.215 + writeLong(off64); // offset of zip64 END
80.216 + writeInt(1); // total number of disks (?)
80.217 + }
80.218 + writeInt(ENDSIG); // END record signature
80.219 + writeShort(0); // number of this disk
80.220 + writeShort(0); // central directory start disk
80.221 + writeShort(count); // number of directory entries on disk
80.222 + writeShort(count); // total number of directory entries
80.223 + writeInt(xlen); // length of central directory
80.224 + writeInt(xoff); // offset of central directory
80.225 + if (comment != null) { // zip file comment
80.226 byte[] b = getUTF8Bytes(comment);
80.227 writeShort(b.length);
80.228 writeBytes(b, 0, b.length);
80.229 @@ -464,6 +572,22 @@
80.230 }
80.231
80.232 /*
80.233 + * Writes a 64-bit int to the output stream in little-endian byte order.
80.234 + */
80.235 + private void writeLong(long v) throws IOException {
80.236 + OutputStream out = this.out;
80.237 + out.write((int)((v >>> 0) & 0xff));
80.238 + out.write((int)((v >>> 8) & 0xff));
80.239 + out.write((int)((v >>> 16) & 0xff));
80.240 + out.write((int)((v >>> 24) & 0xff));
80.241 + out.write((int)((v >>> 32) & 0xff));
80.242 + out.write((int)((v >>> 40) & 0xff));
80.243 + out.write((int)((v >>> 48) & 0xff));
80.244 + out.write((int)((v >>> 56) & 0xff));
80.245 + written += 8;
80.246 + }
80.247 +
80.248 + /*
80.249 * Writes an array of bytes to the output stream.
80.250 */
80.251 private void writeBytes(byte[] b, int off, int len) throws IOException {
81.1 --- a/src/share/classes/java/util/zip/package.html Thu Apr 16 17:42:00 2009 +0100
81.2 +++ b/src/share/classes/java/util/zip/package.html Thu Apr 16 19:10:32 2009 -0700
81.3 @@ -46,6 +46,13 @@
81.4 </a> - a detailed description of the Info-ZIP format upon which
81.5 the <code>java.util.zip</code> classes are based.
81.6 <p>
81.7 + <a name="zip64">
81.8 + <li>An implementation may optionally support the ZIP64(tm) format extensions
81.9 + defined by the
81.10 + <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
81.11 + PKWARE ZIP File Format Specification</a>. The ZIP64(tm) format extensions
81.12 + are used to overcome the size limitations of the original ZIP format.
81.13 +<p>
81.14 <li><a href="http://www.isi.edu/in-notes/rfc1950.txt">
81.15 ZLIB Compressed Data Format Specification version 3.3</a>
81.16
81.17 @@ -70,7 +77,6 @@
81.18 <li>CRC-32 checksum is described in RFC 1952 (above)
81.19 <p>
81.20 <li>Adler-32 checksum is described in RFC 1950 (above)
81.21 -
81.22 </ul>
81.23
81.24
82.1 --- a/src/share/classes/javax/swing/AbstractButton.java Thu Apr 16 17:42:00 2009 +0100
82.2 +++ b/src/share/classes/javax/swing/AbstractButton.java Thu Apr 16 19:10:32 2009 -0700
82.3 @@ -1,5 +1,5 @@
82.4 /*
82.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
82.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
82.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
82.8 *
82.9 * This code is free software; you can redistribute it and/or modify it
82.10 @@ -1545,6 +1545,9 @@
82.11 * A mnemonic must correspond to a single key on the keyboard
82.12 * and should be specified using one of the <code>VK_XXX</code>
82.13 * keycodes defined in <code>java.awt.event.KeyEvent</code>.
82.14 + * These codes and the wider array of codes for international
82.15 + * keyboards may be obtained through
82.16 + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
82.17 * Mnemonics are case-insensitive, therefore a key event
82.18 * with the corresponding keycode would cause the button to be
82.19 * activated whether or not the Shift modifier was pressed.
83.1 --- a/src/share/classes/javax/swing/Action.java Thu Apr 16 17:42:00 2009 +0100
83.2 +++ b/src/share/classes/javax/swing/Action.java Thu Apr 16 19:10:32 2009 -0700
83.3 @@ -1,5 +1,5 @@
83.4 /*
83.5 - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved.
83.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
83.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
83.8 *
83.9 * This code is free software; you can redistribute it and/or modify it
83.10 @@ -272,7 +272,9 @@
83.11 * one of the <code>KeyEvent</code> key codes. The value is
83.12 * commonly used to specify a mnemonic. For example:
83.13 * <code>myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A)</code>
83.14 - * sets the mnemonic of <code>myAction</code> to 'a'.
83.15 + * sets the mnemonic of <code>myAction</code> to 'a', while
83.16 + * <code>myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.getExtendedKeyCodeForChar('\u0444'))</code>
83.17 + * sets the mnemonic of <code>myAction</code> to Cyrillic letter "Ef".
83.18 *
83.19 * @since 1.3
83.20 */
84.1 --- a/src/share/classes/javax/swing/JComponent.java Thu Apr 16 17:42:00 2009 +0100
84.2 +++ b/src/share/classes/javax/swing/JComponent.java Thu Apr 16 19:10:32 2009 -0700
84.3 @@ -1,5 +1,5 @@
84.4 /*
84.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
84.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
84.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
84.8 *
84.9 * This code is free software; you can redistribute it and/or modify it
84.10 @@ -2888,7 +2888,10 @@
84.11 return false;
84.12 }
84.13 // Get the KeyStroke
84.14 + // There may be two keystrokes associated with a low-level key event;
84.15 + // in this case a keystroke made of an extended key code has a priority.
84.16 KeyStroke ks;
84.17 + KeyStroke ksE = null;
84.18
84.19 if (e.getID() == KeyEvent.KEY_TYPED) {
84.20 ks = KeyStroke.getKeyStroke(e.getKeyChar());
84.21 @@ -2896,9 +2899,18 @@
84.22 else {
84.23 ks = KeyStroke.getKeyStroke(e.getKeyCode(),e.getModifiers(),
84.24 (pressed ? false:true));
84.25 + if (e.getKeyCode() != e.getExtendedKeyCode()) {
84.26 + ksE = KeyStroke.getKeyStroke(e.getExtendedKeyCode(),e.getModifiers(),
84.27 + (pressed ? false:true));
84.28 + }
84.29 }
84.30
84.31 - /* Do we have a key binding for e? */
84.32 + // Do we have a key binding for e?
84.33 + // If we have a binding by an extended code, use it.
84.34 + // If not, check for regular code binding.
84.35 + if(ksE != null && processKeyBinding(ksE, e, WHEN_FOCUSED, pressed)) {
84.36 + return true;
84.37 + }
84.38 if(processKeyBinding(ks, e, WHEN_FOCUSED, pressed))
84.39 return true;
84.40
84.41 @@ -2910,6 +2922,9 @@
84.42 while (parent != null && !(parent instanceof Window) &&
84.43 !(parent instanceof Applet)) {
84.44 if(parent instanceof JComponent) {
84.45 + if(ksE != null && ((JComponent)parent).processKeyBinding(ksE, e,
84.46 + WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, pressed))
84.47 + return true;
84.48 if(((JComponent)parent).processKeyBinding(ks, e,
84.49 WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, pressed))
84.50 return true;
85.1 --- a/src/share/classes/javax/swing/JLabel.java Thu Apr 16 17:42:00 2009 +0100
85.2 +++ b/src/share/classes/javax/swing/JLabel.java Thu Apr 16 19:10:32 2009 -0700
85.3 @@ -1,5 +1,5 @@
85.4 /*
85.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
85.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
85.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
85.8 *
85.9 * This code is free software; you can redistribute it and/or modify it
85.10 @@ -503,10 +503,10 @@
85.11 * @see #setDisplayedMnemonic(int)
85.12 */
85.13 public void setDisplayedMnemonic(char aChar) {
85.14 - int vk = (int) aChar;
85.15 - if(vk >= 'a' && vk <='z')
85.16 - vk -= ('a' - 'A');
85.17 - setDisplayedMnemonic(vk);
85.18 + int vk = java.awt.event.KeyEvent.getExtendedKeyCodeForChar(aChar);
85.19 + if (vk != java.awt.event.KeyEvent.VK_UNDEFINED) {
85.20 + setDisplayedMnemonic(vk);
85.21 + }
85.22 }
85.23
85.24
86.1 --- a/src/share/classes/javax/swing/JTabbedPane.java Thu Apr 16 17:42:00 2009 +0100
86.2 +++ b/src/share/classes/javax/swing/JTabbedPane.java Thu Apr 16 19:10:32 2009 -0700
86.3 @@ -1,5 +1,5 @@
86.4 /*
86.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
86.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
86.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
86.8 *
86.9 * This code is free software; you can redistribute it and/or modify it
86.10 @@ -1628,7 +1628,9 @@
86.11 * <p>
86.12 * A mnemonic must correspond to a single key on the keyboard
86.13 * and should be specified using one of the <code>VK_XXX</code>
86.14 - * keycodes defined in <code>java.awt.event.KeyEvent</code>.
86.15 + * keycodes defined in <code>java.awt.event.KeyEvent</code>
86.16 + * or one of the extended keycodes obtained through
86.17 + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
86.18 * Mnemonics are case-insensitive, therefore a key event
86.19 * with the corresponding keycode would cause the button to be
86.20 * activated whether or not the Shift modifier was pressed.
87.1 --- a/src/share/classes/javax/swing/KeyStroke.java Thu Apr 16 17:42:00 2009 +0100
87.2 +++ b/src/share/classes/javax/swing/KeyStroke.java Thu Apr 16 19:10:32 2009 -0700
87.3 @@ -1,5 +1,5 @@
87.4 /*
87.5 - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
87.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
87.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
87.8 *
87.9 * This code is free software; you can redistribute it and/or modify it
87.10 @@ -162,6 +162,9 @@
87.11 * <li>java.awt.event.KeyEvent.VK_TAB
87.12 * <li>java.awt.event.KeyEvent.VK_SPACE
87.13 * </ul>
87.14 + * Alternatively, the key code may be obtained by calling
87.15 + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
87.16 + *
87.17 * The modifiers consist of any combination of:<ul>
87.18 * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK
87.19 * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK
87.20 @@ -210,6 +213,9 @@
87.21 * <li>java.awt.event.KeyEvent.VK_TAB
87.22 * <li>java.awt.event.KeyEvent.VK_SPACE
87.23 * </ul>
87.24 + * Alternatively, the key code may be obtained by calling
87.25 + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>.
87.26 + *
87.27 * The modifiers consist of any combination of:<ul>
87.28 * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK
87.29 * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK
88.1 --- a/src/share/classes/javax/swing/KeyboardManager.java Thu Apr 16 17:42:00 2009 +0100
88.2 +++ b/src/share/classes/javax/swing/KeyboardManager.java Thu Apr 16 19:10:32 2009 -0700
88.3 @@ -1,5 +1,5 @@
88.4 /*
88.5 - * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved.
88.6 + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
88.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
88.8 *
88.9 * This code is free software; you can redistribute it and/or modify it
88.10 @@ -212,19 +212,35 @@
88.11 Thread.dumpStack();
88.12 }
88.13
88.14 + // There may be two keystrokes associated with a low-level key event;
88.15 + // in this case a keystroke made of an extended key code has a priority.
88.16 KeyStroke ks;
88.17 + KeyStroke ksE = null;
88.18
88.19
88.20 if(e.getID() == KeyEvent.KEY_TYPED) {
88.21 ks=KeyStroke.getKeyStroke(e.getKeyChar());
88.22 } else {
88.23 + if(e.getKeyCode() != e.getExtendedKeyCode()) {
88.24 + ksE=KeyStroke.getKeyStroke(e.getExtendedKeyCode(), e.getModifiers(), !pressed);
88.25 + }
88.26 ks=KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers(), !pressed);
88.27 }
88.28
88.29 Hashtable keyMap = containerMap.get(topAncestor);
88.30 if (keyMap != null) { // this container isn't registered, so bail
88.31
88.32 - Object tmp = keyMap.get(ks);
88.33 + Object tmp = null;
88.34 + // extended code has priority
88.35 + if( ksE != null ) {
88.36 + tmp = keyMap.get(ksE);
88.37 + if( tmp != null ) {
88.38 + ks = ksE;
88.39 + }
88.40 + }
88.41 + if( tmp == null ) {
88.42 + tmp = keyMap.get(ks);
88.43 + }
88.44
88.45 if (tmp == null) {
88.46 // don't do anything
88.47 @@ -269,7 +285,12 @@
88.48 while (iter.hasMoreElements()) {
88.49 JMenuBar mb = (JMenuBar)iter.nextElement();
88.50 if ( mb.isShowing() && mb.isEnabled() ) { // don't want to give these out
88.51 - fireBinding(mb, ks, e, pressed);
88.52 + if( !(ks.equals(ksE)) ) {
88.53 + fireBinding(mb, ksE, e, pressed);
88.54 + }
88.55 + if(ks.equals(ksE) || !e.isConsumed()) {
88.56 + fireBinding(mb, ks, e, pressed);
88.57 + }
88.58 if (e.isConsumed()) {
88.59 return true;
88.60 }
89.1 --- a/src/share/classes/javax/swing/PopupFactory.java Thu Apr 16 17:42:00 2009 +0100
89.2 +++ b/src/share/classes/javax/swing/PopupFactory.java Thu Apr 16 19:10:32 2009 -0700
89.3 @@ -552,14 +552,15 @@
89.4 boolean result = false;
89.5 Component component = getComponent();
89.6 if (owner != null && component != null) {
89.7 - Container parent = (Container) SwingUtilities.getRoot(owner);
89.8 int popupWidth = component.getWidth();
89.9 int popupHeight = component.getHeight();
89.10 - Rectangle parentBounds = parent.getBounds();
89.11 +
89.12 + Container parent = (Container) SwingUtilities.getRoot(owner);
89.13 if (parent instanceof JFrame ||
89.14 parent instanceof JDialog ||
89.15 parent instanceof JWindow) {
89.16
89.17 + Rectangle parentBounds = parent.getBounds();
89.18 Insets i = parent.getInsets();
89.19 parentBounds.x += i.left;
89.20 parentBounds.y += i.top;
89.21 @@ -577,11 +578,11 @@
89.22 .contains(x, y, popupWidth, popupHeight);
89.23 }
89.24 } else if (parent instanceof JApplet) {
89.25 + Rectangle parentBounds = parent.getBounds();
89.26 Point p = parent.getLocationOnScreen();
89.27 parentBounds.x = p.x;
89.28 parentBounds.y = p.y;
89.29 - result = parentBounds
89.30 - .contains(x, y, popupWidth, popupHeight);
89.31 + result = parentBounds.contains(x, y, popupWidth, popupHeight);
89.32 }
89.33 }
89.34 return result;
90.1 --- a/src/share/classes/javax/swing/RepaintManager.java Thu Apr 16 17:42:00 2009 +0100
90.2 +++ b/src/share/classes/javax/swing/RepaintManager.java Thu Apr 16 19:10:32 2009 -0700
90.3 @@ -1,5 +1,5 @@
90.4 /*
90.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
90.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
90.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90.8 *
90.9 * This code is free software; you can redistribute it and/or modify it
90.10 @@ -34,6 +34,7 @@
90.11 import java.util.*;
90.12 import java.applet.*;
90.13
90.14 +import sun.awt.AWTAccessor;
90.15 import sun.awt.AppContext;
90.16 import sun.awt.DisplayChangedListener;
90.17 import sun.awt.SunToolkit;
90.18 @@ -716,6 +717,44 @@
90.19 }
90.20 }
90.21
90.22 + private Map<Component,Rectangle>
90.23 + updateWindows(Map<Component,Rectangle> dirtyComponents)
90.24 + {
90.25 + Toolkit toolkit = Toolkit.getDefaultToolkit();
90.26 + if (!(toolkit instanceof SunToolkit &&
90.27 + ((SunToolkit)toolkit).needUpdateWindow()))
90.28 + {
90.29 + return dirtyComponents;
90.30 + }
90.31 +
90.32 + Set<Window> windows = new HashSet<Window>();
90.33 + Set<Component> dirtyComps = dirtyComponents.keySet();
90.34 + for (Iterator<Component> it = dirtyComps.iterator(); it.hasNext();) {
90.35 + Component dirty = it.next();
90.36 + Window window = dirty instanceof Window ?
90.37 + (Window)dirty :
90.38 + SwingUtilities.getWindowAncestor(dirty);
90.39 +
90.40 + if (window != null &&
90.41 + !AWTAccessor.getWindowAccessor().isOpaque(window))
90.42 + {
90.43 + // if this component's toplevel is perpixel translucent, it will
90.44 + // be repainted below
90.45 + it.remove();
90.46 + // add to the set of windows to update (so that we don't update
90.47 + // the window many times for each component to be repainted that
90.48 + // belongs to this window)
90.49 + windows.add(window);
90.50 + }
90.51 + }
90.52 +
90.53 + for (Window window : windows) {
90.54 + AWTAccessor.getWindowAccessor().updateWindow(window, null);
90.55 + }
90.56 +
90.57 + return dirtyComponents;
90.58 + }
90.59 +
90.60 /**
90.61 * Paint all of the components that have been marked dirty.
90.62 *
90.63 @@ -749,6 +788,10 @@
90.64 int localBoundsW;
90.65 Enumeration keys;
90.66
90.67 + // the components belonging to perpixel-translucent windows will be
90.68 + // removed from the list
90.69 + tmpDirtyComponents = updateWindows(tmpDirtyComponents);
90.70 +
90.71 roots = new ArrayList<Component>(count);
90.72
90.73 for (Component dirty : tmpDirtyComponents.keySet()) {
91.1 --- a/src/share/classes/javax/swing/SwingUtilities.java Thu Apr 16 17:42:00 2009 +0100
91.2 +++ b/src/share/classes/javax/swing/SwingUtilities.java Thu Apr 16 19:10:32 2009 -0700
91.3 @@ -1,5 +1,5 @@
91.4 /*
91.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
91.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
91.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
91.8 *
91.9 * This code is free software; you can redistribute it and/or modify it
91.10 @@ -1589,15 +1589,6 @@
91.11 * processing the key bindings associated with JComponents.
91.12 */
91.13 static boolean isValidKeyEventForKeyBindings(KeyEvent e) {
91.14 - if (e.getID() == KeyEvent.KEY_TYPED) {
91.15 - int mod = e.getModifiers();
91.16 - if (((mod & ActionEvent.ALT_MASK) != 0) &&
91.17 - ((mod & ActionEvent.CTRL_MASK) == 0)) {
91.18 - // filter out typed "alt-?" keys, but not those created
91.19 - // with AltGr, and not control characters
91.20 - return false;
91.21 - }
91.22 - }
91.23 return true;
91.24 }
91.25
92.1 --- a/src/share/classes/javax/swing/SwingWorker.java Thu Apr 16 17:42:00 2009 +0100
92.2 +++ b/src/share/classes/javax/swing/SwingWorker.java Thu Apr 16 19:10:32 2009 -0700
92.3 @@ -1,5 +1,5 @@
92.4 /*
92.5 - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
92.6 + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
92.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
92.8 *
92.9 * This code is free software; you can redistribute it and/or modify it
92.10 @@ -778,35 +778,33 @@
92.11 threadFactory);
92.12 appContext.put(SwingWorker.class, executorService);
92.13
92.14 - //register shutdown hook for this executor service
92.15 + // Don't use ShutdownHook here as it's not enough. We should track
92.16 + // AppContext disposal instead of JVM shutdown, see 6799345 for details
92.17 final ExecutorService es = executorService;
92.18 - final Runnable shutdownHook =
92.19 - new Runnable() {
92.20 - final WeakReference<ExecutorService> executorServiceRef =
92.21 - new WeakReference<ExecutorService>(es);
92.22 - public void run() {
92.23 - final ExecutorService executorService =
92.24 - executorServiceRef.get();
92.25 - if (executorService != null) {
92.26 - AccessController.doPrivileged(
92.27 - new PrivilegedAction<Void>() {
92.28 - public Void run() {
92.29 - executorService.shutdown();
92.30 - return null;
92.31 + appContext.addPropertyChangeListener(AppContext.DISPOSED_PROPERTY_NAME,
92.32 + new PropertyChangeListener() {
92.33 + @Override
92.34 + public void propertyChange(PropertyChangeEvent pce) {
92.35 + boolean disposed = (Boolean)pce.getNewValue();
92.36 + if (disposed) {
92.37 + final WeakReference<ExecutorService> executorServiceRef =
92.38 + new WeakReference<ExecutorService>(es);
92.39 + final ExecutorService executorService =
92.40 + executorServiceRef.get();
92.41 + if (executorService != null) {
92.42 + AccessController.doPrivileged(
92.43 + new PrivilegedAction<Void>() {
92.44 + public Void run() {
92.45 + executorService.shutdown();
92.46 + return null;
92.47 + }
92.48 }
92.49 - });
92.50 + );
92.51 + }
92.52 }
92.53 }
92.54 - };
92.55 -
92.56 - AccessController.doPrivileged(
92.57 - new PrivilegedAction<Void>() {
92.58 - public Void run() {
92.59 - Runtime.getRuntime().addShutdownHook(
92.60 - new Thread(shutdownHook));
92.61 - return null;
92.62 - }
92.63 - });
92.64 + }
92.65 + );
92.66 }
92.67 return executorService;
92.68 }
93.1 --- a/src/share/classes/javax/swing/TimerQueue.java Thu Apr 16 17:42:00 2009 +0100
93.2 +++ b/src/share/classes/javax/swing/TimerQueue.java Thu Apr 16 19:10:32 2009 -0700
93.3 @@ -1,5 +1,5 @@
93.4 /*
93.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
93.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
93.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
93.8 *
93.9 * This code is free software; you can redistribute it and/or modify it
93.10 @@ -191,7 +191,12 @@
93.11 } finally {
93.12 timer.getLock().unlock();
93.13 }
93.14 - } catch (InterruptedException ignore) {
93.15 + } catch (InterruptedException ie) {
93.16 + // Shouldn't ignore InterruptedExceptions here, so AppContext
93.17 + // is disposed gracefully, see 6799345 for details
93.18 + if (AppContext.getAppContext().isDisposed()) {
93.19 + break;
93.20 + }
93.21 }
93.22 }
93.23 }
94.1 --- a/src/share/classes/javax/swing/UIManager.java Thu Apr 16 17:42:00 2009 +0100
94.2 +++ b/src/share/classes/javax/swing/UIManager.java Thu Apr 16 19:10:32 2009 -0700
94.3 @@ -58,6 +58,8 @@
94.4 import sun.security.action.GetPropertyAction;
94.5 import sun.swing.SwingUtilities2;
94.6 import java.lang.reflect.Method;
94.7 +import java.util.HashMap;
94.8 +import sun.awt.AppContext;
94.9
94.10
94.11 /**
94.12 @@ -1323,19 +1325,29 @@
94.13 return;
94.14 }
94.15
94.16 - String metalLnf = getCrossPlatformLookAndFeelClassName();
94.17 - String lnfDefault = metalLnf;
94.18 + // Try to get default LAF from system property, then from AppContext
94.19 + // (6653395), then use cross-platform one by default.
94.20 + String lafName = null;
94.21 + HashMap lafData =
94.22 + (HashMap) AppContext.getAppContext().remove("swing.lafdata");
94.23 + if (lafData != null) {
94.24 + lafName = (String) lafData.remove("defaultlaf");
94.25 + }
94.26 + if (lafName == null) {
94.27 + lafName = getCrossPlatformLookAndFeelClassName();
94.28 + }
94.29 + lafName = swingProps.getProperty(defaultLAFKey, lafName);
94.30
94.31 - String lnfName = "<undefined>" ;
94.32 try {
94.33 - lnfName = swingProps.getProperty(defaultLAFKey, lnfDefault);
94.34 - setLookAndFeel(lnfName);
94.35 + setLookAndFeel(lafName);
94.36 } catch (Exception e) {
94.37 - try {
94.38 - lnfName = swingProps.getProperty(defaultLAFKey, metalLnf);
94.39 - setLookAndFeel(lnfName);
94.40 - } catch (Exception e2) {
94.41 - throw new Error("can't load " + lnfName);
94.42 + throw new Error("Cannot load " + lafName);
94.43 + }
94.44 +
94.45 + // Set any properties passed through AppContext (6653395).
94.46 + if (lafData != null) {
94.47 + for (Object key: lafData.keySet()) {
94.48 + UIManager.put(key, lafData.get(key));
94.49 }
94.50 }
94.51 }
95.1 --- a/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Thu Apr 16 17:42:00 2009 +0100
95.2 +++ b/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Thu Apr 16 19:10:32 2009 -0700
95.3 @@ -27,6 +27,7 @@
95.4
95.5 import java.io.File;
95.6 import java.util.*;
95.7 +import java.util.concurrent.Callable;
95.8 import javax.swing.*;
95.9 import javax.swing.filechooser.*;
95.10 import javax.swing.event.*;
95.11 @@ -223,113 +224,115 @@
95.12 this.fid = fid;
95.13 }
95.14
95.15 - private void invokeLater(DoChangeContents runnable) {
95.16 - runnables.addElement(runnable);
95.17 - SwingUtilities.invokeLater(runnable);
95.18 - }
95.19 -
95.20 public void run() {
95.21 run0();
95.22 setBusy(false, fid);
95.23 }
95.24
95.25 public void run0() {
95.26 - FileSystemView fileSystem = filechooser.getFileSystemView();
95.27 + DoChangeContents doChangeContents = ShellFolder.getInvoker().invoke(new Callable<DoChangeContents>() {
95.28 + public DoChangeContents call() throws Exception {
95.29 + FileSystemView fileSystem = filechooser.getFileSystemView();
95.30
95.31 - File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled());
95.32 + File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled());
95.33
95.34 - Vector<File> acceptsList = new Vector<File>();
95.35 + Vector<File> acceptsList = new Vector<File>();
95.36
95.37 - if (isInterrupted()) {
95.38 - return;
95.39 - }
95.40 + if (isInterrupted()) {
95.41 + return null;
95.42 + }
95.43
95.44 - // run through the file list, add directories and selectable files to fileCache
95.45 - for (File file : list) {
95.46 - if (filechooser.accept(file)) {
95.47 - acceptsList.addElement(file);
95.48 - }
95.49 - }
95.50 + // run through the file list, add directories and selectable files to fileCache
95.51 + for (File file : list) {
95.52 + if (filechooser.accept(file)) {
95.53 + acceptsList.addElement(file);
95.54 + }
95.55 + }
95.56
95.57 - if (isInterrupted()) {
95.58 - return;
95.59 - }
95.60 + if (isInterrupted()) {
95.61 + return null;
95.62 + }
95.63
95.64 - // First sort alphabetically by filename
95.65 - sort(acceptsList);
95.66 + // First sort alphabetically by filename
95.67 + sort(acceptsList);
95.68
95.69 - Vector<File> newDirectories = new Vector<File>(50);
95.70 - Vector<File> newFiles = new Vector<File>();
95.71 - // run through list grabbing directories in chunks of ten
95.72 - for(int i = 0; i < acceptsList.size(); i++) {
95.73 - File f = acceptsList.elementAt(i);
95.74 - boolean isTraversable = filechooser.isTraversable(f);
95.75 - if (isTraversable) {
95.76 - newDirectories.addElement(f);
95.77 - } else if (!isTraversable && filechooser.isFileSelectionEnabled()) {
95.78 - newFiles.addElement(f);
95.79 - }
95.80 - if(isInterrupted()) {
95.81 - return;
95.82 - }
95.83 - }
95.84 + Vector<File> newDirectories = new Vector<File>(50);
95.85 + Vector<File> newFiles = new Vector<File>();
95.86 + // run through list grabbing directories in chunks of ten
95.87 + for (int i = 0; i < acceptsList.size(); i++) {
95.88 + File f = acceptsList.elementAt(i);
95.89 + boolean isTraversable = filechooser.isTraversable(f);
95.90 + if (isTraversable) {
95.91 + newDirectories.addElement(f);
95.92 + } else if (!isTraversable && filechooser.isFileSelectionEnabled()) {
95.93 + newFiles.addElement(f);
95.94 + }
95.95 + if (isInterrupted()) {
95.96 + return null;
95.97 + }
95.98 + }
95.99
95.100 - Vector<File> newFileCache = new Vector<File>(newDirectories);
95.101 - newFileCache.addAll(newFiles);
95.102 + Vector<File> newFileCache = new Vector<File>(newDirectories);
95.103 + newFileCache.addAll(newFiles);
95.104
95.105 - int newSize = newFileCache.size();
95.106 - int oldSize = fileCache.size();
95.107 + int newSize = newFileCache.size();
95.108 + int oldSize = fileCache.size();
95.109
95.110 - if (newSize > oldSize) {
95.111 - //see if interval is added
95.112 - int start = oldSize;
95.113 - int end = newSize;
95.114 - for (int i = 0; i < oldSize; i++) {
95.115 - if (!newFileCache.get(i).equals(fileCache.get(i))) {
95.116 - start = i;
95.117 - for (int j = i; j < newSize; j++) {
95.118 - if (newFileCache.get(j).equals(fileCache.get(i))) {
95.119 - end = j;
95.120 + if (newSize > oldSize) {
95.121 + //see if interval is added
95.122 + int start = oldSize;
95.123 + int end = newSize;
95.124 + for (int i = 0; i < oldSize; i++) {
95.125 + if (!newFileCache.get(i).equals(fileCache.get(i))) {
95.126 + start = i;
95.127 + for (int j = i; j < newSize; j++) {
95.128 + if (newFileCache.get(j).equals(fileCache.get(i))) {
95.129 + end = j;
95.130 + break;
95.131 + }
95.132 + }
95.133 break;
95.134 }
95.135 }
95.136 - break;
95.137 + if (start >= 0 && end > start
95.138 + && newFileCache.subList(end, newSize).equals(fileCache.subList(start, oldSize))) {
95.139 + if (isInterrupted()) {
95.140 + return null;
95.141 + }
95.142 + return new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid);
95.143 + }
95.144 + } else if (newSize < oldSize) {
95.145 + //see if interval is removed
95.146 + int start = -1;
95.147 + int end = -1;
95.148 + for (int i = 0; i < newSize; i++) {
95.149 + if (!newFileCache.get(i).equals(fileCache.get(i))) {
95.150 + start = i;
95.151 + end = i + oldSize - newSize;
95.152 + break;
95.153 + }
95.154 + }
95.155 + if (start >= 0 && end > start
95.156 + && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) {
95.157 + if (isInterrupted()) {
95.158 + return null;
95.159 + }
95.160 + return new DoChangeContents(null, 0, new Vector(fileCache.subList(start, end)), start, fid);
95.161 + }
95.162 }
95.163 + if (!fileCache.equals(newFileCache)) {
95.164 + if (isInterrupted()) {
95.165 + cancelRunnables(runnables);
95.166 + }
95.167 + return new DoChangeContents(newFileCache, 0, fileCache, 0, fid);
95.168 + }
95.169 + return null;
95.170 }
95.171 - if (start >= 0 && end > start
95.172 - && newFileCache.subList(end, newSize).equals(fileCache.subList(start, oldSize))) {
95.173 - if(isInterrupted()) {
95.174 - return;
95.175 - }
95.176 - invokeLater(new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid));
95.177 - newFileCache = null;
95.178 - }
95.179 - } else if (newSize < oldSize) {
95.180 - //see if interval is removed
95.181 - int start = -1;
95.182 - int end = -1;
95.183 - for (int i = 0; i < newSize; i++) {
95.184 - if (!newFileCache.get(i).equals(fileCache.get(i))) {
95.185 - start = i;
95.186 - end = i + oldSize - newSize;
95.187 - break;
95.188 - }
95.189 - }
95.190 - if (start >= 0 && end > start
95.191 - && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) {
95.192 - if(isInterrupted()) {
95.193 - return;
95.194 - }
95.195 - invokeLater(new DoChangeContents(null, 0, new Vector<File>(fileCache.subList(start, end)),
95.196 - start, fid));
95.197 - newFileCache = null;
95.198 - }
95.199 - }
95.200 - if (newFileCache != null && !fileCache.equals(newFileCache)) {
95.201 - if (isInterrupted()) {
95.202 - cancelRunnables(runnables);
95.203 - }
95.204 - invokeLater(new DoChangeContents(newFileCache, 0, fileCache, 0, fid));
95.205 + });
95.206 +
95.207 + if (doChangeContents != null) {
95.208 + runnables.addElement(doChangeContents);
95.209 + SwingUtilities.invokeLater(doChangeContents);
95.210 }
95.211 }
95.212
96.1 --- a/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Thu Apr 16 17:42:00 2009 +0100
96.2 +++ b/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Thu Apr 16 19:10:32 2009 -0700
96.3 @@ -1004,47 +1004,62 @@
96.4 g.setColor(DefaultLookup.getColor(slider, this, "Slider.tickColor", Color.black));
96.5
96.6 if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
96.7 - g.translate( 0, tickBounds.y);
96.8 + g.translate(0, tickBounds.y);
96.9
96.10 - int value = slider.getMinimum();
96.11 - int xPos;
96.12 + if (slider.getMinorTickSpacing() > 0) {
96.13 + int value = slider.getMinimum();
96.14
96.15 - if ( slider.getMinorTickSpacing() > 0 ) {
96.16 while ( value <= slider.getMaximum() ) {
96.17 - xPos = xPositionForValue( value );
96.18 + int xPos = xPositionForValue(value);
96.19 paintMinorTickForHorizSlider( g, tickBounds, xPos );
96.20 +
96.21 + // Overflow checking
96.22 + if (Integer.MAX_VALUE - slider.getMinorTickSpacing() < value) {
96.23 + break;
96.24 + }
96.25 +
96.26 value += slider.getMinorTickSpacing();
96.27 }
96.28 }
96.29
96.30 - if ( slider.getMajorTickSpacing() > 0 ) {
96.31 - value = slider.getMinimum();
96.32 + if (slider.getMajorTickSpacing() > 0) {
96.33 + int value = slider.getMinimum();
96.34
96.35 while ( value <= slider.getMaximum() ) {
96.36 - xPos = xPositionForValue( value );
96.37 + int xPos = xPositionForValue(value);
96.38 paintMajorTickForHorizSlider( g, tickBounds, xPos );
96.39 +
96.40 + // Overflow checking
96.41 + if (Integer.MAX_VALUE - slider.getMajorTickSpacing() < value) {
96.42 + break;
96.43 + }
96.44 +
96.45 value += slider.getMajorTickSpacing();
96.46 }
96.47 }
96.48
96.49 g.translate( 0, -tickBounds.y);
96.50 - }
96.51 - else {
96.52 - g.translate(tickBounds.x, 0);
96.53 + } else {
96.54 + g.translate(tickBounds.x, 0);
96.55
96.56 - int value = slider.getMinimum();
96.57 - int yPos;
96.58 -
96.59 - if ( slider.getMinorTickSpacing() > 0 ) {
96.60 + if (slider.getMinorTickSpacing() > 0) {
96.61 int offset = 0;
96.62 if(!BasicGraphicsUtils.isLeftToRight(slider)) {
96.63 offset = tickBounds.width - tickBounds.width / 2;
96.64 g.translate(offset, 0);
96.65 }
96.66
96.67 - while ( value <= slider.getMaximum() ) {
96.68 - yPos = yPositionForValue( value );
96.69 + int value = slider.getMinimum();
96.70 +
96.71 + while (value <= slider.getMaximum()) {
96.72 + int yPos = yPositionForValue(value);
96.73 paintMinorTickForVertSlider( g, tickBounds, yPos );
96.74 +
96.75 + // Overflow checking
96.76 + if (Integer.MAX_VALUE - slider.getMinorTickSpacing() < value) {
96.77 + break;
96.78 + }
96.79 +
96.80 value += slider.getMinorTickSpacing();
96.81 }
96.82
96.83 @@ -1053,15 +1068,22 @@
96.84 }
96.85 }
96.86
96.87 - if ( slider.getMajorTickSpacing() > 0 ) {
96.88 - value = slider.getMinimum();
96.89 + if (slider.getMajorTickSpacing() > 0) {
96.90 if(!BasicGraphicsUtils.isLeftToRight(slider)) {
96.91 g.translate(2, 0);
96.92 }
96.93
96.94 - while ( value <= slider.getMaximum() ) {
96.95 - yPos = yPositionForValue( value );
96.96 + int value = slider.getMinimum();
96.97 +
96.98 + while (value <= slider.getMaximum()) {
96.99 + int yPos = yPositionForValue(value);
96.100 paintMajorTickForVertSlider( g, tickBounds, yPos );
96.101 +
96.102 + // Overflow checking
96.103 + if (Integer.MAX_VALUE - slider.getMajorTickSpacing() < value) {
96.104 + break;
96.105 + }
96.106 +
96.107 value += slider.getMajorTickSpacing();
96.108 }
96.109
96.110 @@ -1775,8 +1797,6 @@
96.111 thumbMiddle = thumbLeft + halfThumbWidth;
96.112 slider.setValue(valueForXPosition(thumbMiddle));
96.113 break;
96.114 - default:
96.115 - return;
96.116 }
96.117 }
96.118
97.1 --- a/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Thu Apr 16 17:42:00 2009 +0100
97.2 +++ b/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Thu Apr 16 19:10:32 2009 -0700
97.3 @@ -38,6 +38,8 @@
97.4 import java.io.FileNotFoundException;
97.5 import java.io.IOException;
97.6 import java.util.*;
97.7 +import java.security.AccessController;
97.8 +import java.security.PrivilegedAction;
97.9 import javax.accessibility.*;
97.10
97.11 import sun.awt.shell.ShellFolder;
97.12 @@ -937,7 +939,11 @@
97.13
97.14 File[] baseFolders;
97.15 if (useShellFolder) {
97.16 - baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");
97.17 + baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
97.18 + public File[] run() {
97.19 + return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
97.20 + }
97.21 + });
97.22 } else {
97.23 baseFolders = fsv.getRoots();
97.24 }
98.1 --- a/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Thu Apr 16 17:42:00 2009 +0100
98.2 +++ b/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Thu Apr 16 19:10:32 2009 -0700
98.3 @@ -233,7 +233,7 @@
98.4 tabContext.getStyle().getGraphicsUtils(tabContext).layoutText(
98.5 tabContext, metrics, title, icon, SwingUtilities.CENTER,
98.6 SwingUtilities.CENTER, SwingUtilities.LEADING,
98.7 - SwingUtilities.TRAILING, calcRect,
98.8 + SwingUtilities.CENTER, calcRect,
98.9 iconRect, textRect, textIconGap);
98.10 return textRect.y + metrics.getAscent() + getBaselineOffset();
98.11 }
98.12 @@ -426,7 +426,7 @@
98.13
98.14 ss.getStyle().getGraphicsUtils(ss).layoutText(ss, metrics, title,
98.15 icon, SwingUtilities.CENTER, SwingUtilities.CENTER,
98.16 - SwingUtilities.LEADING, SwingUtilities.TRAILING,
98.17 + SwingUtilities.LEADING, SwingUtilities.CENTER,
98.18 tabRect, iconRect, textRect, textIconGap);
98.19
98.20 tabPane.putClientProperty("html", null);
99.1 --- a/src/share/classes/javax/swing/text/GlyphView.java Thu Apr 16 17:42:00 2009 +0100
99.2 +++ b/src/share/classes/javax/swing/text/GlyphView.java Thu Apr 16 19:10:32 2009 -0700
99.3 @@ -30,6 +30,7 @@
99.4 import java.util.BitSet;
99.5 import java.util.Locale;
99.6
99.7 +import javax.swing.UIManager;
99.8 import sun.swing.SwingUtilities2;
99.9
99.10 /**
99.11 @@ -382,11 +383,10 @@
99.12 Color bg = getBackground();
99.13 Color fg = getForeground();
99.14
99.15 - if (c instanceof JTextComponent) {
99.16 - JTextComponent tc = (JTextComponent) c;
99.17 - if (!tc.isEnabled()) {
99.18 - fg = tc.getDisabledTextColor();
99.19 - }
99.20 + if (c != null && ! c.isEnabled()) {
99.21 + fg = (c instanceof JTextComponent ?
99.22 + ((JTextComponent)c).getDisabledTextColor() :
99.23 + UIManager.getColor("textInactiveText"));
99.24 }
99.25 if (bg != null) {
99.26 g.setColor(bg);
100.1 --- a/src/share/classes/javax/swing/text/html/ImageView.java Thu Apr 16 17:42:00 2009 +0100
100.2 +++ b/src/share/classes/javax/swing/text/html/ImageView.java Thu Apr 16 19:10:32 2009 -0700
100.3 @@ -25,9 +25,7 @@
100.4 package javax.swing.text.html;
100.5
100.6 import java.awt.*;
100.7 -import java.awt.event.*;
100.8 import java.awt.image.ImageObserver;
100.9 -import java.io.*;
100.10 import java.net.*;
100.11 import java.util.Dictionary;
100.12 import javax.swing.*;
100.13 @@ -97,6 +95,7 @@
100.14
100.15 private AttributeSet attr;
100.16 private Image image;
100.17 + private Image disabledImage;
100.18 private int width;
100.19 private int height;
100.20 /** Bitmask containing some of the above bitmask values. Because the
100.21 @@ -193,6 +192,17 @@
100.22 return image;
100.23 }
100.24
100.25 + private Image getImage(boolean enabled) {
100.26 + Image img = getImage();
100.27 + if (! enabled) {
100.28 + if (disabledImage == null) {
100.29 + disabledImage = GrayFilter.createDisabledImage(img);
100.30 + }
100.31 + img = disabledImage;
100.32 + }
100.33 + return img;
100.34 + }
100.35 +
100.36 /**
100.37 * Sets how the image is loaded. If <code>newValue</code> is true,
100.38 * the image we be loaded when first asked for, otherwise it will
100.39 @@ -338,8 +348,6 @@
100.40
100.41 Rectangle rect = (a instanceof Rectangle) ? (Rectangle)a :
100.42 a.getBounds();
100.43 -
100.44 - Image image = getImage();
100.45 Rectangle clip = g.getClipBounds();
100.46
100.47 fBounds.setBounds(rect);
100.48 @@ -350,29 +358,29 @@
100.49 rect.width - leftInset - rightInset,
100.50 rect.height - topInset - bottomInset);
100.51 }
100.52 - if (image != null) {
100.53 - if (!hasPixels(image)) {
100.54 +
100.55 + Container host = getContainer();
100.56 + Image img = getImage(host == null || host.isEnabled());
100.57 + if (img != null) {
100.58 + if (! hasPixels(img)) {
100.59 // No pixels yet, use the default
100.60 - Icon icon = (image == null) ? getNoImageIcon() :
100.61 - getLoadingImageIcon();
100.62 -
100.63 + Icon icon = getLoadingImageIcon();
100.64 if (icon != null) {
100.65 - icon.paintIcon(getContainer(), g, rect.x + leftInset,
100.66 - rect.y + topInset);
100.67 + icon.paintIcon(host, g,
100.68 + rect.x + leftInset, rect.y + topInset);
100.69 }
100.70 }
100.71 else {
100.72 // Draw the image
100.73 - g.drawImage(image, rect.x + leftInset, rect.y + topInset,
100.74 + g.drawImage(img, rect.x + leftInset, rect.y + topInset,
100.75 width, height, imageObserver);
100.76 }
100.77 }
100.78 else {
100.79 Icon icon = getNoImageIcon();
100.80 -
100.81 if (icon != null) {
100.82 - icon.paintIcon(getContainer(), g, rect.x + leftInset,
100.83 - rect.y + topInset);
100.84 + icon.paintIcon(host, g,
100.85 + rect.x + leftInset, rect.y + topInset);
100.86 }
100.87 View view = getAltView();
100.88 // Paint the view representing the alt text, if its non-null
100.89 @@ -855,7 +863,9 @@
100.90 // it will pick up the new height/width, if necessary.
100.91 public boolean imageUpdate(Image img, int flags, int x, int y,
100.92 int newWidth, int newHeight ) {
100.93 - if (image == null || image != img || getParent() == null) {
100.94 + if (img != image && img != disabledImage ||
100.95 + image == null || getParent() == null) {
100.96 +
100.97 return false;
100.98 }
100.99
100.100 @@ -873,6 +883,8 @@
100.101 if ((state & HEIGHT_FLAG) != HEIGHT_FLAG) {
100.102 height = DEFAULT_HEIGHT;
100.103 }
100.104 + } else {
100.105 + disabledImage = null;
100.106 }
100.107 if ((state & LOADING_FLAG) == LOADING_FLAG) {
100.108 // No need to resize or repaint, still in the process
100.109 @@ -885,38 +897,37 @@
100.110 return false;
100.111 }
100.112
100.113 - // Resize image if necessary:
100.114 - short changed = 0;
100.115 - if ((flags & ImageObserver.HEIGHT) != 0 && !getElement().
100.116 - getAttributes().isDefined(HTML.Attribute.HEIGHT)) {
100.117 - changed |= 1;
100.118 - }
100.119 - if ((flags & ImageObserver.WIDTH) != 0 && !getElement().
100.120 - getAttributes().isDefined(HTML.Attribute.WIDTH)) {
100.121 - changed |= 2;
100.122 - }
100.123 + if (image == img) {
100.124 + // Resize image if necessary:
100.125 + short changed = 0;
100.126 + if ((flags & ImageObserver.HEIGHT) != 0 && !getElement().
100.127 + getAttributes().isDefined(HTML.Attribute.HEIGHT)) {
100.128 + changed |= 1;
100.129 + }
100.130 + if ((flags & ImageObserver.WIDTH) != 0 && !getElement().
100.131 + getAttributes().isDefined(HTML.Attribute.WIDTH)) {
100.132 + changed |= 2;
100.133 + }
100.134
100.135 - synchronized(ImageView.this) {
100.136 - if (image != img) {
100.137 - return false;
100.138 + synchronized(ImageView.this) {
100.139 + if ((changed & 1) == 1 && (state & WIDTH_FLAG) == 0) {
100.140 + width = newWidth;
100.141 + }
100.142 + if ((changed & 2) == 2 && (state & HEIGHT_FLAG) == 0) {
100.143 + height = newHeight;
100.144 + }
100.145 + if ((state & LOADING_FLAG) == LOADING_FLAG) {
100.146 + // No need to resize or repaint, still in the process of
100.147 + // loading.
100.148 + return true;
100.149 + }
100.150 }
100.151 - if ((changed & 1) == 1 && (state & WIDTH_FLAG) == 0) {
100.152 - width = newWidth;
100.153 - }
100.154 - if ((changed & 2) == 2 && (state & HEIGHT_FLAG) == 0) {
100.155 - height = newHeight;
100.156 - }
100.157 - if ((state & LOADING_FLAG) == LOADING_FLAG) {
100.158 - // No need to resize or repaint, still in the process of
100.159 - // loading.
100.160 + if (changed != 0) {
100.161 + // May need to resize myself, asynchronously:
100.162 + safePreferenceChanged();
100.163 return true;
100.164 }
100.165 }
100.166 - if (changed != 0) {
100.167 - // May need to resize myself, asynchronously:
100.168 - safePreferenceChanged();
100.169 - return true;
100.170 - }
100.171
100.172 // Repaint when done or when new pixels arrive:
100.173 if ((flags & (FRAMEBITS|ALLBITS)) != 0) {
101.1 --- a/src/share/classes/javax/swing/text/html/StyleSheet.java Thu Apr 16 17:42:00 2009 +0100
101.2 +++ b/src/share/classes/javax/swing/text/html/StyleSheet.java Thu Apr 16 19:10:32 2009 -0700
101.3 @@ -31,6 +31,7 @@
101.4 import java.net.*;
101.5 import javax.swing.Icon;
101.6 import javax.swing.ImageIcon;
101.7 +import javax.swing.UIManager;
101.8 import javax.swing.border.*;
101.9 import javax.swing.event.ChangeListener;
101.10 import javax.swing.text.*;
101.11 @@ -2161,6 +2162,7 @@
101.12 */
101.13 public void paint(Graphics g, float x, float y, float w, float h, View v, int item) {
101.14 View cv = v.getView(item);
101.15 + Container host = v.getContainer();
101.16 Object name = cv.getElement().getAttributes().getAttribute
101.17 (StyleConstants.NameAttribute);
101.18 // Only draw something if the View is a list item. This won't
101.19 @@ -2171,7 +2173,7 @@
101.20 }
101.21 // deside on what side draw bullets, etc.
101.22 isLeftToRight =
101.23 - cv.getContainer().getComponentOrientation().isLeftToRight();
101.24 + host.getComponentOrientation().isLeftToRight();
101.25
101.26 // How the list indicator is aligned is not specified, it is
101.27 // left up to the UA. IE and NS differ on this behavior.
101.28 @@ -2200,15 +2202,15 @@
101.29 }
101.30
101.31 // set the color of a decoration
101.32 - if (ss != null) {
101.33 - g.setColor(ss.getForeground(cv.getAttributes()));
101.34 - } else {
101.35 - g.setColor(Color.black);
101.36 - }
101.37 + Color c = (host.isEnabled()
101.38 + ? (ss != null
101.39 + ? ss.getForeground(cv.getAttributes())
101.40 + : host.getForeground())
101.41 + : UIManager.getColor("textInactiveText"));
101.42 + g.setColor(c);
101.43
101.44 if (img != null) {
101.45 - drawIcon(g, (int) x, (int) y, (int) w, (int) h, align,
101.46 - v.getContainer());
101.47 + drawIcon(g, (int) x, (int) y, (int) w, (int) h, align, host);
101.48 return;
101.49 }
101.50 CSS.Value childtype = getChildType(cv);
102.1 --- a/src/share/classes/sun/awt/AWTAccessor.java Thu Apr 16 17:42:00 2009 +0100
102.2 +++ b/src/share/classes/sun/awt/AWTAccessor.java Thu Apr 16 19:10:32 2009 -0700
102.3 @@ -1,5 +1,5 @@
102.4 /*
102.5 - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
102.6 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
102.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
102.8 *
102.9 * This code is free software; you can redistribute it and/or modify it
102.10 @@ -26,46 +26,229 @@
102.11 package sun.awt;
102.12
102.13 import java.awt.*;
102.14 +import java.awt.geom.Point2D;
102.15 +import java.awt.image.BufferedImage;
102.16 +
102.17 import sun.misc.Unsafe;
102.18
102.19 -/** The AWTAccessor utility class.
102.20 +/**
102.21 + * The AWTAccessor utility class.
102.22 * The main purpose of this class is to enable accessing
102.23 * private and package-private fields of classes from
102.24 * different classes/packages. See sun.misc.SharedSecretes
102.25 * for another example.
102.26 */
102.27 public final class AWTAccessor {
102.28 +
102.29 private static final Unsafe unsafe = Unsafe.getUnsafe();
102.30
102.31 - /** We don't need any objects of this class.
102.32 + /*
102.33 + * We don't need any objects of this class.
102.34 * It's rather a collection of static methods
102.35 * and interfaces.
102.36 */
102.37 private AWTAccessor() {
102.38 }
102.39
102.40 - /** An accessor for the java.awt.Component class.
102.41 + /*
102.42 + * An interface of accessor for the java.awt.Component class.
102.43 */
102.44 public interface ComponentAccessor {
102.45 - // See 6797587
102.46 - // Also see: 6776743, 6768307, and 6768332.
102.47 - /**
102.48 + /*
102.49 + * Sets whether the native background erase for a component
102.50 + * has been disabled via SunToolkit.disableBackgroundErase().
102.51 + */
102.52 + void setBackgroundEraseDisabled(Component comp, boolean disabled);
102.53 + /*
102.54 + * Indicates whether the native background erase for a
102.55 + * component has been disabled via
102.56 + * SunToolkit.disableBackgroundErase().
102.57 + */
102.58 + boolean getBackgroundEraseDisabled(Component comp);
102.59 + /*
102.60 + *
102.61 + * Gets the bounds of this component in the form of a
102.62 + * <code>Rectangle</code> object. The bounds specify this
102.63 + * component's width, height, and location relative to
102.64 + * its parent.
102.65 + */
102.66 + Rectangle getBounds(Component comp);
102.67 + /*
102.68 * Sets the shape of a lw component to cut out from hw components.
102.69 + *
102.70 + * See 6797587, 6776743, 6768307, and 6768332 for details
102.71 */
102.72 void setMixingCutoutShape(Component comp, Shape shape);
102.73 +
102.74 + /**
102.75 + * Sets GraphicsConfiguration value for the component.
102.76 + */
102.77 + void setGraphicsConfiguration(Component comp, GraphicsConfiguration gc);
102.78 + /*
102.79 + * Requests focus to the component.
102.80 + */
102.81 + boolean requestFocus(Component comp, CausedFocusEvent.Cause cause);
102.82 + /*
102.83 + * Determines if the component can gain focus.
102.84 + */
102.85 + boolean canBeFocusOwner(Component comp);
102.86 +
102.87 + /**
102.88 + * Returns whether the component is visible without invoking
102.89 + * any client code.
102.90 + */
102.91 + boolean isVisible_NoClientCode(Component comp);
102.92 }
102.93
102.94 - /* The java.awt.Component class accessor object.
102.95 + /*
102.96 + * An interface of accessor for java.awt.Window class.
102.97 + */
102.98 + public interface WindowAccessor {
102.99 + /*
102.100 + * Get opacity level of the given window.
102.101 + */
102.102 + float getOpacity(Window window);
102.103 + /*
102.104 + * Set opacity level to the given window.
102.105 + */
102.106 + void setOpacity(Window window, float opacity);
102.107 + /*
102.108 + * Get a shape assigned to the given window.
102.109 + */
102.110 + Shape getShape(Window window);
102.111 + /*
102.112 + * Set a shape to the given window.
102.113 + */
102.114 + void setShape(Window window, Shape shape);
102.115 + /*
102.116 + * Identify whether the given window is opaque (true)
102.117 + * or translucent (false).
102.118 + */
102.119 + boolean isOpaque(Window window);
102.120 + /*
102.121 + * Set the opaque preoperty to the given window.
102.122 + */
102.123 + void setOpaque(Window window, boolean isOpaque);
102.124 + /*
102.125 + * Update the image of a non-opaque (translucent) window.
102.126 + */
102.127 + void updateWindow(Window window, BufferedImage backBuffer);
102.128 +
102.129 + /** Get the size of the security warning.
102.130 + */
102.131 + Dimension getSecurityWarningSize(Window w);
102.132 +
102.133 + /**
102.134 + * Set the size of the security warning.
102.135 + */
102.136 + void setSecurityWarningSize(Window w, int width, int height);
102.137 +
102.138 + /** Set the position of the security warning.
102.139 + */
102.140 + void setSecurityWarningPosition(Window w, Point2D point,
102.141 + float alignmentX, float alignmentY);
102.142 +
102.143 + /** Request to recalculate the new position of the security warning for
102.144 + * the given window size/location as reported by the native system.
102.145 + */
102.146 + Point2D calculateSecurityWarningPosition(Window window,
102.147 + double x, double y, double w, double h);
102.148 + }
102.149 +
102.150 + /*
102.151 + * An accessor for the AWTEvent class.
102.152 + */
102.153 + public interface AWTEventAccessor {
102.154 + /*
102.155 + *
102.156 + * Sets the flag on this AWTEvent indicating that it was
102.157 + * generated by the system.
102.158 + */
102.159 + void setSystemGenerated(AWTEvent ev);
102.160 + /*
102.161 + *
102.162 + * Indicates whether this AWTEvent was generated by the system.
102.163 + */
102.164 + boolean isSystemGenerated(AWTEvent ev);
102.165 + }
102.166 +
102.167 + /*
102.168 + * An accessor for the java.awt.Frame class.
102.169 + */
102.170 + public interface FrameAccessor {
102.171 + /*
102.172 + * Sets the state of this frame.
102.173 + */
102.174 + void setExtendedState(Frame frame, int state);
102.175 + /*
102.176 + * Gets the state of this frame.
102.177 + */
102.178 + int getExtendedState(Frame frame);
102.179 + }
102.180 +
102.181 + /*
102.182 + * An interface of accessor for the java.awt.KeyboardFocusManager class.
102.183 + */
102.184 + public interface KeyboardFocusManagerAccessor {
102.185 + /*
102.186 + * Indicates whether the native implementation should
102.187 + * proceed with a pending focus request for the heavyweight.
102.188 + */
102.189 + int shouldNativelyFocusHeavyweight(Component heavyweight,
102.190 + Component descendant,
102.191 + boolean temporary,
102.192 + boolean focusedWindowChangeAllowed,
102.193 + long time,
102.194 + CausedFocusEvent.Cause cause);
102.195 + /*
102.196 + * Delivers focus for the lightweight descendant of the heavyweight
102.197 + * synchronously.
102.198 + */
102.199 + boolean processSynchronousLightweightTransfer(Component heavyweight,
102.200 + Component descendant,
102.201 + boolean temporary,
102.202 + boolean focusedWindowChangeAllowed,
102.203 + long time);
102.204 + /*
102.205 + * Removes the last focus request for the heavyweight from the queue.
102.206 + */
102.207 + void removeLastFocusRequest(Component heavyweight);
102.208 + }
102.209 +
102.210 + /*
102.211 + * The java.awt.Component class accessor object.
102.212 */
102.213 private static ComponentAccessor componentAccessor;
102.214
102.215 - /** Set an accessor object for the java.awt.Component class.
102.216 + /*
102.217 + * The java.awt.Window class accessor object.
102.218 + */
102.219 + private static WindowAccessor windowAccessor;
102.220 +
102.221 + /*
102.222 + * The java.awt.AWTEvent class accessor object.
102.223 + */
102.224 + private static AWTEventAccessor awtEventAccessor;
102.225 +
102.226 + /*
102.227 + * The java.awt.Frame class accessor object.
102.228 + */
102.229 + private static FrameAccessor frameAccessor;
102.230 +
102.231 + /*
102.232 + * The java.awt.KeyboardFocusManager class accessor object.
102.233 + */
102.234 + private static KeyboardFocusManagerAccessor kfmAccessor;
102.235 +
102.236 + /*
102.237 + * Set an accessor object for the java.awt.Component class.
102.238 */
102.239 public static void setComponentAccessor(ComponentAccessor ca) {
102.240 componentAccessor = ca;
102.241 }
102.242
102.243 - /** Retrieve the accessor object for the java.awt.Window class.
102.244 + /*
102.245 + * Retrieve the accessor object for the java.awt.Window class.
102.246 */
102.247 public static ComponentAccessor getComponentAccessor() {
102.248 if (componentAccessor == null) {
102.249 @@ -74,4 +257,69 @@
102.250
102.251 return componentAccessor;
102.252 }
102.253 +
102.254 + /*
102.255 + * Set an accessor object for the java.awt.Window class.
102.256 + */
102.257 + public static void setWindowAccessor(WindowAccessor wa) {
102.258 + windowAccessor = wa;
102.259 + }
102.260 +
102.261 + /*
102.262 + * Retrieve the accessor object for the java.awt.Window class.
102.263 + */
102.264 + public static WindowAccessor getWindowAccessor() {
102.265 + if (windowAccessor == null) {
102.266 + unsafe.ensureClassInitialized(Window.class);
102.267 + }
102.268 + return windowAccessor;
102.269 + }
102.270 +
102.271 + /*
102.272 + * Set an accessor object for the java.awt.AWTEvent class.
102.273 + */
102.274 + public static void setAWTEventAccessor(AWTEventAccessor aea) {
102.275 + awtEventAccessor = aea;
102.276 + }
102.277 +
102.278 + /*
102.279 + * Retrieve the accessor object for the java.awt.AWTEvent class.
102.280 + */
102.281 + public static AWTEventAccessor getAWTEventAccessor() {
102.282 + return awtEventAccessor;
102.283 + }
102.284 +
102.285 + /*
102.286 + * Set an accessor object for the java.awt.Frame class.
102.287 + */
102.288 + public static void setFrameAccessor(FrameAccessor fa) {
102.289 + frameAccessor = fa;
102.290 + }
102.291 +
102.292 + /*
102.293 + * Retrieve the accessor object for the java.awt.Frame class.
102.294 + */
102.295 + public static FrameAccessor getFrameAccessor() {
102.296 + if (frameAccessor == null) {
102.297 + unsafe.ensureClassInitialized(Frame.class);
102.298 + }
102.299 + return frameAccessor;
102.300 + }
102.301 +
102.302 + /*
102.303 + * Set an accessor object for the java.awt.KeyboardFocusManager class.
102.304 + */
102.305 + public static void setKeyboardFocusManagerAccessor(KeyboardFocusManagerAccessor kfma) {
102.306 + kfmAccessor = kfma;
102.307 + }
102.308 +
102.309 + /*
102.310 + * Retrieve the accessor object for the java.awt.KeyboardFocusManager class.
102.311 + */
102.312 + public static KeyboardFocusManagerAccessor getKeyboardFocusManagerAccessor() {
102.313 + if (kfmAccessor == null) {
102.314 + unsafe.ensureClassInitialized(KeyboardFocusManager.class);
102.315 + }
102.316 + return kfmAccessor;
102.317 + }
102.318 }
103.1 --- a/src/share/classes/sun/awt/ComponentAccessor.java Thu Apr 16 17:42:00 2009 +0100
103.2 +++ b/src/share/classes/sun/awt/ComponentAccessor.java Thu Apr 16 19:10:32 2009 -0700
103.3 @@ -73,7 +73,6 @@
103.4 private static Field fieldPacked;
103.5 private static Field fieldIgnoreRepaint;
103.6 private static Field fieldPeer;
103.7 - private static Method methodResetGC;
103.8 private static Field fieldVisible;
103.9 private static Method methodIsEnabledImpl;
103.10 private static Method methodGetCursorNoClientCode;
103.11 @@ -124,9 +123,6 @@
103.12 fieldPeer = componentClass.getDeclaredField("peer");
103.13 fieldPeer.setAccessible(true);
103.14
103.15 - methodResetGC = componentClass.getDeclaredMethod("resetGC", (Class[]) null);
103.16 - methodResetGC.setAccessible(true);
103.17 -
103.18 fieldVisible = componentClass.getDeclaredField("visible");
103.19 fieldVisible.setAccessible(true);
103.20
103.21 @@ -425,18 +421,6 @@
103.22 return false;
103.23 }
103.24
103.25 - public static void resetGC(Component c) {
103.26 - try {
103.27 - methodResetGC.invoke(c, (Object[]) null);
103.28 - }
103.29 - catch (IllegalAccessException e) {
103.30 - log.log(Level.FINE, "Unable to access the Component object", e);
103.31 - }
103.32 - catch (InvocationTargetException e) {
103.33 - log.log(Level.FINE, "Unable to invoke on the Component object", e);
103.34 - }
103.35 - }
103.36 -
103.37 public static boolean getVisible(Component c) {
103.38 try {
103.39 return fieldVisible.getBoolean(c);
104.1 --- a/src/share/classes/sun/awt/EmbeddedFrame.java Thu Apr 16 17:42:00 2009 +0100
104.2 +++ b/src/share/classes/sun/awt/EmbeddedFrame.java Thu Apr 16 19:10:32 2009 -0700
104.3 @@ -1,5 +1,5 @@
104.4 /*
104.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
104.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
104.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
104.8 *
104.9 * This code is free software; you can redistribute it and/or modify it
104.10 @@ -585,5 +585,14 @@
104.11 }
104.12 public void updateMinimumSize() {
104.13 }
104.14 - }
104.15 +
104.16 + public void setOpacity(float opacity) {
104.17 + }
104.18 + public void setOpaque(boolean isOpaque) {
104.19 + }
104.20 + public void updateWindow(BufferedImage backBuffer) {
104.21 + }
104.22 + public void repositionSecurityWarning() {
104.23 + }
104.24 + }
104.25 } // class EmbeddedFrame
105.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
105.2 +++ b/src/share/classes/sun/awt/ExtendedKeyCodes.java Thu Apr 16 19:10:32 2009 -0700
105.3 @@ -0,0 +1,670 @@
105.4 +package sun.awt;
105.5 +
105.6 +import java.util.Collections;
105.7 +import java.util.HashMap;
105.8 +import java.util.HashSet;
105.9 +import java.awt.event.KeyEvent;
105.10 +
105.11 +public class ExtendedKeyCodes {
105.12 + /**
105.13 + * ATTN: These are the readonly hashes with load factor == 1;
105.14 + * adding a value, please set the inital capacity to exact number of items
105.15 + * or higher.
105.16 + */
105.17 + // Keycodes declared in KeyEvent.java with corresponding Unicode values.
105.18 + private final static HashMap<Integer, Integer> regularKeyCodesMap =
105.19 + new HashMap<Integer,Integer>(122, 1.0f);
105.20 +
105.21 + // Keycodes derived from Unicode values. Here should be collected codes
105.22 + // for characters appearing on the primary layer of at least one
105.23 + // known keyboard layout. For instance, sterling sign is on the primary layer
105.24 + // of the Mac Italian layout.
105.25 + private final static HashSet<Integer> extendedKeyCodesSet =
105.26 + new HashSet<Integer>(501, 1.0f);
105.27 + final public static int getExtendedKeyCodeForChar( int c ) {
105.28 + int rc = KeyEvent.VK_UNDEFINED;
105.29 + int uc = Character.toUpperCase( c );
105.30 + int lc = Character.toLowerCase( c );
105.31 + if (regularKeyCodesMap.containsKey( c )) {
105.32 + if(regularKeyCodesMap.containsKey(uc)) {
105.33 + return regularKeyCodesMap.get( uc );
105.34 + }
105.35 + return regularKeyCodesMap.get( c );
105.36 + }
105.37 + uc += 0x01000000;
105.38 + lc += 0x01000000;
105.39 + if (extendedKeyCodesSet.contains( uc )) {
105.40 + return uc;
105.41 + }else if (extendedKeyCodesSet.contains( lc )) {
105.42 + return lc;
105.43 + }
105.44 + return rc;
105.45 + }
105.46 + static {
105.47 + regularKeyCodesMap.put(0x0a, KeyEvent.VK_ENTER);
105.48 + regularKeyCodesMap.put(0x08, KeyEvent.VK_BACK_SPACE);
105.49 + regularKeyCodesMap.put(0x09, KeyEvent.VK_TAB);
105.50 + regularKeyCodesMap.put(0x1B, KeyEvent.VK_ESCAPE);
105.51 + regularKeyCodesMap.put(0x20, KeyEvent.VK_SPACE);
105.52 + regularKeyCodesMap.put(0x21, KeyEvent.VK_PAGE_UP);
105.53 + regularKeyCodesMap.put(0x22, KeyEvent.VK_PAGE_DOWN);
105.54 + regularKeyCodesMap.put(0x23, KeyEvent.VK_END);
105.55 + regularKeyCodesMap.put(0x24, KeyEvent.VK_HOME);
105.56 + regularKeyCodesMap.put(0x25, KeyEvent.VK_LEFT);
105.57 + regularKeyCodesMap.put(0x26, KeyEvent.VK_UP);
105.58 + regularKeyCodesMap.put(0x27, KeyEvent.VK_RIGHT);
105.59 + regularKeyCodesMap.put(0x28, KeyEvent.VK_DOWN);
105.60 + regularKeyCodesMap.put(0x2C, KeyEvent.VK_COMMA);
105.61 + regularKeyCodesMap.put(0x2D, KeyEvent.VK_MINUS);
105.62 + regularKeyCodesMap.put(0x2E, KeyEvent.VK_PERIOD);
105.63 + regularKeyCodesMap.put(0x2F, KeyEvent.VK_SLASH);
105.64 + regularKeyCodesMap.put(0x30, KeyEvent.VK_0);
105.65 + regularKeyCodesMap.put(0x31, KeyEvent.VK_1);
105.66 + regularKeyCodesMap.put(0x32, KeyEvent.VK_2);
105.67 + regularKeyCodesMap.put(0x33, KeyEvent.VK_3);
105.68 + regularKeyCodesMap.put(0x34, KeyEvent.VK_4);
105.69 + regularKeyCodesMap.put(0x35, KeyEvent.VK_5);
105.70 + regularKeyCodesMap.put(0x36, KeyEvent.VK_6);
105.71 + regularKeyCodesMap.put(0x37, KeyEvent.VK_7);
105.72 + regularKeyCodesMap.put(0x38, KeyEvent.VK_8);
105.73 + regularKeyCodesMap.put(0x39, KeyEvent.VK_9);
105.74 + regularKeyCodesMap.put(0x3B, KeyEvent.VK_SEMICOLON);
105.75 + regularKeyCodesMap.put(0x3D, KeyEvent.VK_EQUALS);
105.76 + regularKeyCodesMap.put(0x41, KeyEvent.VK_A);
105.77 + regularKeyCodesMap.put(0x61, KeyEvent.VK_A);
105.78 + regularKeyCodesMap.put(0x42, KeyEvent.VK_B);
105.79 + regularKeyCodesMap.put(0x62, KeyEvent.VK_B);
105.80 + regularKeyCodesMap.put(0x43, KeyEvent.VK_C);
105.81 + regularKeyCodesMap.put(0x63, KeyEvent.VK_C);
105.82 + regularKeyCodesMap.put(0x44, KeyEvent.VK_D);
105.83 + regularKeyCodesMap.put(0x64, KeyEvent.VK_D);
105.84 + regularKeyCodesMap.put(0x45, KeyEvent.VK_E);
105.85 + regularKeyCodesMap.put(0x65, KeyEvent.VK_E);
105.86 + regularKeyCodesMap.put(0x46, KeyEvent.VK_F);
105.87 + regularKeyCodesMap.put(0x66, KeyEvent.VK_F);
105.88 + regularKeyCodesMap.put(0x47, KeyEvent.VK_G);
105.89 + regularKeyCodesMap.put(0x67, KeyEvent.VK_G);
105.90 + regularKeyCodesMap.put(0x48, KeyEvent.VK_H);
105.91 + regularKeyCodesMap.put(0x68, KeyEvent.VK_H);
105.92 + regularKeyCodesMap.put(0x49, KeyEvent.VK_I);
105.93 + regularKeyCodesMap.put(0x69, KeyEvent.VK_I);
105.94 + regularKeyCodesMap.put(0x4A, KeyEvent.VK_J);
105.95 + regularKeyCodesMap.put(0x6A, KeyEvent.VK_J);
105.96 + regularKeyCodesMap.put(0x4B, KeyEvent.VK_K);
105.97 + regularKeyCodesMap.put(0x6B, KeyEvent.VK_K);
105.98 + regularKeyCodesMap.put(0x4C, KeyEvent.VK_L);
105.99 + regularKeyCodesMap.put(0x6C, KeyEvent.VK_L);
105.100 + regularKeyCodesMap.put(0x4D, KeyEvent.VK_M);
105.101 + regularKeyCodesMap.put(0x6D, KeyEvent.VK_M);
105.102 + regularKeyCodesMap.put(0x4E, KeyEvent.VK_N);
105.103 + regularKeyCodesMap.put(0x6E, KeyEvent.VK_N);
105.104 + regularKeyCodesMap.put(0x4F, KeyEvent.VK_O);
105.105 + regularKeyCodesMap.put(0x6F, KeyEvent.VK_O);
105.106 + regularKeyCodesMap.put(0x50, KeyEvent.VK_P);
105.107 + regularKeyCodesMap.put(0x70, KeyEvent.VK_P);
105.108 + regularKeyCodesMap.put(0x51, KeyEvent.VK_Q);
105.109 + regularKeyCodesMap.put(0x71, KeyEvent.VK_Q);
105.110 + regularKeyCodesMap.put(0x52, KeyEvent.VK_R);
105.111 + regularKeyCodesMap.put(0x72, KeyEvent.VK_R);
105.112 + regularKeyCodesMap.put(0x53, KeyEvent.VK_S);
105.113 + regularKeyCodesMap.put(0x73, KeyEvent.VK_S);
105.114 + regularKeyCodesMap.put(0x54, KeyEvent.VK_T);
105.115 + regularKeyCodesMap.put(0x74, KeyEvent.VK_T);
105.116 + regularKeyCodesMap.put(0x55, KeyEvent.VK_U);
105.117 + regularKeyCodesMap.put(0x75, KeyEvent.VK_U);
105.118 + regularKeyCodesMap.put(0x56, KeyEvent.VK_V);
105.119 + regularKeyCodesMap.put(0x76, KeyEvent.VK_V);
105.120 + regularKeyCodesMap.put(0x57, KeyEvent.VK_W);
105.121 + regularKeyCodesMap.put(0x77, KeyEvent.VK_W);
105.122 + regularKeyCodesMap.put(0x58, KeyEvent.VK_X);
105.123 + regularKeyCodesMap.put(0x78, KeyEvent.VK_X);
105.124 + regularKeyCodesMap.put(0x59, KeyEvent.VK_Y);
105.125 + regularKeyCodesMap.put(0x79, KeyEvent.VK_Y);
105.126 + regularKeyCodesMap.put(0x5A, KeyEvent.VK_Z);
105.127 + regularKeyCodesMap.put(0x7A, KeyEvent.VK_Z);
105.128 + regularKeyCodesMap.put(0x5B, KeyEvent.VK_OPEN_BRACKET);
105.129 + regularKeyCodesMap.put(0x5C, KeyEvent.VK_BACK_SLASH);
105.130 + regularKeyCodesMap.put(0x5D, KeyEvent.VK_CLOSE_BRACKET);
105.131 +// regularKeyCodesMap.put(0x60, KeyEvent.VK_NUMPAD0);
105.132 +// regularKeyCodesMap.put(0x61, KeyEvent.VK_NUMPAD1);
105.133 +// regularKeyCodesMap.put(0x62, KeyEvent.VK_NUMPAD2);
105.134 +// regularKeyCodesMap.put(0x63, KeyEvent.VK_NUMPAD3);
105.135 +// regularKeyCodesMap.put(0x64, KeyEvent.VK_NUMPAD4);
105.136 +// regularKeyCodesMap.put(0x65, KeyEvent.VK_NUMPAD5);
105.137 +// regularKeyCodesMap.put(0x66, KeyEvent.VK_NUMPAD6);
105.138 +// regularKeyCodesMap.put(0x67, KeyEvent.VK_NUMPAD7);
105.139 +// regularKeyCodesMap.put(0x68, KeyEvent.VK_NUMPAD8);
105.140 +// regularKeyCodesMap.put(0x69, KeyEvent.VK_NUMPAD9);
105.141 + regularKeyCodesMap.put(0x6A, KeyEvent.VK_MULTIPLY);
105.142 + regularKeyCodesMap.put(0x6B, KeyEvent.VK_ADD);
105.143 + regularKeyCodesMap.put(0x6C, KeyEvent.VK_SEPARATER);
105.144 + regularKeyCodesMap.put(0x6D, KeyEvent.VK_SUBTRACT);
105.145 + regularKeyCodesMap.put(0x6E, KeyEvent.VK_DECIMAL);
105.146 + regularKeyCodesMap.put(0x6F, KeyEvent.VK_DIVIDE);
105.147 + regularKeyCodesMap.put(0x7F, KeyEvent.VK_DELETE);
105.148 + regularKeyCodesMap.put(0xC0, KeyEvent.VK_BACK_QUOTE);
105.149 + regularKeyCodesMap.put(0xDE, KeyEvent.VK_QUOTE);
105.150 + regularKeyCodesMap.put(0x26, KeyEvent.VK_AMPERSAND);
105.151 + regularKeyCodesMap.put(0x2A, KeyEvent.VK_ASTERISK);
105.152 + regularKeyCodesMap.put(0x22, KeyEvent.VK_QUOTEDBL);
105.153 + regularKeyCodesMap.put(0x3C, KeyEvent.VK_LESS);
105.154 + regularKeyCodesMap.put(0x3E, KeyEvent.VK_GREATER);
105.155 + regularKeyCodesMap.put(0x7B, KeyEvent.VK_BRACELEFT);
105.156 + regularKeyCodesMap.put(0x7D, KeyEvent.VK_BRACERIGHT);
105.157 + regularKeyCodesMap.put(0x40, KeyEvent.VK_AT);
105.158 + regularKeyCodesMap.put(0x3A, KeyEvent.VK_COLON);
105.159 + regularKeyCodesMap.put(0x5E, KeyEvent.VK_CIRCUMFLEX);
105.160 + regularKeyCodesMap.put(0x24, KeyEvent.VK_DOLLAR);
105.161 + regularKeyCodesMap.put(0x20AC, KeyEvent.VK_EURO_SIGN);
105.162 + regularKeyCodesMap.put(0x21, KeyEvent.VK_EXCLAMATION_MARK);
105.163 + regularKeyCodesMap.put(0xA1, KeyEvent.VK_INVERTED_EXCLAMATION_MARK);
105.164 + regularKeyCodesMap.put(0x28, KeyEvent.VK_LEFT_PARENTHESIS);
105.165 + regularKeyCodesMap.put(0x23, KeyEvent.VK_NUMBER_SIGN);
105.166 + regularKeyCodesMap.put(0x2B, KeyEvent.VK_PLUS);
105.167 + regularKeyCodesMap.put(0x29, KeyEvent.VK_RIGHT_PARENTHESIS);
105.168 + regularKeyCodesMap.put(0x5F, KeyEvent.VK_UNDERSCORE);
105.169 +
105.170 +
105.171 + extendedKeyCodesSet.add(0x01000000+0x0060);
105.172 + extendedKeyCodesSet.add(0x01000000+0x007C);
105.173 + extendedKeyCodesSet.add(0x01000000+0x007E);
105.174 + extendedKeyCodesSet.add(0x01000000+0x00A2);
105.175 + extendedKeyCodesSet.add(0x01000000+0x00A3);
105.176 + extendedKeyCodesSet.add(0x01000000+0x00A5);
105.177 + extendedKeyCodesSet.add(0x01000000+0x00A7);
105.178 + extendedKeyCodesSet.add(0x01000000+0x00A8);
105.179 + extendedKeyCodesSet.add(0x01000000+0x00AB);
105.180 + extendedKeyCodesSet.add(0x01000000+0x00B0);
105.181 + extendedKeyCodesSet.add(0x01000000+0x00B1);
105.182 + extendedKeyCodesSet.add(0x01000000+0x00B2);
105.183 + extendedKeyCodesSet.add(0x01000000+0x00B3);
105.184 + extendedKeyCodesSet.add(0x01000000+0x00B4);
105.185 + extendedKeyCodesSet.add(0x01000000+0x00B5);
105.186 + extendedKeyCodesSet.add(0x01000000+0x00B6);
105.187 + extendedKeyCodesSet.add(0x01000000+0x00B7);
105.188 + extendedKeyCodesSet.add(0x01000000+0x00B9);
105.189 + extendedKeyCodesSet.add(0x01000000+0x00BA);
105.190 + extendedKeyCodesSet.add(0x01000000+0x00BB);
105.191 + extendedKeyCodesSet.add(0x01000000+0x00BC);
105.192 + extendedKeyCodesSet.add(0x01000000+0x00BD);
105.193 + extendedKeyCodesSet.add(0x01000000+0x00BE);
105.194 + extendedKeyCodesSet.add(0x01000000+0x00BF);
105.195 + extendedKeyCodesSet.add(0x01000000+0x00C4);
105.196 + extendedKeyCodesSet.add(0x01000000+0x00C5);
105.197 + extendedKeyCodesSet.add(0x01000000+0x00C6);
105.198 + extendedKeyCodesSet.add(0x01000000+0x00C7);
105.199 + extendedKeyCodesSet.add(0x01000000+0x00D1);
105.200 + extendedKeyCodesSet.add(0x01000000+0x00D6);
105.201 + extendedKeyCodesSet.add(0x01000000+0x00D7);
105.202 + extendedKeyCodesSet.add(0x01000000+0x00D8);
105.203 + extendedKeyCodesSet.add(0x01000000+0x00DF);
105.204 + extendedKeyCodesSet.add(0x01000000+0x00E0);
105.205 + extendedKeyCodesSet.add(0x01000000+0x00E1);
105.206 + extendedKeyCodesSet.add(0x01000000+0x00E2);
105.207 + extendedKeyCodesSet.add(0x01000000+0x00E4);
105.208 + extendedKeyCodesSet.add(0x01000000+0x00E5);
105.209 + extendedKeyCodesSet.add(0x01000000+0x00E6);
105.210 + extendedKeyCodesSet.add(0x01000000+0x00E7);
105.211 + extendedKeyCodesSet.add(0x01000000+0x00E8);
105.212 + extendedKeyCodesSet.add(0x01000000+0x00E9);
105.213 + extendedKeyCodesSet.add(0x01000000+0x00EA);
105.214 + extendedKeyCodesSet.add(0x01000000+0x00EB);
105.215 + extendedKeyCodesSet.add(0x01000000+0x00EC);
105.216 + extendedKeyCodesSet.add(0x01000000+0x00ED);
105.217 + extendedKeyCodesSet.add(0x01000000+0x00EE);
105.218 + extendedKeyCodesSet.add(0x01000000+0x00F0);
105.219 + extendedKeyCodesSet.add(0x01000000+0x00F1);
105.220 + extendedKeyCodesSet.add(0x01000000+0x00F2);
105.221 + extendedKeyCodesSet.add(0x01000000+0x00F3);
105.222 + extendedKeyCodesSet.add(0x01000000+0x00F4);
105.223 + extendedKeyCodesSet.add(0x01000000+0x00F5);
105.224 + extendedKeyCodesSet.add(0x01000000+0x00F6);
105.225 + extendedKeyCodesSet.add(0x01000000+0x00F7);
105.226 + extendedKeyCodesSet.add(0x01000000+0x00F8);
105.227 + extendedKeyCodesSet.add(0x01000000+0x00F9);
105.228 + extendedKeyCodesSet.add(0x01000000+0x00FA);
105.229 + extendedKeyCodesSet.add(0x01000000+0x00FB);
105.230 + extendedKeyCodesSet.add(0x01000000+0x00FC);
105.231 + extendedKeyCodesSet.add(0x01000000+0x00FD);
105.232 + extendedKeyCodesSet.add(0x01000000+0x00FE);
105.233 + extendedKeyCodesSet.add(0x01000000+0x0105);
105.234 + extendedKeyCodesSet.add(0x01000000+0x02DB);
105.235 + extendedKeyCodesSet.add(0x01000000+0x0142);
105.236 + extendedKeyCodesSet.add(0x01000000+0x013E);
105.237 + extendedKeyCodesSet.add(0x01000000+0x015B);
105.238 + extendedKeyCodesSet.add(0x01000000+0x0161);
105.239 + extendedKeyCodesSet.add(0x01000000+0x015F);
105.240 + extendedKeyCodesSet.add(0x01000000+0x0165);
105.241 + extendedKeyCodesSet.add(0x01000000+0x017E);
105.242 + extendedKeyCodesSet.add(0x01000000+0x017C);
105.243 + extendedKeyCodesSet.add(0x01000000+0x0103);
105.244 + extendedKeyCodesSet.add(0x01000000+0x0107);
105.245 + extendedKeyCodesSet.add(0x01000000+0x010D);
105.246 + extendedKeyCodesSet.add(0x01000000+0x0119);
105.247 + extendedKeyCodesSet.add(0x01000000+0x011B);
105.248 + extendedKeyCodesSet.add(0x01000000+0x0111);
105.249 + extendedKeyCodesSet.add(0x01000000+0x0148);
105.250 + extendedKeyCodesSet.add(0x01000000+0x0151);
105.251 + extendedKeyCodesSet.add(0x01000000+0x0171);
105.252 + extendedKeyCodesSet.add(0x01000000+0x0159);
105.253 + extendedKeyCodesSet.add(0x01000000+0x016F);
105.254 + extendedKeyCodesSet.add(0x01000000+0x0163);
105.255 + extendedKeyCodesSet.add(0x01000000+0x02D9);
105.256 + extendedKeyCodesSet.add(0x01000000+0x0130);
105.257 + extendedKeyCodesSet.add(0x01000000+0x0127);
105.258 + extendedKeyCodesSet.add(0x01000000+0x0125);
105.259 + extendedKeyCodesSet.add(0x01000000+0x0131);
105.260 + extendedKeyCodesSet.add(0x01000000+0x011F);
105.261 + extendedKeyCodesSet.add(0x01000000+0x0135);
105.262 + extendedKeyCodesSet.add(0x01000000+0x010B);
105.263 + extendedKeyCodesSet.add(0x01000000+0x0109);
105.264 + extendedKeyCodesSet.add(0x01000000+0x0121);
105.265 + extendedKeyCodesSet.add(0x01000000+0x011D);
105.266 + extendedKeyCodesSet.add(0x01000000+0x016D);
105.267 + extendedKeyCodesSet.add(0x01000000+0x015D);
105.268 + extendedKeyCodesSet.add(0x01000000+0x0138);
105.269 + extendedKeyCodesSet.add(0x01000000+0x0157);
105.270 + extendedKeyCodesSet.add(0x01000000+0x013C);
105.271 + extendedKeyCodesSet.add(0x01000000+0x0113);
105.272 + extendedKeyCodesSet.add(0x01000000+0x0123);
105.273 + extendedKeyCodesSet.add(0x01000000+0x0167);
105.274 + extendedKeyCodesSet.add(0x01000000+0x014B);
105.275 + extendedKeyCodesSet.add(0x01000000+0x0101);
105.276 + extendedKeyCodesSet.add(0x01000000+0x012F);
105.277 + extendedKeyCodesSet.add(0x01000000+0x0117);
105.278 + extendedKeyCodesSet.add(0x01000000+0x012B);
105.279 + extendedKeyCodesSet.add(0x01000000+0x0146);
105.280 + extendedKeyCodesSet.add(0x01000000+0x014D);
105.281 + extendedKeyCodesSet.add(0x01000000+0x0137);
105.282 + extendedKeyCodesSet.add(0x01000000+0x0173);
105.283 + extendedKeyCodesSet.add(0x01000000+0x016B);
105.284 + extendedKeyCodesSet.add(0x01000000+0x0153);
105.285 + extendedKeyCodesSet.add(0x01000000+0x30FC);
105.286 + extendedKeyCodesSet.add(0x01000000+0x30A2);
105.287 + extendedKeyCodesSet.add(0x01000000+0x30A4);
105.288 + extendedKeyCodesSet.add(0x01000000+0x30A6);
105.289 + extendedKeyCodesSet.add(0x01000000+0x30A8);
105.290 + extendedKeyCodesSet.add(0x01000000+0x30AA);
105.291 + extendedKeyCodesSet.add(0x01000000+0x30AB);
105.292 + extendedKeyCodesSet.add(0x01000000+0x30AD);
105.293 + extendedKeyCodesSet.add(0x01000000+0x30AF);
105.294 + extendedKeyCodesSet.add(0x01000000+0x30B1);
105.295 + extendedKeyCodesSet.add(0x01000000+0x30B3);
105.296 + extendedKeyCodesSet.add(0x01000000+0x30B5);
105.297 + extendedKeyCodesSet.add(0x01000000+0x30B7);
105.298 + extendedKeyCodesSet.add(0x01000000+0x30B9);
105.299 + extendedKeyCodesSet.add(0x01000000+0x30BB);
105.300 + extendedKeyCodesSet.add(0x01000000+0x30BD);
105.301 + extendedKeyCodesSet.add(0x01000000+0x30BF);
105.302 + extendedKeyCodesSet.add(0x01000000+0x30C1);
105.303 + extendedKeyCodesSet.add(0x01000000+0x30C4);
105.304 + extendedKeyCodesSet.add(0x01000000+0x30C6);
105.305 + extendedKeyCodesSet.add(0x01000000+0x30C8);
105.306 + extendedKeyCodesSet.add(0x01000000+0x30CA);
105.307 + extendedKeyCodesSet.add(0x01000000+0x30CB);
105.308 + extendedKeyCodesSet.add(0x01000000+0x30CC);
105.309 + extendedKeyCodesSet.add(0x01000000+0x30CD);
105.310 + extendedKeyCodesSet.add(0x01000000+0x30CE);
105.311 + extendedKeyCodesSet.add(0x01000000+0x30CF);
105.312 + extendedKeyCodesSet.add(0x01000000+0x30D2);
105.313 + extendedKeyCodesSet.add(0x01000000+0x30D5);
105.314 + extendedKeyCodesSet.add(0x01000000+0x30D8);
105.315 + extendedKeyCodesSet.add(0x01000000+0x30DB);
105.316 + extendedKeyCodesSet.add(0x01000000+0x30DE);
105.317 + extendedKeyCodesSet.add(0x01000000+0x30DF);
105.318 + extendedKeyCodesSet.add(0x01000000+0x30E0);
105.319 + extendedKeyCodesSet.add(0x01000000+0x30E1);
105.320 + extendedKeyCodesSet.add(0x01000000+0x30E2);
105.321 + extendedKeyCodesSet.add(0x01000000+0x30E4);
105.322 + extendedKeyCodesSet.add(0x01000000+0x30E6);
105.323 + extendedKeyCodesSet.add(0x01000000+0x30E8);
105.324 + extendedKeyCodesSet.add(0x01000000+0x30E9);
105.325 + extendedKeyCodesSet.add(0x01000000+0x30EA);
105.326 + extendedKeyCodesSet.add(0x01000000+0x30EB);
105.327 + extendedKeyCodesSet.add(0x01000000+0x30EC);
105.328 + extendedKeyCodesSet.add(0x01000000+0x30ED);
105.329 + extendedKeyCodesSet.add(0x01000000+0x30EF);
105.330 + extendedKeyCodesSet.add(0x01000000+0x30F3);
105.331 + extendedKeyCodesSet.add(0x01000000+0x309B);
105.332 + extendedKeyCodesSet.add(0x01000000+0x309C);
105.333 + extendedKeyCodesSet.add(0x01000000+0x06F0);
105.334 + extendedKeyCodesSet.add(0x01000000+0x06F1);
105.335 + extendedKeyCodesSet.add(0x01000000+0x06F2);
105.336 + extendedKeyCodesSet.add(0x01000000+0x06F3);
105.337 + extendedKeyCodesSet.add(0x01000000+0x06F4);
105.338 + extendedKeyCodesSet.add(0x01000000+0x06F5);
105.339 + extendedKeyCodesSet.add(0x01000000+0x06F6);
105.340 + extendedKeyCodesSet.add(0x01000000+0x06F7);
105.341 + extendedKeyCodesSet.add(0x01000000+0x06F8);
105.342 + extendedKeyCodesSet.add(0x01000000+0x06F9);
105.343 + extendedKeyCodesSet.add(0x01000000+0x0670);
105.344 + extendedKeyCodesSet.add(0x01000000+0x067E);
105.345 + extendedKeyCodesSet.add(0x01000000+0x0686);
105.346 + extendedKeyCodesSet.add(0x01000000+0x060C);
105.347 + extendedKeyCodesSet.add(0x01000000+0x06D4);
105.348 + extendedKeyCodesSet.add(0x01000000+0x0660);
105.349 + extendedKeyCodesSet.add(0x01000000+0x0661);
105.350 + extendedKeyCodesSet.add(0x01000000+0x0662);
105.351 + extendedKeyCodesSet.add(0x01000000+0x0663);
105.352 + extendedKeyCodesSet.add(0x01000000+0x0664);
105.353 + extendedKeyCodesSet.add(0x01000000+0x0665);
105.354 + extendedKeyCodesSet.add(0x01000000+0x0666);
105.355 + extendedKeyCodesSet.add(0x01000000+0x0667);
105.356 + extendedKeyCodesSet.add(0x01000000+0x0668);
105.357 + extendedKeyCodesSet.add(0x01000000+0x0669);
105.358 + extendedKeyCodesSet.add(0x01000000+0x061B);
105.359 + extendedKeyCodesSet.add(0x01000000+0x0621);
105.360 + extendedKeyCodesSet.add(0x01000000+0x0624);
105.361 + extendedKeyCodesSet.add(0x01000000+0x0626);
105.362 + extendedKeyCodesSet.add(0x01000000+0x0627);
105.363 + extendedKeyCodesSet.add(0x01000000+0x0628);
105.364 + extendedKeyCodesSet.add(0x01000000+0x0629);
105.365 + extendedKeyCodesSet.add(0x01000000+0x062A);
105.366 + extendedKeyCodesSet.add(0x01000000+0x062B);
105.367 + extendedKeyCodesSet.add(0x01000000+0x062C);
105.368 + extendedKeyCodesSet.add(0x01000000+0x062D);
105.369 + extendedKeyCodesSet.add(0x01000000+0x062E);
105.370 + extendedKeyCodesSet.add(0x01000000+0x062F);
105.371 + extendedKeyCodesSet.add(0x01000000+0x0630);
105.372 + extendedKeyCodesSet.add(0x01000000+0x0631);
105.373 + extendedKeyCodesSet.add(0x01000000+0x0632);
105.374 + extendedKeyCodesSet.add(0x01000000+0x0633);
105.375 + extendedKeyCodesSet.add(0x01000000+0x0634);
105.376 + extendedKeyCodesSet.add(0x01000000+0x0635);
105.377 + extendedKeyCodesSet.add(0x01000000+0x0636);
105.378 + extendedKeyCodesSet.add(0x01000000+0x0637);
105.379 + extendedKeyCodesSet.add(0x01000000+0x0638);
105.380 + extendedKeyCodesSet.add(0x01000000+0x0639);
105.381 + extendedKeyCodesSet.add(0x01000000+0x063A);
105.382 + extendedKeyCodesSet.add(0x01000000+0x0641);
105.383 + extendedKeyCodesSet.add(0x01000000+0x0642);
105.384 + extendedKeyCodesSet.add(0x01000000+0x0643);
105.385 + extendedKeyCodesSet.add(0x01000000+0x0644);
105.386 + extendedKeyCodesSet.add(0x01000000+0x0645);
105.387 + extendedKeyCodesSet.add(0x01000000+0x0646);
105.388 + extendedKeyCodesSet.add(0x01000000+0x0647);
105.389 + extendedKeyCodesSet.add(0x01000000+0x0648);
105.390 + extendedKeyCodesSet.add(0x01000000+0x0649);
105.391 + extendedKeyCodesSet.add(0x01000000+0x064A);
105.392 + extendedKeyCodesSet.add(0x01000000+0x064E);
105.393 + extendedKeyCodesSet.add(0x01000000+0x064F);
105.394 + extendedKeyCodesSet.add(0x01000000+0x0650);
105.395 + extendedKeyCodesSet.add(0x01000000+0x0652);
105.396 + extendedKeyCodesSet.add(0x01000000+0x0698);
105.397 + extendedKeyCodesSet.add(0x01000000+0x06A4);
105.398 + extendedKeyCodesSet.add(0x01000000+0x06A9);
105.399 + extendedKeyCodesSet.add(0x01000000+0x06AF);
105.400 + extendedKeyCodesSet.add(0x01000000+0x06BE);
105.401 + extendedKeyCodesSet.add(0x01000000+0x06CC);
105.402 + extendedKeyCodesSet.add(0x01000000+0x06CC);
105.403 + extendedKeyCodesSet.add(0x01000000+0x06D2);
105.404 + extendedKeyCodesSet.add(0x01000000+0x0493);
105.405 + extendedKeyCodesSet.add(0x01000000+0x0497);
105.406 + extendedKeyCodesSet.add(0x01000000+0x049B);
105.407 + extendedKeyCodesSet.add(0x01000000+0x049D);
105.408 + extendedKeyCodesSet.add(0x01000000+0x04A3);
105.409 + extendedKeyCodesSet.add(0x01000000+0x04AF);
105.410 + extendedKeyCodesSet.add(0x01000000+0x04B1);
105.411 + extendedKeyCodesSet.add(0x01000000+0x04B3);
105.412 + extendedKeyCodesSet.add(0x01000000+0x04B9);
105.413 + extendedKeyCodesSet.add(0x01000000+0x04BB);
105.414 + extendedKeyCodesSet.add(0x01000000+0x04D9);
105.415 + extendedKeyCodesSet.add(0x01000000+0x04E9);
105.416 + extendedKeyCodesSet.add(0x01000000+0x0452);
105.417 + extendedKeyCodesSet.add(0x01000000+0x0453);
105.418 + extendedKeyCodesSet.add(0x01000000+0x0451);
105.419 + extendedKeyCodesSet.add(0x01000000+0x0454);
105.420 + extendedKeyCodesSet.add(0x01000000+0x0455);
105.421 + extendedKeyCodesSet.add(0x01000000+0x0456);
105.422 + extendedKeyCodesSet.add(0x01000000+0x0457);
105.423 + extendedKeyCodesSet.add(0x01000000+0x0458);
105.424 + extendedKeyCodesSet.add(0x01000000+0x0459);
105.425 + extendedKeyCodesSet.add(0x01000000+0x045A);
105.426 + extendedKeyCodesSet.add(0x01000000+0x045B);
105.427 + extendedKeyCodesSet.add(0x01000000+0x045C);
105.428 + extendedKeyCodesSet.add(0x01000000+0x0491);
105.429 + extendedKeyCodesSet.add(0x01000000+0x045E);
105.430 + extendedKeyCodesSet.add(0x01000000+0x045F);
105.431 + extendedKeyCodesSet.add(0x01000000+0x2116);
105.432 + extendedKeyCodesSet.add(0x01000000+0x044E);
105.433 + extendedKeyCodesSet.add(0x01000000+0x0430);
105.434 + extendedKeyCodesSet.add(0x01000000+0x0431);
105.435 + extendedKeyCodesSet.add(0x01000000+0x0446);
105.436 + extendedKeyCodesSet.add(0x01000000+0x0434);
105.437 + extendedKeyCodesSet.add(0x01000000+0x0435);
105.438 + extendedKeyCodesSet.add(0x01000000+0x0444);
105.439 + extendedKeyCodesSet.add(0x01000000+0x0433);
105.440 + extendedKeyCodesSet.add(0x01000000+0x0445);
105.441 + extendedKeyCodesSet.add(0x01000000+0x0438);
105.442 + extendedKeyCodesSet.add(0x01000000+0x0439);
105.443 + extendedKeyCodesSet.add(0x01000000+0x043A);
105.444 + extendedKeyCodesSet.add(0x01000000+0x043B);
105.445 + extendedKeyCodesSet.add(0x01000000+0x043C);
105.446 + extendedKeyCodesSet.add(0x01000000+0x043D);
105.447 + extendedKeyCodesSet.add(0x01000000+0x043E);
105.448 + extendedKeyCodesSet.add(0x01000000+0x043F);
105.449 + extendedKeyCodesSet.add(0x01000000+0x044F);
105.450 + extendedKeyCodesSet.add(0x01000000+0x0440);
105.451 + extendedKeyCodesSet.add(0x01000000+0x0441);
105.452 + extendedKeyCodesSet.add(0x01000000+0x0442);
105.453 + extendedKeyCodesSet.add(0x01000000+0x0443);
105.454 + extendedKeyCodesSet.add(0x01000000+0x0436);
105.455 + extendedKeyCodesSet.add(0x01000000+0x0432);
105.456 + extendedKeyCodesSet.add(0x01000000+0x044C);
105.457 + extendedKeyCodesSet.add(0x01000000+0x044B);
105.458 + extendedKeyCodesSet.add(0x01000000+0x0437);
105.459 + extendedKeyCodesSet.add(0x01000000+0x0448);
105.460 + extendedKeyCodesSet.add(0x01000000+0x044D);
105.461 + extendedKeyCodesSet.add(0x01000000+0x0449);
105.462 + extendedKeyCodesSet.add(0x01000000+0x0447);
105.463 + extendedKeyCodesSet.add(0x01000000+0x044A);
105.464 + extendedKeyCodesSet.add(0x01000000+0x2015);
105.465 + extendedKeyCodesSet.add(0x01000000+0x03B1);
105.466 + extendedKeyCodesSet.add(0x01000000+0x03B2);
105.467 + extendedKeyCodesSet.add(0x01000000+0x03B3);
105.468 + extendedKeyCodesSet.add(0x01000000+0x03B4);
105.469 + extendedKeyCodesSet.add(0x01000000+0x03B5);
105.470 + extendedKeyCodesSet.add(0x01000000+0x03B6);
105.471 + extendedKeyCodesSet.add(0x01000000+0x03B7);
105.472 + extendedKeyCodesSet.add(0x01000000+0x03B8);
105.473 + extendedKeyCodesSet.add(0x01000000+0x03B9);
105.474 + extendedKeyCodesSet.add(0x01000000+0x03BA);
105.475 + extendedKeyCodesSet.add(0x01000000+0x03BB);
105.476 + extendedKeyCodesSet.add(0x01000000+0x03BC);
105.477 + extendedKeyCodesSet.add(0x01000000+0x03BD);
105.478 + extendedKeyCodesSet.add(0x01000000+0x03BE);
105.479 + extendedKeyCodesSet.add(0x01000000+0x03BF);
105.480 + extendedKeyCodesSet.add(0x01000000+0x03C0);
105.481 + extendedKeyCodesSet.add(0x01000000+0x03C1);
105.482 + extendedKeyCodesSet.add(0x01000000+0x03C3);
105.483 + extendedKeyCodesSet.add(0x01000000+0x03C2);
105.484 + extendedKeyCodesSet.add(0x01000000+0x03C4);
105.485 + extendedKeyCodesSet.add(0x01000000+0x03C5);
105.486 + extendedKeyCodesSet.add(0x01000000+0x03C6);
105.487 + extendedKeyCodesSet.add(0x01000000+0x03C7);
105.488 + extendedKeyCodesSet.add(0x01000000+0x03C8);
105.489 + extendedKeyCodesSet.add(0x01000000+0x03C9);
105.490 + extendedKeyCodesSet.add(0x01000000+0x2190);
105.491 + extendedKeyCodesSet.add(0x01000000+0x2192);
105.492 + extendedKeyCodesSet.add(0x01000000+0x2193);
105.493 + extendedKeyCodesSet.add(0x01000000+0x2013);
105.494 + extendedKeyCodesSet.add(0x01000000+0x201C);
105.495 + extendedKeyCodesSet.add(0x01000000+0x201D);
105.496 + extendedKeyCodesSet.add(0x01000000+0x201E);
105.497 + extendedKeyCodesSet.add(0x01000000+0x05D0);
105.498 + extendedKeyCodesSet.add(0x01000000+0x05D1);
105.499 + extendedKeyCodesSet.add(0x01000000+0x05D2);
105.500 + extendedKeyCodesSet.add(0x01000000+0x05D3);
105.501 + extendedKeyCodesSet.add(0x01000000+0x05D4);
105.502 + extendedKeyCodesSet.add(0x01000000+0x05D5);
105.503 + extendedKeyCodesSet.add(0x01000000+0x05D6);
105.504 + extendedKeyCodesSet.add(0x01000000+0x05D7);
105.505 + extendedKeyCodesSet.add(0x01000000+0x05D8);
105.506 + extendedKeyCodesSet.add(0x01000000+0x05D9);
105.507 + extendedKeyCodesSet.add(0x01000000+0x05DA);
105.508 + extendedKeyCodesSet.add(0x01000000+0x05DB);
105.509 + extendedKeyCodesSet.add(0x01000000+0x05DC);
105.510 + extendedKeyCodesSet.add(0x01000000+0x05DD);
105.511 + extendedKeyCodesSet.add(0x01000000+0x05DE);
105.512 + extendedKeyCodesSet.add(0x01000000+0x05DF);
105.513 + extendedKeyCodesSet.add(0x01000000+0x05E0);
105.514 + extendedKeyCodesSet.add(0x01000000+0x05E1);
105.515 + extendedKeyCodesSet.add(0x01000000+0x05E2);
105.516 + extendedKeyCodesSet.add(0x01000000+0x05E3);
105.517 + extendedKeyCodesSet.add(0x01000000+0x05E4);
105.518 + extendedKeyCodesSet.add(0x01000000+0x05E5);
105.519 + extendedKeyCodesSet.add(0x01000000+0x05E6);
105.520 + extendedKeyCodesSet.add(0x01000000+0x05E7);
105.521 + extendedKeyCodesSet.add(0x01000000+0x05E8);
105.522 + extendedKeyCodesSet.add(0x01000000+0x05E9);
105.523 + extendedKeyCodesSet.add(0x01000000+0x05EA);
105.524 + extendedKeyCodesSet.add(0x01000000+0x0E01);
105.525 + extendedKeyCodesSet.add(0x01000000+0x0E02);
105.526 + extendedKeyCodesSet.add(0x01000000+0x0E03);
105.527 + extendedKeyCodesSet.add(0x01000000+0x0E04);
105.528 + extendedKeyCodesSet.add(0x01000000+0x0E05);
105.529 + extendedKeyCodesSet.add(0x01000000+0x0E07);
105.530 + extendedKeyCodesSet.add(0x01000000+0x0E08);
105.531 + extendedKeyCodesSet.add(0x01000000+0x0E0A);
105.532 + extendedKeyCodesSet.add(0x01000000+0x0E0C);
105.533 + extendedKeyCodesSet.add(0x01000000+0x0E14);
105.534 + extendedKeyCodesSet.add(0x01000000+0x0E15);
105.535 + extendedKeyCodesSet.add(0x01000000+0x0E16);
105.536 + extendedKeyCodesSet.add(0x01000000+0x0E17);
105.537 + extendedKeyCodesSet.add(0x01000000+0x0E19);
105.538 + extendedKeyCodesSet.add(0x01000000+0x0E1A);
105.539 + extendedKeyCodesSet.add(0x01000000+0x0E1B);
105.540 + extendedKeyCodesSet.add(0x01000000+0x0E1C);
105.541 + extendedKeyCodesSet.add(0x01000000+0x0E1D);
105.542 + extendedKeyCodesSet.add(0x01000000+0x0E1E);
105.543 + extendedKeyCodesSet.add(0x01000000+0x0E1F);
105.544 + extendedKeyCodesSet.add(0x01000000+0x0E20);
105.545 + extendedKeyCodesSet.add(0x01000000+0x0E21);
105.546 + extendedKeyCodesSet.add(0x01000000+0x0E22);
105.547 + extendedKeyCodesSet.add(0x01000000+0x0E23);
105.548 + extendedKeyCodesSet.add(0x01000000+0x0E25);
105.549 + extendedKeyCodesSet.add(0x01000000+0x0E27);
105.550 + extendedKeyCodesSet.add(0x01000000+0x0E2A);
105.551 + extendedKeyCodesSet.add(0x01000000+0x0E2B);
105.552 + extendedKeyCodesSet.add(0x01000000+0x0E2D);
105.553 + extendedKeyCodesSet.add(0x01000000+0x0E30);
105.554 + extendedKeyCodesSet.add(0x01000000+0x0E31);
105.555 + extendedKeyCodesSet.add(0x01000000+0x0E32);
105.556 + extendedKeyCodesSet.add(0x01000000+0x0E33);
105.557 + extendedKeyCodesSet.add(0x01000000+0x0E34);
105.558 + extendedKeyCodesSet.add(0x01000000+0x0E35);
105.559 + extendedKeyCodesSet.add(0x01000000+0x0E36);
105.560 + extendedKeyCodesSet.add(0x01000000+0x0E37);
105.561 + extendedKeyCodesSet.add(0x01000000+0x0E38);
105.562 + extendedKeyCodesSet.add(0x01000000+0x0E39);
105.563 + extendedKeyCodesSet.add(0x01000000+0x0E3F);
105.564 + extendedKeyCodesSet.add(0x01000000+0x0E40);
105.565 + extendedKeyCodesSet.add(0x01000000+0x0E41);
105.566 + extendedKeyCodesSet.add(0x01000000+0x0E43);
105.567 + extendedKeyCodesSet.add(0x01000000+0x0E44);
105.568 + extendedKeyCodesSet.add(0x01000000+0x0E45);
105.569 + extendedKeyCodesSet.add(0x01000000+0x0E46);
105.570 + extendedKeyCodesSet.add(0x01000000+0x0E47);
105.571 + extendedKeyCodesSet.add(0x01000000+0x0E48);
105.572 + extendedKeyCodesSet.add(0x01000000+0x0E49);
105.573 + extendedKeyCodesSet.add(0x01000000+0x0E50);
105.574 + extendedKeyCodesSet.add(0x01000000+0x0E51);
105.575 + extendedKeyCodesSet.add(0x01000000+0x0E52);
105.576 + extendedKeyCodesSet.add(0x01000000+0x0E53);
105.577 + extendedKeyCodesSet.add(0x01000000+0x0E54);
105.578 + extendedKeyCodesSet.add(0x01000000+0x0E55);
105.579 + extendedKeyCodesSet.add(0x01000000+0x0E56);
105.580 + extendedKeyCodesSet.add(0x01000000+0x0E57);
105.581 + extendedKeyCodesSet.add(0x01000000+0x0E58);
105.582 + extendedKeyCodesSet.add(0x01000000+0x0E59);
105.583 + extendedKeyCodesSet.add(0x01000000+0x0587);
105.584 + extendedKeyCodesSet.add(0x01000000+0x0589);
105.585 + extendedKeyCodesSet.add(0x01000000+0x0589);
105.586 + extendedKeyCodesSet.add(0x01000000+0x055D);
105.587 + extendedKeyCodesSet.add(0x01000000+0x055D);
105.588 + extendedKeyCodesSet.add(0x01000000+0x055B);
105.589 + extendedKeyCodesSet.add(0x01000000+0x055B);
105.590 + extendedKeyCodesSet.add(0x01000000+0x055E);
105.591 + extendedKeyCodesSet.add(0x01000000+0x055E);
105.592 + extendedKeyCodesSet.add(0x01000000+0x0561);
105.593 + extendedKeyCodesSet.add(0x01000000+0x0562);
105.594 + extendedKeyCodesSet.add(0x01000000+0x0563);
105.595 + extendedKeyCodesSet.add(0x01000000+0x0564);
105.596 + extendedKeyCodesSet.add(0x01000000+0x0565);
105.597 + extendedKeyCodesSet.add(0x01000000+0x0566);
105.598 + extendedKeyCodesSet.add(0x01000000+0x0567);
105.599 + extendedKeyCodesSet.add(0x01000000+0x0568);
105.600 + extendedKeyCodesSet.add(0x01000000+0x0569);
105.601 + extendedKeyCodesSet.add(0x01000000+0x056A);
105.602 + extendedKeyCodesSet.add(0x01000000+0x056B);
105.603 + extendedKeyCodesSet.add(0x01000000+0x056C);
105.604 + extendedKeyCodesSet.add(0x01000000+0x056D);
105.605 + extendedKeyCodesSet.add(0x01000000+0x056E);
105.606 + extendedKeyCodesSet.add(0x01000000+0x056F);
105.607 + extendedKeyCodesSet.add(0x01000000+0x0570);
105.608 + extendedKeyCodesSet.add(0x01000000+0x0571);
105.609 + extendedKeyCodesSet.add(0x01000000+0x0572);
105.610 + extendedKeyCodesSet.add(0x01000000+0x0573);
105.611 + extendedKeyCodesSet.add(0x01000000+0x0574);
105.612 + extendedKeyCodesSet.add(0x01000000+0x0575);
105.613 + extendedKeyCodesSet.add(0x01000000+0x0576);
105.614 + extendedKeyCodesSet.add(0x01000000+0x0577);
105.615 + extendedKeyCodesSet.add(0x01000000+0x0578);
105.616 + extendedKeyCodesSet.add(0x01000000+0x0579);
105.617 + extendedKeyCodesSet.add(0x01000000+0x057A);
105.618 + extendedKeyCodesSet.add(0x01000000+0x057B);
105.619 + extendedKeyCodesSet.add(0x01000000+0x057C);
105.620 + extendedKeyCodesSet.add(0x01000000+0x057D);
105.621 + extendedKeyCodesSet.add(0x01000000+0x057E);
105.622 + extendedKeyCodesSet.add(0x01000000+0x057F);
105.623 + extendedKeyCodesSet.add(0x01000000+0x0580);
105.624 + extendedKeyCodesSet.add(0x01000000+0x0581);
105.625 + extendedKeyCodesSet.add(0x01000000+0x0582);
105.626 + extendedKeyCodesSet.add(0x01000000+0x0583);
105.627 + extendedKeyCodesSet.add(0x01000000+0x0584);
105.628 + extendedKeyCodesSet.add(0x01000000+0x0585);
105.629 + extendedKeyCodesSet.add(0x01000000+0x0586);
105.630 + extendedKeyCodesSet.add(0x01000000+0x10D0);
105.631 + extendedKeyCodesSet.add(0x01000000+0x10D1);
105.632 + extendedKeyCodesSet.add(0x01000000+0x10D2);
105.633 + extendedKeyCodesSet.add(0x01000000+0x10D3);
105.634 + extendedKeyCodesSet.add(0x01000000+0x10D4);
105.635 + extendedKeyCodesSet.add(0x01000000+0x10D5);
105.636 + extendedKeyCodesSet.add(0x01000000+0x10D6);
105.637 + extendedKeyCodesSet.add(0x01000000+0x10D7);
105.638 + extendedKeyCodesSet.add(0x01000000+0x10D8);
105.639 + extendedKeyCodesSet.add(0x01000000+0x10D9);
105.640 + extendedKeyCodesSet.add(0x01000000+0x10DA);
105.641 + extendedKeyCodesSet.add(0x01000000+0x10DB);
105.642 + extendedKeyCodesSet.add(0x01000000+0x10DC);
105.643 + extendedKeyCodesSet.add(0x01000000+0x10DD);
105.644 + extendedKeyCodesSet.add(0x01000000+0x10DE);
105.645 + extendedKeyCodesSet.add(0x01000000+0x10DF);
105.646 + extendedKeyCodesSet.add(0x01000000+0x10E0);
105.647 + extendedKeyCodesSet.add(0x01000000+0x10E1);
105.648 + extendedKeyCodesSet.add(0x01000000+0x10E2);
105.649 + extendedKeyCodesSet.add(0x01000000+0x10E3);
105.650 + extendedKeyCodesSet.add(0x01000000+0x10E4);
105.651 + extendedKeyCodesSet.add(0x01000000+0x10E5);
105.652 + extendedKeyCodesSet.add(0x01000000+0x10E6);
105.653 + extendedKeyCodesSet.add(0x01000000+0x10E7);
105.654 + extendedKeyCodesSet.add(0x01000000+0x10E8);
105.655 + extendedKeyCodesSet.add(0x01000000+0x10E9);
105.656 + extendedKeyCodesSet.add(0x01000000+0x10EA);
105.657 + extendedKeyCodesSet.add(0x01000000+0x10EB);
105.658 + extendedKeyCodesSet.add(0x01000000+0x10EC);
105.659 + extendedKeyCodesSet.add(0x01000000+0x10ED);
105.660 + extendedKeyCodesSet.add(0x01000000+0x10EE);
105.661 + extendedKeyCodesSet.add(0x01000000+0x10EF);
105.662 + extendedKeyCodesSet.add(0x01000000+0x10F0);
105.663 + extendedKeyCodesSet.add(0x01000000+0x01E7);
105.664 + extendedKeyCodesSet.add(0x01000000+0x0259);
105.665 + extendedKeyCodesSet.add(0x01000000+0x1EB9);
105.666 + extendedKeyCodesSet.add(0x01000000+0x1ECB);
105.667 + extendedKeyCodesSet.add(0x01000000+0x1ECD);
105.668 + extendedKeyCodesSet.add(0x01000000+0x1EE5);
105.669 + extendedKeyCodesSet.add(0x01000000+0x01A1);
105.670 + extendedKeyCodesSet.add(0x01000000+0x01B0);
105.671 + extendedKeyCodesSet.add(0x01000000+0x20AB);
105.672 + }
105.673 +}
106.1 --- a/src/share/classes/sun/awt/HeadlessToolkit.java Thu Apr 16 17:42:00 2009 +0100
106.2 +++ b/src/share/classes/sun/awt/HeadlessToolkit.java Thu Apr 16 19:10:32 2009 -0700
106.3 @@ -179,9 +179,9 @@
106.4 throw new HeadlessException();
106.5 }
106.6
106.7 - public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException {
106.8 - KeyboardFocusManagerPeerImpl peer = new KeyboardFocusManagerPeerImpl(manager);
106.9 - return peer;
106.10 + public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager)
106.11 + throws HeadlessException {
106.12 + throw new HeadlessException();
106.13 }
106.14
106.15 public TrayIconPeer createTrayIcon(TrayIcon target)
107.1 --- a/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java Thu Apr 16 17:42:00 2009 +0100
107.2 +++ b/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java Thu Apr 16 19:10:32 2009 -0700
107.3 @@ -1,5 +1,5 @@
107.4 /*
107.5 - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
107.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
107.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
107.8 *
107.9 * This code is free software; you can redistribute it and/or modify it
107.10 @@ -27,47 +27,150 @@
107.11 import java.awt.Component;
107.12 import java.awt.KeyboardFocusManager;
107.13 import java.awt.Window;
107.14 +import java.awt.Canvas;
107.15 +import java.awt.Scrollbar;
107.16 +import java.awt.Panel;
107.17 +
107.18 +import java.awt.event.FocusEvent;
107.19
107.20 import java.awt.peer.KeyboardFocusManagerPeer;
107.21 +import java.awt.peer.ComponentPeer;
107.22
107.23 import java.lang.reflect.InvocationTargetException;
107.24 import java.lang.reflect.Method;
107.25
107.26 +import java.util.logging.Level;
107.27 +import java.util.logging.Logger;
107.28
107.29 -public class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
107.30 - static native Window getNativeFocusedWindow();
107.31 - static native Component getNativeFocusOwner();
107.32 - static native void clearNativeGlobalFocusOwner(Window activeWindow);
107.33 +public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
107.34
107.35 - KeyboardFocusManagerPeerImpl(KeyboardFocusManager manager) {
107.36 + private static final Logger focusLog = Logger.getLogger("sun.awt.focus.KeyboardFocusManagerPeerImpl");
107.37 +
107.38 + private static AWTAccessor.KeyboardFocusManagerAccessor kfmAccessor =
107.39 + AWTAccessor.getKeyboardFocusManagerAccessor();
107.40 +
107.41 + // The constants are copied from java.awt.KeyboardFocusManager
107.42 + public static final int SNFH_FAILURE = 0;
107.43 + public static final int SNFH_SUCCESS_HANDLED = 1;
107.44 + public static final int SNFH_SUCCESS_PROCEED = 2;
107.45 +
107.46 + protected KeyboardFocusManager manager;
107.47 +
107.48 + public KeyboardFocusManagerPeerImpl(KeyboardFocusManager manager) {
107.49 + this.manager = manager;
107.50 }
107.51
107.52 - public Window getCurrentFocusedWindow() {
107.53 - return getNativeFocusedWindow();
107.54 + @Override
107.55 + public void clearGlobalFocusOwner(Window activeWindow) {
107.56 + if (activeWindow != null) {
107.57 + Component focusOwner = activeWindow.getFocusOwner();
107.58 + if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner);
107.59 + if (focusOwner != null) {
107.60 + FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null,
107.61 + CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER);
107.62 + SunToolkit.postPriorityEvent(fl);
107.63 + }
107.64 + }
107.65 }
107.66
107.67 - public void setCurrentFocusOwner(Component comp) {
107.68 + /*
107.69 + * WARNING: Don't call it on the Toolkit thread.
107.70 + *
107.71 + * Checks if the component:
107.72 + * 1) accepts focus on click (in general)
107.73 + * 2) may be a focus owner (in particular)
107.74 + */
107.75 + public static boolean shouldFocusOnClick(Component component) {
107.76 + boolean acceptFocusOnClick = false;
107.77 +
107.78 + // A component is generally allowed to accept focus on click
107.79 + // if its peer is focusable. There're some exceptions though.
107.80 +
107.81 +
107.82 + // CANVAS & SCROLLBAR accept focus on click
107.83 + if (component instanceof Canvas ||
107.84 + component instanceof Scrollbar)
107.85 + {
107.86 + acceptFocusOnClick = true;
107.87 +
107.88 + // PANEL, empty only, accepts focus on click
107.89 + } else if (component instanceof Panel) {
107.90 + acceptFocusOnClick = (((Panel)component).getComponentCount() == 0);
107.91 +
107.92 +
107.93 + // Other components
107.94 + } else {
107.95 + ComponentPeer peer = (component != null ? component.getPeer() : null);
107.96 + acceptFocusOnClick = (peer != null ? peer.isFocusable() : false);
107.97 + }
107.98 + return acceptFocusOnClick &&
107.99 + AWTAccessor.getComponentAccessor().canBeFocusOwner(component);
107.100 }
107.101
107.102 - public Component getCurrentFocusOwner() {
107.103 - return getNativeFocusOwner();
107.104 - }
107.105 - public void clearGlobalFocusOwner(Window activeWindow) {
107.106 - clearNativeGlobalFocusOwner(activeWindow);
107.107 + /*
107.108 + * Posts proper lost/gain focus events to the event queue.
107.109 + */
107.110 + public static boolean deliverFocus(Component lightweightChild,
107.111 + Component target,
107.112 + boolean temporary,
107.113 + boolean focusedWindowChangeAllowed,
107.114 + long time,
107.115 + CausedFocusEvent.Cause cause,
107.116 + Component currentFocusOwner) // provided by the descendant peers
107.117 + {
107.118 + if (lightweightChild == null) {
107.119 + lightweightChild = (Component)target;
107.120 + }
107.121 +
107.122 + Component currentOwner = currentFocusOwner;
107.123 + if (currentOwner != null && currentOwner.getPeer() == null) {
107.124 + currentOwner = null;
107.125 + }
107.126 + if (currentOwner != null) {
107.127 + FocusEvent fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST,
107.128 + false, lightweightChild, cause);
107.129 +
107.130 + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Posting focus event: " + fl);
107.131 + SunToolkit.postPriorityEvent(fl);
107.132 + }
107.133 +
107.134 + FocusEvent fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED,
107.135 + false, currentOwner, cause);
107.136 +
107.137 + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Posting focus event: " + fg);
107.138 + SunToolkit.postPriorityEvent(fg);
107.139 + return true;
107.140 }
107.141
107.142 - static Method m_removeLastFocusRequest = null;
107.143 + // WARNING: Don't call it on the Toolkit thread.
107.144 + public static boolean requestFocusFor(Component target, CausedFocusEvent.Cause cause) {
107.145 + return AWTAccessor.getComponentAccessor().requestFocus(target, cause);
107.146 + }
107.147 +
107.148 + // WARNING: Don't call it on the Toolkit thread.
107.149 + public static int shouldNativelyFocusHeavyweight(Component heavyweight,
107.150 + Component descendant,
107.151 + boolean temporary,
107.152 + boolean focusedWindowChangeAllowed,
107.153 + long time,
107.154 + CausedFocusEvent.Cause cause)
107.155 + {
107.156 + return kfmAccessor.shouldNativelyFocusHeavyweight(
107.157 + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause);
107.158 + }
107.159 +
107.160 public static void removeLastFocusRequest(Component heavyweight) {
107.161 - try {
107.162 - if (m_removeLastFocusRequest == null) {
107.163 - m_removeLastFocusRequest = SunToolkit.getMethod(KeyboardFocusManager.class, "removeLastFocusRequest",
107.164 - new Class[] {Component.class});
107.165 - }
107.166 - m_removeLastFocusRequest.invoke(null, new Object[]{heavyweight});
107.167 - } catch (InvocationTargetException ite) {
107.168 - ite.printStackTrace();
107.169 - } catch (IllegalAccessException ex) {
107.170 - ex.printStackTrace();
107.171 - }
107.172 + kfmAccessor.removeLastFocusRequest(heavyweight);
107.173 + }
107.174 +
107.175 + // WARNING: Don't call it on the Toolkit thread.
107.176 + public static boolean processSynchronousLightweightTransfer(Component heavyweight,
107.177 + Component descendant,
107.178 + boolean temporary,
107.179 + boolean focusedWindowChangeAllowed,
107.180 + long time)
107.181 + {
107.182 + return kfmAccessor.processSynchronousLightweightTransfer(
107.183 + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time);
107.184 }
107.185 }
108.1 --- a/src/share/classes/sun/awt/NullComponentPeer.java Thu Apr 16 17:42:00 2009 +0100
108.2 +++ b/src/share/classes/sun/awt/NullComponentPeer.java Thu Apr 16 19:10:32 2009 -0700
108.3 @@ -278,19 +278,6 @@
108.4 throw new UnsupportedOperationException();
108.5 }
108.6
108.7 - /**
108.8 - * @see java.awt.peer.ContainerPeer#restack
108.9 - */
108.10 - public void restack() {
108.11 - throw new UnsupportedOperationException();
108.12 - }
108.13 -
108.14 - /**
108.15 - * @see java.awt.peer.ContainerPeer#isRestackSupported
108.16 - */
108.17 - public boolean isRestackSupported() {
108.18 - return false;
108.19 - }
108.20 public void layout() {
108.21 }
108.22
108.23 @@ -305,4 +292,19 @@
108.24 */
108.25 public void applyShape(Region shape) {
108.26 }
108.27 +
108.28 + /**
108.29 + * Lowers this component at the bottom of the above HW peer. If the above parameter
108.30 + * is null then the method places this component at the top of the Z-order.
108.31 + */
108.32 + public void setZOrder(ComponentPeer above) {
108.33 + }
108.34 +
108.35 + public void updateGraphicsData(GraphicsConfiguration gc) {}
108.36 +
108.37 + public GraphicsConfiguration getAppropriateGraphicsConfiguration(
108.38 + GraphicsConfiguration gc)
108.39 + {
108.40 + return gc;
108.41 + }
108.42 }
109.1 --- a/src/share/classes/sun/awt/SunToolkit.java Thu Apr 16 17:42:00 2009 +0100
109.2 +++ b/src/share/classes/sun/awt/SunToolkit.java Thu Apr 16 19:10:32 2009 -0700
109.3 @@ -1,5 +1,5 @@
109.4 /*
109.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
109.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
109.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
109.8 *
109.9 * This code is free software; you can redistribute it and/or modify it
109.10 @@ -32,14 +32,10 @@
109.11 import java.awt.peer.*;
109.12 import java.awt.event.WindowEvent;
109.13 import java.awt.event.KeyEvent;
109.14 -import java.awt.im.spi.InputMethodDescriptor;
109.15 import java.awt.image.*;
109.16 -import java.awt.geom.AffineTransform;
109.17 import java.awt.TrayIcon;
109.18 import java.awt.SystemTray;
109.19 -import java.io.*;
109.20 import java.net.URL;
109.21 -import java.net.JarURLConnection;
109.22 import java.util.*;
109.23 import java.util.concurrent.TimeUnit;
109.24 import java.util.concurrent.locks.Condition;
109.25 @@ -49,7 +45,6 @@
109.26 import sun.misc.SoftCache;
109.27 import sun.font.FontDesignMetrics;
109.28 import sun.awt.im.InputContext;
109.29 -import sun.awt.im.SimpleInputMethodWindow;
109.30 import sun.awt.image.*;
109.31 import sun.security.action.GetPropertyAction;
109.32 import sun.security.action.GetBooleanAction;
109.33 @@ -225,10 +220,8 @@
109.34 public abstract RobotPeer createRobot(Robot target, GraphicsDevice screen)
109.35 throws AWTException;
109.36
109.37 - public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException {
109.38 - KeyboardFocusManagerPeerImpl peer = new KeyboardFocusManagerPeerImpl(manager);
109.39 - return peer;
109.40 - }
109.41 + public abstract KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager)
109.42 + throws HeadlessException;
109.43
109.44 /**
109.45 * The AWT lock is typically only used on Unix platforms to synchronize
109.46 @@ -824,16 +817,31 @@
109.47 }
109.48
109.49 /**
109.50 - * Disables erasing of background on the canvas before painting
109.51 - * if this is supported by the current toolkit.
109.52 - *
109.53 - * @throws IllegalStateException if the canvas is not displayable
109.54 - * @see java.awt.Component#isDisplayable
109.55 + * Disables erasing of background on the canvas before painting if
109.56 + * this is supported by the current toolkit. It is recommended to
109.57 + * call this method early, before the Canvas becomes displayable,
109.58 + * because some Toolkit implementations do not support changing
109.59 + * this property once the Canvas becomes displayable.
109.60 */
109.61 public void disableBackgroundErase(Canvas canvas) {
109.62 - if (!canvas.isDisplayable()) {
109.63 - throw new IllegalStateException("Canvas must have a valid peer");
109.64 - }
109.65 + disableBackgroundEraseImpl(canvas);
109.66 + }
109.67 +
109.68 + /**
109.69 + * Disables the native erasing of the background on the given
109.70 + * component before painting if this is supported by the current
109.71 + * toolkit. This only has an effect for certain components such as
109.72 + * Canvas, Panel and Window. It is recommended to call this method
109.73 + * early, before the Component becomes displayable, because some
109.74 + * Toolkit implementations do not support changing this property
109.75 + * once the Component becomes displayable.
109.76 + */
109.77 + public void disableBackgroundErase(Component component) {
109.78 + disableBackgroundEraseImpl(component);
109.79 + }
109.80 +
109.81 + private void disableBackgroundEraseImpl(Component component) {
109.82 + AWTAccessor.getComponentAccessor().setBackgroundEraseDisabled(component, true);
109.83 }
109.84
109.85 /**
109.86 @@ -1972,6 +1980,18 @@
109.87 AWTAutoShutdown.getInstance().dumpPeers(aLog);
109.88 }
109.89
109.90 + /**
109.91 + * Returns the <code>Window</code> ancestor of the component <code>comp</code>.
109.92 + * @return Window ancestor of the component or component by itself if it is Window;
109.93 + * null, if component is not a part of window hierarchy
109.94 + */
109.95 + public static Window getContainingWindow(Component comp) {
109.96 + while (comp != null && !(comp instanceof Window)) {
109.97 + comp = comp.getParent();
109.98 + }
109.99 + return (Window)comp;
109.100 + }
109.101 +
109.102 private static Boolean sunAwtDisableMixing = null;
109.103
109.104 /**
109.105 @@ -1995,6 +2015,73 @@
109.106 public boolean isNativeGTKAvailable() {
109.107 return false;
109.108 }
109.109 +
109.110 + // Cosntant alpha
109.111 + public boolean isWindowOpacitySupported() {
109.112 + return false;
109.113 + }
109.114 +
109.115 + // Shaping
109.116 + public boolean isWindowShapingSupported() {
109.117 + return false;
109.118 + }
109.119 +
109.120 + // Per-pixel alpha
109.121 + public boolean isWindowTranslucencySupported() {
109.122 + return false;
109.123 + }
109.124 +
109.125 + public boolean isTranslucencyCapable(GraphicsConfiguration gc) {
109.126 + return false;
109.127 + }
109.128 +
109.129 + /**
109.130 + * Returns whether or not a containing top level window for the passed
109.131 + * component is
109.132 + * {@link com.sun.awt.AWTUtilities.Translucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}.
109.133 + *
109.134 + * @param c a Component which toplevel's to check
109.135 + * @return {@code true} if the passed component is not null and has a
109.136 + * containing toplevel window which is opaque (so per-pixel translucency
109.137 + * is not enabled), {@code false} otherwise
109.138 + * @see com.sun.awt.AWTUtilities.Translucency#PERPIXEL_TRANSLUCENT
109.139 + * @see com.sun.awt.AWTUtilities#isWindowOpaque(Window)
109.140 + */
109.141 + public static boolean isContainingTopLevelOpaque(Component c) {
109.142 + Window w = getContainingWindow(c);
109.143 + // return w != null && (w).isOpaque();
109.144 + return w != null && com.sun.awt.AWTUtilities.isWindowOpaque(w);
109.145 + }
109.146 +
109.147 + /**
109.148 + * Returns whether or not a containing top level window for the passed
109.149 + * component is
109.150 + * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}.
109.151 + *
109.152 + * @param c a Component which toplevel's to check
109.153 + * @return {@code true} if the passed component is not null and has a
109.154 + * containing toplevel window which has opacity less than
109.155 + * 1.0f (which means that it is translucent), {@code false} otherwise
109.156 + * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT
109.157 + * @see com.sun.awt.AWTUtilities#getWindowOpacity(Window)
109.158 + */
109.159 + public static boolean isContainingTopLevelTranslucent(Component c) {
109.160 + Window w = getContainingWindow(c);
109.161 + // return w != null && (w).getOpacity() < 1.0f;
109.162 + return w != null && com.sun.awt.AWTUtilities.getWindowOpacity((Window)w) < 1.0f;
109.163 + }
109.164 +
109.165 + /**
109.166 + * Returns whether the native system requires using the peer.updateWindow()
109.167 + * method to update the contents of a non-opaque window, or if usual
109.168 + * painting procedures are sufficient. The default return value covers
109.169 + * the X11 systems. On MS Windows this method is overriden in WToolkit
109.170 + * to return true.
109.171 + */
109.172 + public boolean needUpdateWindow() {
109.173 + return false;
109.174 + }
109.175 +
109.176 } // class SunToolkit
109.177
109.178
110.1 --- a/src/share/classes/sun/awt/shell/ShellFolder.java Thu Apr 16 17:42:00 2009 +0100
110.2 +++ b/src/share/classes/sun/awt/shell/ShellFolder.java Thu Apr 16 19:10:32 2009 -0700
110.3 @@ -31,6 +31,7 @@
110.4 import java.io.*;
110.5 import java.io.FileNotFoundException;
110.6 import java.util.*;
110.7 +import java.util.concurrent.Callable;
110.8
110.9 /**
110.10 * @author Michael Martak
110.11 @@ -461,6 +462,35 @@
110.12 return null;
110.13 }
110.14
110.15 + private static Invoker invoker;
110.16 +
110.17 + /**
110.18 + * Provides the single access point to the {@link Invoker}. It is guaranteed that the value
110.19 + * returned by this method will be always the same.
110.20 + *
110.21 + * @return the singleton instance of {@link Invoker}
110.22 + */
110.23 + public static Invoker getInvoker() {
110.24 + if (invoker == null) {
110.25 + invoker = shellFolderManager.createInvoker();
110.26 + }
110.27 + return invoker;
110.28 + }
110.29 +
110.30 + /**
110.31 + * Interface allowing to invoke tasks in different environments on different platforms.
110.32 + */
110.33 + public static interface Invoker {
110.34 + /**
110.35 + * Invokes a callable task. If the {@code task} throws a checked exception,
110.36 + * it will be wrapped into a {@link RuntimeException}
110.37 + *
110.38 + * @param task a task to invoke
110.39 + * @return the result of {@code task}'s invokation
110.40 + */
110.41 + <T> T invoke(Callable<T> task);
110.42 + }
110.43 +
110.44 /**
110.45 * Provides a default comparator for the default column set
110.46 */
111.1 --- a/src/share/classes/sun/awt/shell/ShellFolderManager.java Thu Apr 16 17:42:00 2009 +0100
111.2 +++ b/src/share/classes/sun/awt/shell/ShellFolderManager.java Thu Apr 16 19:10:32 2009 -0700
111.3 @@ -27,6 +27,7 @@
111.4
111.5 import java.io.File;
111.6 import java.io.FileNotFoundException;
111.7 +import java.util.concurrent.Callable;
111.8
111.9 /**
111.10 * @author Michael Martak
111.11 @@ -96,9 +97,23 @@
111.12 }
111.13
111.14 public boolean isFileSystemRoot(File dir) {
111.15 - if (dir instanceof ShellFolder && !((ShellFolder)dir).isFileSystem()) {
111.16 + if (dir instanceof ShellFolder && !((ShellFolder) dir).isFileSystem()) {
111.17 return false;
111.18 }
111.19 return (dir.getParentFile() == null);
111.20 }
111.21 +
111.22 + protected ShellFolder.Invoker createInvoker() {
111.23 + return new DirectInvoker();
111.24 + }
111.25 +
111.26 + private static class DirectInvoker implements ShellFolder.Invoker {
111.27 + public <T> T invoke(Callable<T> task) {
111.28 + try {
111.29 + return task.call();
111.30 + } catch (Exception e) {
111.31 + throw new RuntimeException(e);
111.32 + }
111.33 + }
111.34 + }
111.35 }
112.1 --- a/src/share/classes/sun/beans/editors/ColorEditor.java Thu Apr 16 17:42:00 2009 +0100
112.2 +++ b/src/share/classes/sun/beans/editors/ColorEditor.java Thu Apr 16 19:10:32 2009 -0700
112.3 @@ -1,5 +1,5 @@
112.4 /*
112.5 - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
112.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
112.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
112.8 *
112.9 * This code is free software; you can redistribute it and/or modify it
112.10 @@ -29,6 +29,8 @@
112.11 import java.beans.*;
112.12
112.13 public class ColorEditor extends Panel implements PropertyEditor {
112.14 + private static final long serialVersionUID = 1781257185164716054L;
112.15 +
112.16 public ColorEditor() {
112.17 setLayout(null);
112.18
113.1 --- a/src/share/classes/sun/beans/editors/FontEditor.java Thu Apr 16 17:42:00 2009 +0100
113.2 +++ b/src/share/classes/sun/beans/editors/FontEditor.java Thu Apr 16 19:10:32 2009 -0700
113.3 @@ -1,5 +1,5 @@
113.4 /*
113.5 - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
113.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
113.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
113.8 *
113.9 * This code is free software; you can redistribute it and/or modify it
113.10 @@ -29,6 +29,7 @@
113.11 import java.beans.*;
113.12
113.13 public class FontEditor extends Panel implements java.beans.PropertyEditor {
113.14 + private static final long serialVersionUID = 6732704486002715933L;
113.15
113.16 public FontEditor() {
113.17 setLayout(null);
114.1 --- a/src/share/classes/sun/misc/Launcher.java Thu Apr 16 17:42:00 2009 +0100
114.2 +++ b/src/share/classes/sun/misc/Launcher.java Thu Apr 16 19:10:32 2009 -0700
114.3 @@ -1,5 +1,5 @@
114.4 /*
114.5 - * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved.
114.6 + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
114.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
114.8 *
114.9 * This code is free software; you can redistribute it and/or modify it
114.10 @@ -120,7 +120,10 @@
114.11 * The class loader used for loading installed extensions.
114.12 */
114.13 static class ExtClassLoader extends URLClassLoader {
114.14 - private File[] dirs;
114.15 +
114.16 + static {
114.17 + ClassLoader.registerAsParallelCapable();
114.18 + }
114.19
114.20 /**
114.21 * create an ExtClassLoader. The ExtClassLoader is created
114.22 @@ -146,12 +149,12 @@
114.23 }
114.24 });
114.25 } catch (java.security.PrivilegedActionException e) {
114.26 - throw (IOException) e.getException();
114.27 + throw (IOException) e.getException();
114.28 }
114.29 }
114.30
114.31 void addExtURL(URL url) {
114.32 - super.addURL(url);
114.33 + super.addURL(url);
114.34 }
114.35
114.36 /*
114.37 @@ -159,7 +162,6 @@
114.38 */
114.39 public ExtClassLoader(File[] dirs) throws IOException {
114.40 super(getExtURLs(dirs), null, factory);
114.41 - this.dirs = dirs;
114.42 }
114.43
114.44 private static File[] getExtDirs() {
114.45 @@ -206,20 +208,27 @@
114.46 */
114.47 public String findLibrary(String name) {
114.48 name = System.mapLibraryName(name);
114.49 - for (int i = 0; i < dirs.length; i++) {
114.50 - // Look in architecture-specific subdirectory first
114.51 - String arch = System.getProperty("os.arch");
114.52 - if (arch != null) {
114.53 - File file = new File(new File(dirs[i], arch), name);
114.54 + URL[] urls = super.getURLs();
114.55 + File prevDir = null;
114.56 + for (int i = 0; i < urls.length; i++) {
114.57 + // Get the ext directory from the URL
114.58 + File dir = new File(urls[i].getPath()).getParentFile();
114.59 + if (dir != null && !dir.equals(prevDir)) {
114.60 + // Look in architecture-specific subdirectory first
114.61 + String arch = System.getProperty("os.arch");
114.62 + if (arch != null) {
114.63 + File file = new File(new File(dir, arch), name);
114.64 + if (file.exists()) {
114.65 + return file.getAbsolutePath();
114.66 + }
114.67 + }
114.68 + // Then check the extension directory
114.69 + File file = new File(dir, name);
114.70 if (file.exists()) {
114.71 return file.getAbsolutePath();
114.72 }
114.73 }
114.74 - // Then check the extension directory
114.75 - File file = new File(dirs[i], name);
114.76 - if (file.exists()) {
114.77 - return file.getAbsolutePath();
114.78 - }
114.79 + prevDir = dir;
114.80 }
114.81 return null;
114.82 }
114.83 @@ -248,6 +257,10 @@
114.84 */
114.85 static class AppClassLoader extends URLClassLoader {
114.86
114.87 + static {
114.88 + ClassLoader.registerAsParallelCapable();
114.89 + }
114.90 +
114.91 public static ClassLoader getAppClassLoader(final ClassLoader extcl)
114.92 throws IOException
114.93 {
114.94 @@ -281,7 +294,7 @@
114.95 /**
114.96 * Override loadClass so we can checkPackageAccess.
114.97 */
114.98 - public synchronized Class loadClass(String name, boolean resolve)
114.99 + public Class loadClass(String name, boolean resolve)
114.100 throws ClassNotFoundException
114.101 {
114.102 int i = name.lastIndexOf('.');
115.1 --- a/src/share/classes/sun/net/spi/DefaultProxySelector.java Thu Apr 16 17:42:00 2009 +0100
115.2 +++ b/src/share/classes/sun/net/spi/DefaultProxySelector.java Thu Apr 16 19:10:32 2009 -0700
115.3 @@ -78,7 +78,6 @@
115.4 };
115.5
115.6 private static boolean hasSystemProxies = false;
115.7 - private static Properties defprops = new Properties();
115.8
115.9 static {
115.10 final String key = "java.net.useSystemProxies";
115.11 @@ -107,6 +106,9 @@
115.12 RegexpPool hostsPool;
115.13 String property;
115.14
115.15 + static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null);
115.16 + static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null);
115.17 +
115.18 NonProxyInfo(String p, String s, RegexpPool pool) {
115.19 property = p;
115.20 hostsSource = s;
115.21 @@ -114,8 +116,6 @@
115.22 }
115.23 }
115.24
115.25 - private static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null);
115.26 - private static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null);
115.27
115.28 /**
115.29 * select() method. Where all the hard work is done.
115.30 @@ -175,13 +175,13 @@
115.31 NonProxyInfo pinfo = null;
115.32
115.33 if ("http".equalsIgnoreCase(protocol)) {
115.34 - pinfo = httpNonProxyInfo;
115.35 + pinfo = NonProxyInfo.httpNonProxyInfo;
115.36 } else if ("https".equalsIgnoreCase(protocol)) {
115.37 // HTTPS uses the same property as HTTP, for backward
115.38 // compatibility
115.39 - pinfo = httpNonProxyInfo;
115.40 + pinfo = NonProxyInfo.httpNonProxyInfo;
115.41 } else if ("ftp".equalsIgnoreCase(protocol)) {
115.42 - pinfo = ftpNonProxyInfo;
115.43 + pinfo = NonProxyInfo.ftpNonProxyInfo;
115.44 }
115.45
115.46 /**
115.47 @@ -334,7 +334,6 @@
115.48 }
115.49 }
115.50
115.51 - private static final Pattern p6 = Pattern.compile("::1|(0:){7}1|(0:){1,6}:1");
115.52 private boolean isLoopback(String host) {
115.53 if (host == null || host.length() == 0)
115.54 return false;
115.55 @@ -364,6 +363,7 @@
115.56 }
115.57
115.58 if (host.endsWith(":1")) {
115.59 + final Pattern p6 = Pattern.compile("::1|(0:){7}1|(0:){1,6}:1");
115.60 return p6.matcher(host).matches();
115.61 }
115.62 return false;
116.1 --- a/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
116.2 +++ b/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
116.3 @@ -37,6 +37,7 @@
116.4 import java.util.Collections;
116.5 import java.util.concurrent.locks.ReadWriteLock;
116.6 import java.util.concurrent.locks.ReentrantReadWriteLock;
116.7 +import sun.net.NetHooks;
116.8
116.9 /**
116.10 * Base implementation of AsynchronousServerSocketChannel.
116.11 @@ -131,6 +132,7 @@
116.12 synchronized (stateLock) {
116.13 if (localAddress != null)
116.14 throw new AlreadyBoundException();
116.15 + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
116.16 Net.bind(fd, isa.getAddress(), isa.getPort());
116.17 Net.listen(fd, backlog < 1 ? 50 : backlog);
116.18 localAddress = Net.localAddress(fd);
117.1 --- a/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
117.2 +++ b/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
117.3 @@ -38,6 +38,7 @@
117.4 import java.util.Collections;
117.5 import java.util.concurrent.*;
117.6 import java.util.concurrent.locks.*;
117.7 +import sun.net.NetHooks;
117.8
117.9 /**
117.10 * Base implementation of AsynchronousSocketChannel
117.11 @@ -387,6 +388,7 @@
117.12 throw new AlreadyBoundException();
117.13 InetSocketAddress isa = (local == null) ?
117.14 new InetSocketAddress(0) : Net.checkAddress(local);
117.15 + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
117.16 Net.bind(fd, isa.getAddress(), isa.getPort());
117.17 localAddress = Net.localAddress(fd);
117.18 }
118.1 --- a/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
118.2 +++ b/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
118.3 @@ -313,11 +313,9 @@
118.4 throw new NullPointerException();
118.5 synchronized (readLock) {
118.6 ensureOpen();
118.7 - // If socket is not bound then behave as if nothing received
118.8 - // Will be fixed by 6621699
118.9 - if (localAddress() == null) {
118.10 - return null;
118.11 - }
118.12 + // Socket was not bound before attempting receive
118.13 + if (localAddress() == null)
118.14 + bind(null);
118.15 int n = 0;
118.16 ByteBuffer bb = null;
118.17 try {
119.1 --- a/src/share/classes/sun/nio/ch/FileChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
119.2 +++ b/src/share/classes/sun/nio/ch/FileChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
119.3 @@ -128,9 +128,10 @@
119.4 throw new NonReadableChannelException();
119.5 synchronized (positionLock) {
119.6 int n = 0;
119.7 - int ti = threads.add();
119.8 + int ti = -1;
119.9 try {
119.10 begin();
119.11 + ti = threads.add();
119.12 if (!isOpen())
119.13 return 0;
119.14 do {
119.15 @@ -151,9 +152,10 @@
119.16 throw new NonReadableChannelException();
119.17 synchronized (positionLock) {
119.18 long n = 0;
119.19 - int ti = threads.add();
119.20 + int ti = -1;
119.21 try {
119.22 begin();
119.23 + ti = threads.add();
119.24 if (!isOpen())
119.25 return 0;
119.26 do {
119.27 @@ -183,9 +185,10 @@
119.28 throw new NonWritableChannelException();
119.29 synchronized (positionLock) {
119.30 int n = 0;
119.31 - int ti = threads.add();
119.32 + int ti = -1;
119.33 try {
119.34 begin();
119.35 + ti = threads.add();
119.36 if (!isOpen())
119.37 return 0;
119.38 do {
119.39 @@ -206,9 +209,10 @@
119.40 throw new NonWritableChannelException();
119.41 synchronized (positionLock) {
119.42 long n = 0;
119.43 - int ti = threads.add();
119.44 + int ti = -1;
119.45 try {
119.46 begin();
119.47 + ti = threads.add();
119.48 if (!isOpen())
119.49 return 0;
119.50 do {
119.51 @@ -239,9 +243,10 @@
119.52 ensureOpen();
119.53 synchronized (positionLock) {
119.54 long p = -1;
119.55 - int ti = threads.add();
119.56 + int ti = -1;
119.57 try {
119.58 begin();
119.59 + ti = threads.add();
119.60 if (!isOpen())
119.61 return 0;
119.62 do {
119.63 @@ -262,9 +267,10 @@
119.64 throw new IllegalArgumentException();
119.65 synchronized (positionLock) {
119.66 long p = -1;
119.67 - int ti = threads.add();
119.68 + int ti = -1;
119.69 try {
119.70 begin();
119.71 + ti = threads.add();
119.72 if (!isOpen())
119.73 return null;
119.74 do {
119.75 @@ -283,9 +289,10 @@
119.76 ensureOpen();
119.77 synchronized (positionLock) {
119.78 long s = -1;
119.79 - int ti = threads.add();
119.80 + int ti = -1;
119.81 try {
119.82 begin();
119.83 + ti = threads.add();
119.84 if (!isOpen())
119.85 return -1;
119.86 do {
119.87 @@ -311,9 +318,10 @@
119.88 synchronized (positionLock) {
119.89 int rv = -1;
119.90 long p = -1;
119.91 - int ti = threads.add();
119.92 + int ti = -1;
119.93 try {
119.94 begin();
119.95 + ti = threads.add();
119.96 if (!isOpen())
119.97 return null;
119.98
119.99 @@ -350,9 +358,10 @@
119.100 public void force(boolean metaData) throws IOException {
119.101 ensureOpen();
119.102 int rv = -1;
119.103 - int ti = threads.add();
119.104 + int ti = -1;
119.105 try {
119.106 begin();
119.107 + ti = threads.add();
119.108 if (!isOpen())
119.109 return;
119.110 do {
119.111 @@ -406,9 +415,10 @@
119.112 return IOStatus.UNSUPPORTED;
119.113
119.114 long n = -1;
119.115 - int ti = threads.add();
119.116 + int ti = -1;
119.117 try {
119.118 begin();
119.119 + ti = threads.add();
119.120 if (!isOpen())
119.121 return -1;
119.122 do {
119.123 @@ -612,9 +622,10 @@
119.124 throw new NonReadableChannelException();
119.125 ensureOpen();
119.126 int n = 0;
119.127 - int ti = threads.add();
119.128 + int ti = -1;
119.129 try {
119.130 begin();
119.131 + ti = threads.add();
119.132 if (!isOpen())
119.133 return -1;
119.134 do {
119.135 @@ -637,9 +648,10 @@
119.136 throw new NonWritableChannelException();
119.137 ensureOpen();
119.138 int n = 0;
119.139 - int ti = threads.add();
119.140 + int ti = -1;
119.141 try {
119.142 begin();
119.143 + ti = threads.add();
119.144 if (!isOpen())
119.145 return -1;
119.146 do {
119.147 @@ -731,9 +743,10 @@
119.148 throw new NonReadableChannelException();
119.149
119.150 long addr = -1;
119.151 - int ti = threads.add();
119.152 + int ti = -1;
119.153 try {
119.154 begin();
119.155 + ti = threads.add();
119.156 if (!isOpen())
119.157 return null;
119.158 if (size() < position + size) { // Extend file size
119.159 @@ -900,9 +913,10 @@
119.160 FileLockTable flt = fileLockTable();
119.161 flt.add(fli);
119.162 boolean i = true;
119.163 - int ti = threads.add();
119.164 + int ti = -1;
119.165 try {
119.166 begin();
119.167 + ti = threads.add();
119.168 if (!isOpen())
119.169 return null;
119.170 int result = nd.lock(fd, true, position, size, shared);
120.1 --- a/src/share/classes/sun/nio/ch/SelChImpl.java Thu Apr 16 17:42:00 2009 +0100
120.2 +++ b/src/share/classes/sun/nio/ch/SelChImpl.java Thu Apr 16 19:10:32 2009 -0700
120.3 @@ -25,6 +25,7 @@
120.4
120.5 package sun.nio.ch;
120.6
120.7 +import java.nio.channels.Channel;
120.8 import java.io.FileDescriptor;
120.9 import java.io.IOException;
120.10
120.11 @@ -35,7 +36,7 @@
120.12 * @since 1.4
120.13 */
120.14
120.15 -interface SelChImpl {
120.16 +interface SelChImpl extends Channel {
120.17
120.18 FileDescriptor getFD();
120.19
121.1 --- a/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
121.2 +++ b/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
121.3 @@ -31,6 +31,7 @@
121.4 import java.nio.channels.*;
121.5 import java.nio.channels.spi.*;
121.6 import java.util.*;
121.7 +import sun.net.NetHooks;
121.8
121.9
121.10 /**
121.11 @@ -191,6 +192,7 @@
121.12 SecurityManager sm = System.getSecurityManager();
121.13 if (sm != null)
121.14 sm.checkListen(isa.getPort());
121.15 + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
121.16 Net.bind(fd, isa.getAddress(), isa.getPort());
121.17 Net.listen(fd, backlog < 1 ? 50 : backlog);
121.18 synchronized (stateLock) {
122.1 --- a/src/share/classes/sun/nio/ch/SocketChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
122.2 +++ b/src/share/classes/sun/nio/ch/SocketChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
122.3 @@ -32,6 +32,7 @@
122.4 import java.nio.channels.*;
122.5 import java.nio.channels.spi.*;
122.6 import java.util.*;
122.7 +import sun.net.NetHooks;
122.8
122.9
122.10 /**
122.11 @@ -526,6 +527,7 @@
122.12 throw new AlreadyBoundException();
122.13 InetSocketAddress isa = (local == null) ?
122.14 new InetSocketAddress(0) : Net.checkAddress(local);
122.15 + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
122.16 Net.bind(fd, isa.getAddress(), isa.getPort());
122.17 localAddress = Net.localAddress(fd);
122.18 }
122.19 @@ -577,6 +579,12 @@
122.20 if (!isOpen()) {
122.21 return false;
122.22 }
122.23 + // notify hook only if unbound
122.24 + if (localAddress == null) {
122.25 + NetHooks.beforeTcpConnect(fd,
122.26 + isa.getAddress(),
122.27 + isa.getPort());
122.28 + }
122.29 readerThread = NativeThread.current();
122.30 }
122.31 for (;;) {
123.1 --- a/src/share/classes/sun/security/jca/ProviderConfig.java Thu Apr 16 17:42:00 2009 +0100
123.2 +++ b/src/share/classes/sun/security/jca/ProviderConfig.java Thu Apr 16 19:10:32 2009 -0700
123.3 @@ -1,5 +1,5 @@
123.4 /*
123.5 - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
123.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
123.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
123.8 *
123.9 * This code is free software; you can redistribute it and/or modify it
123.10 @@ -60,37 +60,6 @@
123.11 // use by doLoadProvider()
123.12 private final static Class[] CL_STRING = { String.class };
123.13
123.14 - // lock to use while loading a provider. it ensures that each provider
123.15 - // is loaded only once and that we can detect recursion.
123.16 - // NOTE that because of 4944382 we use the system classloader as lock.
123.17 - // By using the same lock to load classes as to load providers we avoid
123.18 - // deadlock due to lock ordering. However, this class may be initialized
123.19 - // early in the startup when the system classloader has not yet been set
123.20 - // up. Use a temporary lock object if that is the case.
123.21 - // Any of this may break if the class loading implementation is changed.
123.22 - private static volatile Object LOCK = new Object();
123.23 -
123.24 - private static Object getLock() {
123.25 - Object o = LOCK;
123.26 - // check if lock is already set to the class loader
123.27 - if (o instanceof ClassLoader) {
123.28 - return o;
123.29 - }
123.30 - Object cl = AccessController.doPrivileged(
123.31 - new PrivilegedAction<Object>() {
123.32 - public Object run() {
123.33 - return ClassLoader.getSystemClassLoader();
123.34 - }
123.35 - });
123.36 - // check if class loader initialized now (non-null)
123.37 - if (cl != null) {
123.38 - LOCK = cl;
123.39 - o = cl;
123.40 - }
123.41 - return o;
123.42 - }
123.43 -
123.44 -
123.45 // name of the provider class
123.46 private final String className;
123.47
123.48 @@ -194,7 +163,7 @@
123.49 /**
123.50 * Get the provider object. Loads the provider if it is not already loaded.
123.51 */
123.52 - Provider getProvider() {
123.53 + synchronized Provider getProvider() {
123.54 // volatile variable load
123.55 Provider p = provider;
123.56 if (p != null) {
123.57 @@ -203,30 +172,23 @@
123.58 if (shouldLoad() == false) {
123.59 return null;
123.60 }
123.61 - synchronized (getLock()) {
123.62 - p = provider;
123.63 - if (p != null) {
123.64 - // loaded by another thread while we were blocked on lock
123.65 - return p;
123.66 + if (isLoading) {
123.67 + // because this method is synchronized, this can only
123.68 + // happen if there is recursion.
123.69 + if (debug != null) {
123.70 + debug.println("Recursion loading provider: " + this);
123.71 + new Exception("Call trace").printStackTrace();
123.72 }
123.73 - if (isLoading) {
123.74 - // because this method is synchronized, this can only
123.75 - // happen if there is recursion.
123.76 - if (debug != null) {
123.77 - debug.println("Recursion loading provider: " + this);
123.78 - new Exception("Call trace").printStackTrace();
123.79 - }
123.80 - return null;
123.81 - }
123.82 - try {
123.83 - isLoading = true;
123.84 - tries++;
123.85 - p = doLoadProvider();
123.86 - } finally {
123.87 - isLoading = false;
123.88 - }
123.89 - provider = p;
123.90 + return null;
123.91 }
123.92 + try {
123.93 + isLoading = true;
123.94 + tries++;
123.95 + p = doLoadProvider();
123.96 + } finally {
123.97 + isLoading = false;
123.98 + }
123.99 + provider = p;
123.100 return p;
123.101 }
123.102
124.1 --- a/src/share/classes/sun/security/tools/JarSigner.java Thu Apr 16 17:42:00 2009 +0100
124.2 +++ b/src/share/classes/sun/security/tools/JarSigner.java Thu Apr 16 19:10:32 2009 -0700
124.3 @@ -1,5 +1,5 @@
124.4 /*
124.5 - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
124.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
124.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
124.8 *
124.9 * This code is free software; you can redistribute it and/or modify it
124.10 @@ -32,28 +32,44 @@
124.11 import java.math.BigInteger;
124.12 import java.net.URI;
124.13 import java.net.URISyntaxException;
124.14 -import java.net.URL;
124.15 -import java.net.URLClassLoader;
124.16 -import java.net.SocketTimeoutException;
124.17 import java.text.Collator;
124.18 import java.text.MessageFormat;
124.19 import java.security.cert.Certificate;
124.20 import java.security.cert.X509Certificate;
124.21 import java.security.cert.CertificateException;
124.22 -import java.security.cert.CertificateExpiredException;
124.23 -import java.security.cert.CertificateNotYetValidException;
124.24 import java.security.*;
124.25 import java.lang.reflect.Constructor;
124.26
124.27 import com.sun.jarsigner.ContentSigner;
124.28 import com.sun.jarsigner.ContentSignerParameters;
124.29 +import java.net.SocketTimeoutException;
124.30 +import java.net.URL;
124.31 +import java.net.URLClassLoader;
124.32 +import java.security.cert.CertPath;
124.33 +import java.security.cert.CertPathValidator;
124.34 +import java.security.cert.CertificateExpiredException;
124.35 +import java.security.cert.CertificateFactory;
124.36 +import java.security.cert.CertificateNotYetValidException;
124.37 +import java.security.cert.PKIXParameters;
124.38 +import java.security.cert.TrustAnchor;
124.39 +import java.util.Map.Entry;
124.40 import sun.security.x509.*;
124.41 import sun.security.util.*;
124.42 import sun.misc.BASE64Encoder;
124.43
124.44 +
124.45 /**
124.46 * <p>The jarsigner utility.
124.47 *
124.48 + * The exit codes for the main method are:
124.49 + *
124.50 + * 0: success
124.51 + * 1: any error that the jar cannot be signed or verified, including:
124.52 + * keystore loading error
124.53 + * TSP communciation error
124.54 + * jarsigner command line error...
124.55 + * otherwise: error codes from -strict
124.56 + *
124.57 * @author Roland Schemers
124.58 * @author Jan Luehe
124.59 */
124.60 @@ -84,8 +100,6 @@
124.61
124.62 // Attention:
124.63 // This is the entry that get launched by the security tool jarsigner.
124.64 - // It's marked as exported private per AppServer Team's request.
124.65 - // See http://ccc.sfbay/6428446
124.66 public static void main(String args[]) throws Exception {
124.67 JarSigner js = new JarSigner();
124.68 js.run(args);
124.69 @@ -93,31 +107,32 @@
124.70
124.71 static final String VERSION = "1.0";
124.72
124.73 - static final int IN_KEYSTORE = 0x01;
124.74 + static final int IN_KEYSTORE = 0x01; // signer is in keystore
124.75 static final int IN_SCOPE = 0x02;
124.76 + static final int NOT_ALIAS = 0x04; // alias list is NOT empty and
124.77 + // signer is not in alias list
124.78 + static final int SIGNED_BY_ALIAS = 0x08; // signer is in alias list
124.79
124.80 - // signer's certificate chain (when composing)
124.81 - X509Certificate[] certChain;
124.82 -
124.83 - /*
124.84 - * private key
124.85 - */
124.86 - PrivateKey privateKey;
124.87 - KeyStore store;
124.88 + X509Certificate[] certChain; // signer's cert chain (when composing)
124.89 + PrivateKey privateKey; // private key
124.90 + KeyStore store; // the keystore specified by -keystore
124.91 + // or the default keystore, never null
124.92
124.93 IdentityScope scope;
124.94
124.95 String keystore; // key store file
124.96 boolean nullStream = false; // null keystore input stream (NONE)
124.97 boolean token = false; // token-based keystore
124.98 - String jarfile; // jar file to sign
124.99 + String jarfile; // jar file to sign or verify
124.100 String alias; // alias to sign jar with
124.101 + List<String> ckaliases = new ArrayList<String>(); // aliases in -verify
124.102 char[] storepass; // keystore password
124.103 boolean protectedPath; // protected authentication path
124.104 String storetype; // keystore type
124.105 String providerName; // provider name
124.106 Vector<String> providers = null; // list of providers
124.107 - HashMap<String,String> providerArgs = new HashMap<String, String>(); // arguments for provider constructors
124.108 + // arguments for provider constructors
124.109 + HashMap<String,String> providerArgs = new HashMap<String, String>();
124.110 char[] keypass; // private key password
124.111 String sigfile; // name of .SF file
124.112 String sigalg; // name of signature algorithm
124.113 @@ -125,12 +140,14 @@
124.114 String signedjar; // output filename
124.115 String tsaUrl; // location of the Timestamping Authority
124.116 String tsaAlias; // alias for the Timestamping Authority's certificate
124.117 + String altCertChain; // file to read alternative cert chain from
124.118 boolean verify = false; // verify the jar
124.119 - boolean verbose = false; // verbose output when signing/verifying
124.120 + String verbose = null; // verbose output when signing/verifying
124.121 boolean showcerts = false; // show certs when verifying
124.122 boolean debug = false; // debug
124.123 boolean signManifest = true; // "sign" the whole manifest
124.124 boolean externalSF = true; // leave the .SF out of the PKCS7 block
124.125 + boolean strict = false; // treat warnings as error
124.126
124.127 // read zip entry raw bytes
124.128 private ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
124.129 @@ -139,14 +156,22 @@
124.130 private String altSignerClass = null;
124.131 private String altSignerClasspath = null;
124.132 private ZipFile zipFile = null;
124.133 +
124.134 private boolean hasExpiredCert = false;
124.135 private boolean hasExpiringCert = false;
124.136 private boolean notYetValidCert = false;
124.137 -
124.138 + private boolean chainNotValidated = false;
124.139 + private boolean notSignedByAlias = false;
124.140 + private boolean aliasNotInStore = false;
124.141 + private boolean hasUnsignedEntry = false;
124.142 private boolean badKeyUsage = false;
124.143 private boolean badExtendedKeyUsage = false;
124.144 private boolean badNetscapeCertType = false;
124.145
124.146 + CertificateFactory certificateFactory;
124.147 + CertPathValidator validator;
124.148 + PKIXParameters pkixParameters;
124.149 +
124.150 public void run(String args[]) {
124.151 try {
124.152 parseArgs(args);
124.153 @@ -184,14 +209,6 @@
124.154 }
124.155 }
124.156
124.157 - hasExpiredCert = false;
124.158 - hasExpiringCert = false;
124.159 - notYetValidCert = false;
124.160 -
124.161 - badKeyUsage = false;
124.162 - badExtendedKeyUsage = false;
124.163 - badNetscapeCertType = false;
124.164 -
124.165 if (verify) {
124.166 try {
124.167 loadKeyStore(keystore, false);
124.168 @@ -238,6 +255,29 @@
124.169 storepass = null;
124.170 }
124.171 }
124.172 +
124.173 + if (strict) {
124.174 + int exitCode = 0;
124.175 + if (hasExpiringCert) {
124.176 + exitCode |= 2;
124.177 + }
124.178 + if (chainNotValidated) {
124.179 + // hasExpiredCert and notYetValidCert included in this case
124.180 + exitCode |= 4;
124.181 + }
124.182 + if (badKeyUsage || badExtendedKeyUsage || badNetscapeCertType) {
124.183 + exitCode |= 8;
124.184 + }
124.185 + if (hasUnsignedEntry) {
124.186 + exitCode |= 16;
124.187 + }
124.188 + if (notSignedByAlias || aliasNotInStore) {
124.189 + exitCode |= 32;
124.190 + }
124.191 + if (exitCode != 0) {
124.192 + System.exit(exitCode);
124.193 + }
124.194 + }
124.195 }
124.196
124.197 /*
124.198 @@ -247,25 +287,26 @@
124.199 /* parse flags */
124.200 int n = 0;
124.201
124.202 - for (n=0; (n < args.length) && args[n].startsWith("-"); n++) {
124.203 + if (args.length == 0) fullusage();
124.204 + for (n=0; n < args.length; n++) {
124.205
124.206 String flags = args[n];
124.207
124.208 if (collator.compare(flags, "-keystore") == 0) {
124.209 - if (++n == args.length) usage();
124.210 + if (++n == args.length) usageNoArg();
124.211 keystore = args[n];
124.212 } else if (collator.compare(flags, "-storepass") ==0) {
124.213 - if (++n == args.length) usage();
124.214 + if (++n == args.length) usageNoArg();
124.215 storepass = args[n].toCharArray();
124.216 } else if (collator.compare(flags, "-storetype") ==0) {
124.217 - if (++n == args.length) usage();
124.218 + if (++n == args.length) usageNoArg();
124.219 storetype = args[n];
124.220 } else if (collator.compare(flags, "-providerName") ==0) {
124.221 - if (++n == args.length) usage();
124.222 + if (++n == args.length) usageNoArg();
124.223 providerName = args[n];
124.224 } else if ((collator.compare(flags, "-provider") == 0) ||
124.225 (collator.compare(flags, "-providerClass") == 0)) {
124.226 - if (++n == args.length) usage();
124.227 + if (++n == args.length) usageNoArg();
124.228 if (providers == null) {
124.229 providers = new Vector<String>(3);
124.230 }
124.231 @@ -274,35 +315,38 @@
124.232 if (args.length > (n+1)) {
124.233 flags = args[n+1];
124.234 if (collator.compare(flags, "-providerArg") == 0) {
124.235 - if (args.length == (n+2)) usage();
124.236 + if (args.length == (n+2)) usageNoArg();
124.237 providerArgs.put(args[n], args[n+2]);
124.238 n += 2;
124.239 }
124.240 }
124.241 } else if (collator.compare(flags, "-protected") ==0) {
124.242 protectedPath = true;
124.243 + } else if (collator.compare(flags, "-certchain") ==0) {
124.244 + if (++n == args.length) usageNoArg();
124.245 + altCertChain = args[n];
124.246 } else if (collator.compare(flags, "-debug") ==0) {
124.247 debug = true;
124.248 } else if (collator.compare(flags, "-keypass") ==0) {
124.249 - if (++n == args.length) usage();
124.250 + if (++n == args.length) usageNoArg();
124.251 keypass = args[n].toCharArray();
124.252 } else if (collator.compare(flags, "-sigfile") ==0) {
124.253 - if (++n == args.length) usage();
124.254 + if (++n == args.length) usageNoArg();
124.255 sigfile = args[n];
124.256 } else if (collator.compare(flags, "-signedjar") ==0) {
124.257 - if (++n == args.length) usage();
124.258 + if (++n == args.length) usageNoArg();
124.259 signedjar = args[n];
124.260 } else if (collator.compare(flags, "-tsa") ==0) {
124.261 - if (++n == args.length) usage();
124.262 + if (++n == args.length) usageNoArg();
124.263 tsaUrl = args[n];
124.264 } else if (collator.compare(flags, "-tsacert") ==0) {
124.265 - if (++n == args.length) usage();
124.266 + if (++n == args.length) usageNoArg();
124.267 tsaAlias = args[n];
124.268 } else if (collator.compare(flags, "-altsigner") ==0) {
124.269 - if (++n == args.length) usage();
124.270 + if (++n == args.length) usageNoArg();
124.271 altSignerClass = args[n];
124.272 } else if (collator.compare(flags, "-altsignerpath") ==0) {
124.273 - if (++n == args.length) usage();
124.274 + if (++n == args.length) usageNoArg();
124.275 altSignerClasspath = args[n];
124.276 } else if (collator.compare(flags, "-sectionsonly") ==0) {
124.277 signManifest = false;
124.278 @@ -311,30 +355,56 @@
124.279 } else if (collator.compare(flags, "-verify") ==0) {
124.280 verify = true;
124.281 } else if (collator.compare(flags, "-verbose") ==0) {
124.282 - verbose = true;
124.283 + verbose = "all";
124.284 + } else if (collator.compare(flags, "-verbose:all") ==0) {
124.285 + verbose = "all";
124.286 + } else if (collator.compare(flags, "-verbose:summary") ==0) {
124.287 + verbose = "summary";
124.288 + } else if (collator.compare(flags, "-verbose:grouped") ==0) {
124.289 + verbose = "grouped";
124.290 } else if (collator.compare(flags, "-sigalg") ==0) {
124.291 - if (++n == args.length) usage();
124.292 + if (++n == args.length) usageNoArg();
124.293 sigalg = args[n];
124.294 } else if (collator.compare(flags, "-digestalg") ==0) {
124.295 - if (++n == args.length) usage();
124.296 + if (++n == args.length) usageNoArg();
124.297 digestalg = args[n];
124.298 } else if (collator.compare(flags, "-certs") ==0) {
124.299 showcerts = true;
124.300 + } else if (collator.compare(flags, "-strict") ==0) {
124.301 + strict = true;
124.302 } else if (collator.compare(flags, "-h") == 0 ||
124.303 collator.compare(flags, "-help") == 0) {
124.304 - usage();
124.305 + fullusage();
124.306 } else {
124.307 - System.err.println(rb.getString("Illegal option: ") + flags);
124.308 - usage();
124.309 + if (!flags.startsWith("-")) {
124.310 + if (jarfile == null) {
124.311 + jarfile = flags;
124.312 + } else {
124.313 + alias = flags;
124.314 + ckaliases.add(alias);
124.315 + }
124.316 + } else {
124.317 + System.err.println(
124.318 + rb.getString("Illegal option: ") + flags);
124.319 + usage();
124.320 + }
124.321 }
124.322 }
124.323
124.324 - if (n == args.length) usage();
124.325 - jarfile = args[n++];
124.326 + // -certs must always be specified with -verbose
124.327 + if (verbose == null) showcerts = false;
124.328
124.329 - if (!verify) {
124.330 - if (n == args.length) usage();
124.331 - alias = args[n++];
124.332 + if (jarfile == null) {
124.333 + System.err.println(rb.getString("Please specify jarfile name"));
124.334 + usage();
124.335 + }
124.336 + if (!verify && alias == null) {
124.337 + System.err.println(rb.getString("Please specify alias name"));
124.338 + usage();
124.339 + }
124.340 + if (!verify && ckaliases.size() > 1) {
124.341 + System.err.println(rb.getString("Only one alias can be specified"));
124.342 + usage();
124.343 }
124.344
124.345 if (storetype == null) {
124.346 @@ -357,7 +427,6 @@
124.347 if (token && !nullStream) {
124.348 System.err.println(MessageFormat.format(rb.getString
124.349 ("-keystore must be NONE if -storetype is {0}"), storetype));
124.350 - System.err.println();
124.351 usage();
124.352 }
124.353
124.354 @@ -365,7 +434,6 @@
124.355 System.err.println(MessageFormat.format(rb.getString
124.356 ("-keypass can not be specified " +
124.357 "if -storetype is {0}"), storetype));
124.358 - System.err.println();
124.359 usage();
124.360 }
124.361
124.362 @@ -374,7 +442,6 @@
124.363 System.err.println(rb.getString
124.364 ("If -protected is specified, " +
124.365 "then -storepass and -keypass must not be specified"));
124.366 - System.err.println();
124.367 usage();
124.368 }
124.369 }
124.370 @@ -383,17 +450,27 @@
124.371 System.err.println(rb.getString
124.372 ("If keystore is not password protected, " +
124.373 "then -storepass and -keypass must not be specified"));
124.374 - System.err.println();
124.375 usage();
124.376 }
124.377 }
124.378 }
124.379
124.380 + void usageNoArg() {
124.381 + System.out.println(rb.getString("Option lacks argument"));
124.382 + usage();
124.383 + }
124.384 +
124.385 void usage() {
124.386 + System.out.println();
124.387 + System.out.println(rb.getString("Please type jarsigner -help for usage"));
124.388 + System.exit(1);
124.389 + }
124.390 +
124.391 + void fullusage() {
124.392 System.out.println(rb.getString
124.393 ("Usage: jarsigner [options] jar-file alias"));
124.394 System.out.println(rb.getString
124.395 - (" jarsigner -verify [options] jar-file"));
124.396 + (" jarsigner -verify [options] jar-file [alias...]"));
124.397 System.out.println();
124.398 System.out.println(rb.getString
124.399 ("[-keystore <url>] keystore location"));
124.400 @@ -408,6 +485,9 @@
124.401 ("[-keypass <password>] password for private key (if different)"));
124.402 System.out.println();
124.403 System.out.println(rb.getString
124.404 + ("[-certchain <file>] name of alternative certchain file"));
124.405 + System.out.println();
124.406 + System.out.println(rb.getString
124.407 ("[-sigfile <file>] name of .SF/.DSA file"));
124.408 System.out.println();
124.409 System.out.println(rb.getString
124.410 @@ -423,7 +503,9 @@
124.411 ("[-verify] verify a signed JAR file"));
124.412 System.out.println();
124.413 System.out.println(rb.getString
124.414 - ("[-verbose] verbose output when signing/verifying"));
124.415 + ("[-verbose[:suboptions]] verbose output when signing/verifying."));
124.416 + System.out.println(rb.getString
124.417 + (" suboptions can be all, grouped or summary"));
124.418 System.out.println();
124.419 System.out.println(rb.getString
124.420 ("[-certs] display certificates when verbose and verifying"));
124.421 @@ -457,15 +539,17 @@
124.422 System.out.println(rb.getString
124.423 (" [-providerArg <arg>]] ... master class file and constructor argument"));
124.424 System.out.println();
124.425 + System.out.println(rb.getString
124.426 + ("[-strict] treat warnings as errors"));
124.427 + System.out.println();
124.428
124.429 - System.exit(1);
124.430 + System.exit(0);
124.431 }
124.432
124.433 void verifyJar(String jarName)
124.434 throws Exception
124.435 {
124.436 - boolean anySigned = false;
124.437 - boolean hasUnsignedEntry = false;
124.438 + boolean anySigned = false; // if there exists entry inside jar signed
124.439 JarFile jf = null;
124.440
124.441 try {
124.442 @@ -494,11 +578,18 @@
124.443
124.444 Manifest man = jf.getManifest();
124.445
124.446 + // The map to record display info, only used when -verbose provided
124.447 + // key: signer info string
124.448 + // value: the list of files with common key
124.449 + Map<String,List<String>> output =
124.450 + new LinkedHashMap<String,List<String>>();
124.451 +
124.452 if (man != null) {
124.453 - if (verbose) System.out.println();
124.454 + if (verbose != null) System.out.println();
124.455 Enumeration<JarEntry> e = entriesVec.elements();
124.456
124.457 long now = System.currentTimeMillis();
124.458 + String tab = rb.getString(" ");
124.459
124.460 while (e.hasMoreElements()) {
124.461 JarEntry je = e.nextElement();
124.462 @@ -509,77 +600,118 @@
124.463 hasUnsignedEntry |= !je.isDirectory() && !isSigned
124.464 && !signatureRelated(name);
124.465
124.466 - if (verbose) {
124.467 - int inStoreOrScope = inKeyStore(signers);
124.468 - boolean inStore = (inStoreOrScope & IN_KEYSTORE) != 0;
124.469 - boolean inScope = (inStoreOrScope & IN_SCOPE) != 0;
124.470 + int inStoreOrScope = inKeyStore(signers);
124.471 +
124.472 + boolean inStore = (inStoreOrScope & IN_KEYSTORE) != 0;
124.473 + boolean inScope = (inStoreOrScope & IN_SCOPE) != 0;
124.474 +
124.475 + notSignedByAlias |= (inStoreOrScope & NOT_ALIAS) != 0;
124.476 + aliasNotInStore |= isSigned && (!inStore && !inScope);
124.477 +
124.478 + // Only used when -verbose provided
124.479 + StringBuffer sb = null;
124.480 + if (verbose != null) {
124.481 + sb = new StringBuffer();
124.482 boolean inManifest =
124.483 ((man.getAttributes(name) != null) ||
124.484 (man.getAttributes("./"+name) != null) ||
124.485 (man.getAttributes("/"+name) != null));
124.486 - System.out.print(
124.487 + sb.append(
124.488 (isSigned ? rb.getString("s") : rb.getString(" ")) +
124.489 (inManifest ? rb.getString("m") : rb.getString(" ")) +
124.490 (inStore ? rb.getString("k") : rb.getString(" ")) +
124.491 (inScope ? rb.getString("i") : rb.getString(" ")) +
124.492 - rb.getString(" "));
124.493 - StringBuffer sb = new StringBuffer();
124.494 - String s = Long.toString(je.getSize());
124.495 - for (int i = 6 - s.length(); i > 0; --i) {
124.496 - sb.append(' ');
124.497 + ((inStoreOrScope & NOT_ALIAS) != 0 ?"X":" ") +
124.498 + rb.getString(" "));
124.499 + sb.append("|");
124.500 + }
124.501 +
124.502 + // When -certs provided, display info has extra empty
124.503 + // lines at the beginning and end.
124.504 + if (isSigned) {
124.505 + if (showcerts) sb.append('\n');
124.506 + for (CodeSigner signer: signers) {
124.507 + // signerInfo() must be called even if -verbose
124.508 + // not provided. The method updates various
124.509 + // warning flags.
124.510 + String si = signerInfo(signer, tab, now);
124.511 + if (showcerts) {
124.512 + sb.append(si);
124.513 + sb.append('\n');
124.514 + }
124.515 }
124.516 - sb.append(s).append(' ').
124.517 - append(new Date(je.getTime()).toString());
124.518 - sb.append(' ').append(je.getName());
124.519 - System.out.println(sb.toString());
124.520 -
124.521 - if (signers != null && showcerts) {
124.522 - String tab = rb.getString(" ");
124.523 - for (int i = 0; i < signers.length; i++) {
124.524 - System.out.println();
124.525 - List<? extends Certificate> certs =
124.526 - signers[i].getSignerCertPath()
124.527 - .getCertificates();
124.528 - // display the signature timestamp, if present
124.529 - Timestamp timestamp = signers[i].getTimestamp();
124.530 - if (timestamp != null) {
124.531 - System.out.println(
124.532 - printTimestamp(tab, timestamp));
124.533 - }
124.534 - // display the certificate(s)
124.535 - for (Certificate c : certs) {
124.536 - System.out.println(
124.537 - printCert(tab, c, true, now));
124.538 - }
124.539 - }
124.540 - System.out.println();
124.541 - }
124.542 -
124.543 - }
124.544 - if (isSigned) {
124.545 - for (int i = 0; i < signers.length; i++) {
124.546 - Certificate cert =
124.547 - signers[i].getSignerCertPath()
124.548 - .getCertificates().get(0);
124.549 - if (cert instanceof X509Certificate) {
124.550 - checkCertUsage((X509Certificate)cert, null);
124.551 - if (!showcerts) {
124.552 - long notAfter = ((X509Certificate)cert)
124.553 - .getNotAfter().getTime();
124.554 -
124.555 - if (notAfter < now) {
124.556 - hasExpiredCert = true;
124.557 - } else if (notAfter < now + SIX_MONTHS) {
124.558 - hasExpiringCert = true;
124.559 - }
124.560 - }
124.561 - }
124.562 + } else if (showcerts && !verbose.equals("all")) {
124.563 + // Print no info for unsigned entries when -verbose:all,
124.564 + // to be consistent with old behavior.
124.565 + if (signatureRelated(name)) {
124.566 + sb.append("\n" + tab + rb.getString(
124.567 + "(Signature related entries)") + "\n\n");
124.568 + } else {
124.569 + sb.append("\n" + tab + rb.getString(
124.570 + "(Unsigned entries)") + "\n\n");
124.571 }
124.572 }
124.573
124.574 + if (verbose != null) {
124.575 + String label = sb.toString();
124.576 + if (signatureRelated(name)) {
124.577 + // Entries inside META-INF and other unsigned
124.578 + // entries are grouped separately.
124.579 + label = "-" + label.substring(1);
124.580 + }
124.581 +
124.582 + // The label finally contains 2 parts separated by '|':
124.583 + // The legend displayed before the entry names, and
124.584 + // the cert info (if -certs specfied).
124.585 +
124.586 + if (!output.containsKey(label)) {
124.587 + output.put(label, new ArrayList<String>());
124.588 + }
124.589 +
124.590 + StringBuffer fb = new StringBuffer();
124.591 + String s = Long.toString(je.getSize());
124.592 + for (int i = 6 - s.length(); i > 0; --i) {
124.593 + fb.append(' ');
124.594 + }
124.595 + fb.append(s).append(' ').
124.596 + append(new Date(je.getTime()).toString());
124.597 + fb.append(' ').append(name);
124.598 +
124.599 + output.get(label).add(fb.toString());
124.600 + }
124.601 }
124.602 }
124.603 - if (verbose) {
124.604 + if (verbose != null) {
124.605 + for (Entry<String,List<String>> s: output.entrySet()) {
124.606 + List<String> files = s.getValue();
124.607 + String key = s.getKey();
124.608 + if (key.charAt(0) == '-') { // the signature-related group
124.609 + key = ' ' + key.substring(1);
124.610 + }
124.611 + int pipe = key.indexOf('|');
124.612 + if (verbose.equals("all")) {
124.613 + for (String f: files) {
124.614 + System.out.println(key.substring(0, pipe) + f);
124.615 + System.out.printf(key.substring(pipe+1));
124.616 + }
124.617 + } else {
124.618 + if (verbose.equals("grouped")) {
124.619 + for (String f: files) {
124.620 + System.out.println(key.substring(0, pipe) + f);
124.621 + }
124.622 + } else if (verbose.equals("summary")) {
124.623 + System.out.print(key.substring(0, pipe));
124.624 + if (files.size() > 1) {
124.625 + System.out.println(files.get(0) + " " +
124.626 + String.format(rb.getString(
124.627 + "(and %d more)"), files.size()-1));
124.628 + } else {
124.629 + System.out.println(files.get(0));
124.630 + }
124.631 + }
124.632 + System.out.printf(key.substring(pipe+1));
124.633 + }
124.634 + }
124.635 System.out.println();
124.636 System.out.println(rb.getString(
124.637 " s = signature was verified "));
124.638 @@ -589,9 +721,12 @@
124.639 " k = at least one certificate was found in keystore"));
124.640 System.out.println(rb.getString(
124.641 " i = at least one certificate was found in identity scope"));
124.642 + if (ckaliases.size() > 0) {
124.643 + System.out.println((
124.644 + " X = not signed by specified alias(es)"));
124.645 + }
124.646 System.out.println();
124.647 }
124.648 -
124.649 if (man == null)
124.650 System.out.println(rb.getString("no manifest."));
124.651
124.652 @@ -602,7 +737,8 @@
124.653 System.out.println(rb.getString("jar verified."));
124.654 if (hasUnsignedEntry || hasExpiredCert || hasExpiringCert ||
124.655 badKeyUsage || badExtendedKeyUsage || badNetscapeCertType ||
124.656 - notYetValidCert) {
124.657 + notYetValidCert || chainNotValidated ||
124.658 + aliasNotInStore || notSignedByAlias) {
124.659
124.660 System.out.println();
124.661 System.out.println(rb.getString("Warning: "));
124.662 @@ -638,14 +774,27 @@
124.663 "This jar contains entries whose signer certificate is not yet valid. "));
124.664 }
124.665
124.666 - if (! (verbose && showcerts)) {
124.667 + if (chainNotValidated) {
124.668 + System.out.println(
124.669 + rb.getString("This jar contains entries whose certificate chain is not validated."));
124.670 + }
124.671 +
124.672 + if (notSignedByAlias) {
124.673 + System.out.println(
124.674 + rb.getString("This jar contains signed entries which is not signed by the specified alias(es)."));
124.675 + }
124.676 +
124.677 + if (aliasNotInStore) {
124.678 + System.out.println(rb.getString("This jar contains signed entries that's not signed by alias in this keystore."));
124.679 + }
124.680 + if (! (verbose != null && showcerts)) {
124.681 System.out.println();
124.682 System.out.println(rb.getString(
124.683 "Re-run with the -verbose and -certs options for more details."));
124.684 }
124.685 }
124.686 }
124.687 - System.exit(0);
124.688 + return;
124.689 } catch (Exception e) {
124.690 System.out.println(rb.getString("jarsigner: ") + e);
124.691 if (debug) {
124.692 @@ -660,15 +809,6 @@
124.693 System.exit(1);
124.694 }
124.695
124.696 - /*
124.697 - * Display some details about a certificate:
124.698 - *
124.699 - * <cert-type> [", " <subject-DN>] [" (" <keystore-entry-alias> ")"]
124.700 - */
124.701 - String printCert(Certificate c) {
124.702 - return printCert("", c, false, 0);
124.703 - }
124.704 -
124.705 private static MessageFormat validityTimeForm = null;
124.706 private static MessageFormat notYetTimeForm = null;
124.707 private static MessageFormat expiredTimeForm = null;
124.708 @@ -679,6 +819,8 @@
124.709 *
124.710 * [<tab>] <cert-type> [", " <subject-DN>] [" (" <keystore-entry-alias> ")"]
124.711 * [<validity-period> | <expiry-warning>]
124.712 + *
124.713 + * Note: no newline character at the end
124.714 */
124.715 String printCert(String tab, Certificate c, boolean checkValidityPeriod,
124.716 long now) {
124.717 @@ -788,54 +930,75 @@
124.718 .append(signTimeForm.format(source)).append("]").toString();
124.719 }
124.720
124.721 + private Map<CodeSigner,Integer> cacheForInKS =
124.722 + new IdentityHashMap<CodeSigner,Integer>();
124.723 +
124.724 + private int inKeyStoreForOneSigner(CodeSigner signer) {
124.725 + if (cacheForInKS.containsKey(signer)) {
124.726 + return cacheForInKS.get(signer);
124.727 + }
124.728 +
124.729 + boolean found = false;
124.730 + int result = 0;
124.731 + List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates();
124.732 + for (Certificate c : certs) {
124.733 + String alias = storeHash.get(c);
124.734 + if (alias != null) {
124.735 + if (alias.startsWith("(")) {
124.736 + result |= IN_KEYSTORE;
124.737 + } else if (alias.startsWith("[")) {
124.738 + result |= IN_SCOPE;
124.739 + }
124.740 + if (ckaliases.contains(alias.substring(1, alias.length() - 1))) {
124.741 + result |= SIGNED_BY_ALIAS;
124.742 + }
124.743 + } else {
124.744 + if (store != null) {
124.745 + try {
124.746 + alias = store.getCertificateAlias(c);
124.747 + } catch (KeyStoreException kse) {
124.748 + // never happens, because keystore has been loaded
124.749 + }
124.750 + if (alias != null) {
124.751 + storeHash.put(c, "(" + alias + ")");
124.752 + found = true;
124.753 + result |= IN_KEYSTORE;
124.754 + }
124.755 + }
124.756 + if (!found && (scope != null)) {
124.757 + Identity id = scope.getIdentity(c.getPublicKey());
124.758 + if (id != null) {
124.759 + result |= IN_SCOPE;
124.760 + storeHash.put(c, "[" + id.getName() + "]");
124.761 + }
124.762 + }
124.763 + if (ckaliases.contains(alias)) {
124.764 + result |= SIGNED_BY_ALIAS;
124.765 + }
124.766 + }
124.767 + }
124.768 + cacheForInKS.put(signer, result);
124.769 + return result;
124.770 + }
124.771 +
124.772 Hashtable<Certificate, String> storeHash =
124.773 new Hashtable<Certificate, String>();
124.774
124.775 int inKeyStore(CodeSigner[] signers) {
124.776 - int result = 0;
124.777
124.778 if (signers == null)
124.779 return 0;
124.780
124.781 - boolean found = false;
124.782 + int output = 0;
124.783
124.784 - for (int i = 0; i < signers.length; i++) {
124.785 - found = false;
124.786 - List<? extends Certificate> certs =
124.787 - signers[i].getSignerCertPath().getCertificates();
124.788 -
124.789 - for (Certificate c : certs) {
124.790 - String alias = storeHash.get(c);
124.791 -
124.792 - if (alias != null) {
124.793 - if (alias.startsWith("("))
124.794 - result |= IN_KEYSTORE;
124.795 - else if (alias.startsWith("["))
124.796 - result |= IN_SCOPE;
124.797 - } else {
124.798 - if (store != null) {
124.799 - try {
124.800 - alias = store.getCertificateAlias(c);
124.801 - } catch (KeyStoreException kse) {
124.802 - // never happens, because keystore has been loaded
124.803 - }
124.804 - if (alias != null) {
124.805 - storeHash.put(c, "("+alias+")");
124.806 - found = true;
124.807 - result |= IN_KEYSTORE;
124.808 - }
124.809 - }
124.810 - if (!found && (scope != null)) {
124.811 - Identity id = scope.getIdentity(c.getPublicKey());
124.812 - if (id != null) {
124.813 - result |= IN_SCOPE;
124.814 - storeHash.put(c, "["+id.getName()+"]");
124.815 - }
124.816 - }
124.817 - }
124.818 - }
124.819 + for (CodeSigner signer: signers) {
124.820 + int result = inKeyStoreForOneSigner(signer);
124.821 + output |= result;
124.822 }
124.823 - return result;
124.824 + if (ckaliases.size() > 0 && (output & SIGNED_BY_ALIAS) == 0) {
124.825 + output |= NOT_ALIAS;
124.826 + }
124.827 + return output;
124.828 }
124.829
124.830 void signJar(String jarName, String alias, String[] args)
124.831 @@ -1025,7 +1188,7 @@
124.832 // manifest file has new length
124.833 mfFile = new ZipEntry(JarFile.MANIFEST_NAME);
124.834 }
124.835 - if (verbose) {
124.836 + if (verbose != null) {
124.837 if (mfCreated) {
124.838 System.out.println(rb.getString(" adding: ") +
124.839 mfFile.getName());
124.840 @@ -1076,7 +1239,7 @@
124.841 // signature file
124.842 zos.putNextEntry(sfFile);
124.843 sf.write(zos);
124.844 - if (verbose) {
124.845 + if (verbose != null) {
124.846 if (zipFile.getEntry(sfFilename) != null) {
124.847 System.out.println(rb.getString(" updating: ") +
124.848 sfFilename);
124.849 @@ -1086,7 +1249,7 @@
124.850 }
124.851 }
124.852
124.853 - if (verbose) {
124.854 + if (verbose != null) {
124.855 if (tsaUrl != null || tsaCert != null) {
124.856 System.out.println(
124.857 rb.getString("requesting a signature timestamp"));
124.858 @@ -1101,8 +1264,8 @@
124.859 System.out.println(rb.getString("TSA location: ") +
124.860 certUrl);
124.861 }
124.862 - System.out.println(
124.863 - rb.getString("TSA certificate: ") + printCert(tsaCert));
124.864 + System.out.println(rb.getString("TSA certificate: ") +
124.865 + printCert("", tsaCert, false, 0));
124.866 }
124.867 if (signingMechanism != null) {
124.868 System.out.println(
124.869 @@ -1113,7 +1276,7 @@
124.870 // signature block file
124.871 zos.putNextEntry(bkFile);
124.872 block.write(zos);
124.873 - if (verbose) {
124.874 + if (verbose != null) {
124.875 if (zipFile.getEntry(bkFilename) != null) {
124.876 System.out.println(rb.getString(" updating: ") +
124.877 bkFilename);
124.878 @@ -1140,7 +1303,7 @@
124.879 ZipEntry ze = enum_.nextElement();
124.880
124.881 if (!ze.getName().startsWith(META_INF)) {
124.882 - if (verbose) {
124.883 + if (verbose != null) {
124.884 if (manifest.getAttributes(ze.getName()) != null)
124.885 System.out.println(rb.getString(" signing: ") +
124.886 ze.getName());
124.887 @@ -1194,7 +1357,8 @@
124.888 }
124.889
124.890 if (hasExpiredCert || hasExpiringCert || notYetValidCert
124.891 - || badKeyUsage || badExtendedKeyUsage || badNetscapeCertType) {
124.892 + || badKeyUsage || badExtendedKeyUsage
124.893 + || badNetscapeCertType || chainNotValidated) {
124.894 System.out.println();
124.895
124.896 System.out.println(rb.getString("Warning: "));
124.897 @@ -1223,6 +1387,11 @@
124.898 System.out.println(
124.899 rb.getString("The signer certificate is not yet valid."));
124.900 }
124.901 +
124.902 + if (chainNotValidated) {
124.903 + System.out.println(
124.904 + rb.getString("The signer's certificate chain is not validated."));
124.905 + }
124.906 }
124.907
124.908 // no IOException thrown in the above try clause, so disable
124.909 @@ -1274,6 +1443,40 @@
124.910 return false;
124.911 }
124.912
124.913 + Map<CodeSigner,String> cacheForSignerInfo = new IdentityHashMap<CodeSigner,String>();
124.914 +
124.915 + /**
124.916 + * Returns a string of singer info, with a newline at the end
124.917 + */
124.918 + private String signerInfo(CodeSigner signer, String tab, long now) {
124.919 + if (cacheForSignerInfo.containsKey(signer)) {
124.920 + return cacheForSignerInfo.get(signer);
124.921 + }
124.922 + StringBuffer s = new StringBuffer();
124.923 + List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates();
124.924 + // display the signature timestamp, if present
124.925 + Timestamp timestamp = signer.getTimestamp();
124.926 + if (timestamp != null) {
124.927 + s.append(printTimestamp(tab, timestamp));
124.928 + }
124.929 + // display the certificate(s)
124.930 + for (Certificate c : certs) {
124.931 + s.append(printCert(tab, c, true, now));
124.932 + s.append('\n');
124.933 + }
124.934 + try {
124.935 + CertPath cp = certificateFactory.generateCertPath(certs);
124.936 + validator.validate(cp, pkixParameters);
124.937 + } catch (Exception e) {
124.938 + chainNotValidated = true;
124.939 + s.append(tab + rb.getString("[CertPath not validated: ") +
124.940 + e.getLocalizedMessage() + "]\n"); // TODO
124.941 + }
124.942 + String result = s.toString();
124.943 + cacheForSignerInfo.put(signer, result);
124.944 + return result;
124.945 + }
124.946 +
124.947 private void writeEntry(ZipFile zf, ZipOutputStream os, ZipEntry ze)
124.948 throws IOException
124.949 {
124.950 @@ -1360,6 +1563,48 @@
124.951 }
124.952 }
124.953 }
124.954 + Set<TrustAnchor> tas = new HashSet<TrustAnchor>();
124.955 + try {
124.956 + KeyStore caks = KeyTool.getCacertsKeyStore();
124.957 + if (caks != null) {
124.958 + Enumeration<String> aliases = caks.aliases();
124.959 + while (aliases.hasMoreElements()) {
124.960 + String a = aliases.nextElement();
124.961 + try {
124.962 + tas.add(new TrustAnchor((X509Certificate)caks.getCertificate(a), null));
124.963 + } catch (Exception e2) {
124.964 + // ignore, when a SecretkeyEntry does not include a cert
124.965 + }
124.966 + }
124.967 + }
124.968 + } catch (Exception e) {
124.969 + // Ignore, if cacerts cannot be loaded
124.970 + }
124.971 + if (store != null) {
124.972 + Enumeration<String> aliases = store.aliases();
124.973 + while (aliases.hasMoreElements()) {
124.974 + String a = aliases.nextElement();
124.975 + try {
124.976 + X509Certificate c = (X509Certificate)store.getCertificate(a);
124.977 + // Only add TrustedCertificateEntry and self-signed
124.978 + // PrivateKeyEntry
124.979 + if (store.isCertificateEntry(a) ||
124.980 + c.getSubjectDN().equals(c.getIssuerDN())) {
124.981 + tas.add(new TrustAnchor(c, null));
124.982 + }
124.983 + } catch (Exception e2) {
124.984 + // ignore, when a SecretkeyEntry does not include a cert
124.985 + }
124.986 + }
124.987 + }
124.988 + certificateFactory = CertificateFactory.getInstance("X.509");
124.989 + validator = CertPathValidator.getInstance("PKIX");
124.990 + try {
124.991 + pkixParameters = new PKIXParameters(tas);
124.992 + pkixParameters.setRevocationEnabled(false);
124.993 + } catch (InvalidAlgorithmParameterException ex) {
124.994 + // Only if tas is empty
124.995 + }
124.996 } catch (IOException ioe) {
124.997 throw new RuntimeException(rb.getString("keystore load: ") +
124.998 ioe.getMessage());
124.999 @@ -1408,7 +1653,8 @@
124.1000 void checkCertUsage(X509Certificate userCert, boolean[] bad) {
124.1001
124.1002 // Can act as a signer?
124.1003 - // 1. if KeyUsage, then [0] should be true
124.1004 + // 1. if KeyUsage, then [0:digitalSignature] or
124.1005 + // [1:nonRepudiation] should be true
124.1006 // 2. if ExtendedKeyUsage, then should contains ANY or CODE_SIGNING
124.1007 // 3. if NetscapeCertType, then should contains OBJECT_SIGNING
124.1008 // 1,2,3 must be true
124.1009 @@ -1419,10 +1665,10 @@
124.1010
124.1011 boolean[] keyUsage = userCert.getKeyUsage();
124.1012 if (keyUsage != null) {
124.1013 - if (keyUsage.length < 1 || !keyUsage[0]) {
124.1014 + keyUsage = Arrays.copyOf(keyUsage, 9);
124.1015 + if (!keyUsage[0] && !keyUsage[1]) {
124.1016 if (bad != null) {
124.1017 bad[0] = true;
124.1018 - } else {
124.1019 badKeyUsage = true;
124.1020 }
124.1021 }
124.1022 @@ -1435,7 +1681,6 @@
124.1023 && !xKeyUsage.contains("1.3.6.1.5.5.7.3.3")) { // codeSigning
124.1024 if (bad != null) {
124.1025 bad[1] = true;
124.1026 - } else {
124.1027 badExtendedKeyUsage = true;
124.1028 }
124.1029 }
124.1030 @@ -1462,7 +1707,6 @@
124.1031 if (!val) {
124.1032 if (bad != null) {
124.1033 bad[2] = true;
124.1034 - } else {
124.1035 badNetscapeCertType = true;
124.1036 }
124.1037 }
124.1038 @@ -1477,19 +1721,36 @@
124.1039 Key key = null;
124.1040
124.1041 try {
124.1042 -
124.1043 java.security.cert.Certificate[] cs = null;
124.1044 -
124.1045 - try {
124.1046 - cs = store.getCertificateChain(alias);
124.1047 - } catch (KeyStoreException kse) {
124.1048 - // this never happens, because keystore has been loaded
124.1049 + if (altCertChain != null) {
124.1050 + try {
124.1051 + cs = CertificateFactory.getInstance("X.509").
124.1052 + generateCertificates(new FileInputStream(altCertChain)).
124.1053 + toArray(new Certificate[0]);
124.1054 + } catch (CertificateException ex) {
124.1055 + error(rb.getString("Cannot restore certchain from file specified"));
124.1056 + } catch (FileNotFoundException ex) {
124.1057 + error(rb.getString("File specified by -certchain does not exist"));
124.1058 + }
124.1059 + } else {
124.1060 + try {
124.1061 + cs = store.getCertificateChain(alias);
124.1062 + } catch (KeyStoreException kse) {
124.1063 + // this never happens, because keystore has been loaded
124.1064 + }
124.1065 }
124.1066 - if (cs == null) {
124.1067 - MessageFormat form = new MessageFormat(rb.getString
124.1068 - ("Certificate chain not found for: alias. alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain."));
124.1069 - Object[] source = {alias, alias};
124.1070 - error(form.format(source));
124.1071 + if (cs == null || cs.length == 0) {
124.1072 + if (altCertChain != null) {
124.1073 + error(rb.getString
124.1074 + ("Certificate chain not found in the file specified."));
124.1075 + } else {
124.1076 + MessageFormat form = new MessageFormat(rb.getString
124.1077 + ("Certificate chain not found for: alias. alias must" +
124.1078 + " reference a valid KeyStore key entry containing a" +
124.1079 + " private key and corresponding public key certificate chain."));
124.1080 + Object[] source = {alias, alias};
124.1081 + error(form.format(source));
124.1082 + }
124.1083 }
124.1084
124.1085 certChain = new X509Certificate[cs.length];
124.1086 @@ -1501,56 +1762,15 @@
124.1087 certChain[i] = (X509Certificate)cs[i];
124.1088 }
124.1089
124.1090 - // order the cert chain if necessary (put user cert first,
124.1091 - // root-cert last in the chain)
124.1092 - X509Certificate userCert
124.1093 - = (X509Certificate)store.getCertificate(alias);
124.1094 + // We don't meant to print anything, the next call
124.1095 + // checks validity and keyUsage etc
124.1096 + printCert("", certChain[0], true, 0);
124.1097
124.1098 - // check validity of signer certificate
124.1099 try {
124.1100 - userCert.checkValidity();
124.1101 -
124.1102 - if (userCert.getNotAfter().getTime() <
124.1103 - System.currentTimeMillis() + SIX_MONTHS) {
124.1104 -
124.1105 - hasExpiringCert = true;
124.1106 - }
124.1107 - } catch (CertificateExpiredException cee) {
124.1108 - hasExpiredCert = true;
124.1109 -
124.1110 - } catch (CertificateNotYetValidException cnyve) {
124.1111 - notYetValidCert = true;
124.1112 - }
124.1113 -
124.1114 - checkCertUsage(userCert, null);
124.1115 -
124.1116 - if (!userCert.equals(certChain[0])) {
124.1117 - // need to order ...
124.1118 - X509Certificate[] certChainTmp
124.1119 - = new X509Certificate[certChain.length];
124.1120 - certChainTmp[0] = userCert;
124.1121 - Principal issuer = userCert.getIssuerDN();
124.1122 - for (int i=1; i<certChain.length; i++) {
124.1123 - int j;
124.1124 - // look for the cert whose subject corresponds to the
124.1125 - // given issuer
124.1126 - for (j=0; j<certChainTmp.length; j++) {
124.1127 - if (certChainTmp[j] == null)
124.1128 - continue;
124.1129 - Principal subject = certChainTmp[j].getSubjectDN();
124.1130 - if (issuer.equals(subject)) {
124.1131 - certChain[i] = certChainTmp[j];
124.1132 - issuer = certChainTmp[j].getIssuerDN();
124.1133 - certChainTmp[j] = null;
124.1134 - break;
124.1135 - }
124.1136 - }
124.1137 - if (j == certChainTmp.length) {
124.1138 - error(rb.getString("incomplete certificate chain"));
124.1139 - }
124.1140 -
124.1141 - }
124.1142 - certChain = certChainTmp; // ordered
124.1143 + CertPath cp = certificateFactory.generateCertPath(Arrays.asList(certChain));
124.1144 + validator.validate(cp, pkixParameters);
124.1145 + } catch (Exception e) {
124.1146 + chainNotValidated = true;
124.1147 }
124.1148
124.1149 try {
125.1 --- a/src/share/classes/sun/security/tools/JarSignerResources.java Thu Apr 16 17:42:00 2009 +0100
125.2 +++ b/src/share/classes/sun/security/tools/JarSignerResources.java Thu Apr 16 19:10:32 2009 -0700
125.3 @@ -1,5 +1,5 @@
125.4 /*
125.5 - * Copyright 2000-2005 Sun Microsystems, Inc. All Rights Reserved.
125.6 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
125.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
125.8 *
125.9 * This code is free software; you can redistribute it and/or modify it
125.10 @@ -54,8 +54,8 @@
125.11 "If keystore is not password protected, then -storepass and -keypass must not be specified"},
125.12 {"Usage: jarsigner [options] jar-file alias",
125.13 "Usage: jarsigner [options] jar-file alias"},
125.14 - {" jarsigner -verify [options] jar-file",
125.15 - " jarsigner -verify [options] jar-file"},
125.16 + {" jarsigner -verify [options] jar-file [alias...]",
125.17 + " jarsigner -verify [options] jar-file [alias...]"},
125.18 {"[-keystore <url>] keystore location",
125.19 "[-keystore <url>] keystore location"},
125.20 {"[-storepass <password>] password for keystore integrity",
125.21 @@ -64,6 +64,8 @@
125.22 "[-storetype <type>] keystore type"},
125.23 {"[-keypass <password>] password for private key (if different)",
125.24 "[-keypass <password>] password for private key (if different)"},
125.25 + {"[-certchain <file>] name of alternative certchain file",
125.26 + "[-certchain <file>] name of alternative certchain file"},
125.27 {"[-sigfile <file>] name of .SF/.DSA file",
125.28 "[-sigfile <file>] name of .SF/.DSA file"},
125.29 {"[-signedjar <file>] name of signed JAR file",
125.30 @@ -74,8 +76,10 @@
125.31 "[-sigalg <algorithm>] name of signature algorithm"},
125.32 {"[-verify] verify a signed JAR file",
125.33 "[-verify] verify a signed JAR file"},
125.34 - {"[-verbose] verbose output when signing/verifying",
125.35 - "[-verbose] verbose output when signing/verifying"},
125.36 + {"[-verbose[:suboptions]] verbose output when signing/verifying.",
125.37 + "[-verbose[:suboptions]] verbose output when signing/verifying."},
125.38 + {" suboptions can be all, grouped or summary",
125.39 + " suboptions can be all, grouped or summary"},
125.40 {"[-certs] display certificates when verbose and verifying",
125.41 "[-certs] display certificates when verbose and verifying"},
125.42 {"[-tsa <url>] location of the Timestamping Authority",
125.43 @@ -98,10 +102,22 @@
125.44 "[-providerClass <class> name of cryptographic service provider's"},
125.45 {" [-providerArg <arg>]] ... master class file and constructor argument",
125.46 " [-providerArg <arg>]] ... master class file and constructor argument"},
125.47 + {"[-strict] treat warnings as errors",
125.48 + "[-strict] treat warnings as errors"},
125.49 + {"Option lacks argument", "Option lacks argument"},
125.50 + {"Please type jarsigner -help for usage", "Please type jarsigner -help for usage"},
125.51 + {"Please specify jarfile name", "Please specify jarfile name"},
125.52 + {"Please specify alias name", "Please specify alias name"},
125.53 + {"Only one alias can be specified", "Only one alias can be specified"},
125.54 + {"This jar contains signed entries which is not signed by the specified alias(es).",
125.55 + "This jar contains signed entries which is not signed by the specified alias(es)."},
125.56 + {"This jar contains signed entries that's not signed by alias in this keystore.",
125.57 + "This jar contains signed entries that's not signed by alias in this keystore."},
125.58 {"s", "s"},
125.59 {"m", "m"},
125.60 {"k", "k"},
125.61 {"i", "i"},
125.62 + {"(and %d more)", "(and %d more)"},
125.63 {" s = signature was verified ",
125.64 " s = signature was verified "},
125.65 {" m = entry is listed in manifest",
125.66 @@ -110,7 +126,11 @@
125.67 " k = at least one certificate was found in keystore"},
125.68 {" i = at least one certificate was found in identity scope",
125.69 " i = at least one certificate was found in identity scope"},
125.70 + {" X = not signed by specified alias(es)",
125.71 + " X = not signed by specified alias(es)"},
125.72 {"no manifest.", "no manifest."},
125.73 + {"(Signature related entries)","(Signature related entries)"},
125.74 + {"(Unsigned entries)", "(Unsigned entries)"},
125.75 {"jar is unsigned. (signatures missing or not parsable)",
125.76 "jar is unsigned. (signatures missing or not parsable)"},
125.77 {"jar verified.", "jar verified."},
125.78 @@ -134,6 +154,12 @@
125.79 "unable to instantiate keystore class: "},
125.80 {"Certificate chain not found for: alias. alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.",
125.81 "Certificate chain not found for: {0}. {1} must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain."},
125.82 + {"File specified by -certchain does not exist",
125.83 + "File specified by -certchain does not exist"},
125.84 + {"Cannot restore certchain from file specified",
125.85 + "Cannot restore certchain from file specified"},
125.86 + {"Certificate chain not found in the file specified.",
125.87 + "Certificate chain not found in the file specified."},
125.88 {"found non-X.509 certificate in signer's chain",
125.89 "found non-X.509 certificate in signer's chain"},
125.90 {"incomplete certificate chain", "incomplete certificate chain"},
125.91 @@ -149,6 +175,7 @@
125.92 {"certificate is not valid until",
125.93 "certificate is not valid until {0}"},
125.94 {"certificate will expire on", "certificate will expire on {0}"},
125.95 + {"[CertPath not validated: ", "[CertPath not validated: "},
125.96 {"requesting a signature timestamp",
125.97 "requesting a signature timestamp"},
125.98 {"TSA location: ", "TSA location: "},
125.99 @@ -189,14 +216,18 @@
125.100 "The signer certificate's ExtendedKeyUsage extension doesn't allow code signing."},
125.101 {"The signer certificate's NetscapeCertType extension doesn't allow code signing.",
125.102 "The signer certificate's NetscapeCertType extension doesn't allow code signing."},
125.103 - {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.",
125.104 - "This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing."},
125.105 - {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.",
125.106 - "This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing."},
125.107 - {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.",
125.108 - "This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing."},
125.109 + {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.",
125.110 + "This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing."},
125.111 + {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.",
125.112 + "This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing."},
125.113 + {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.",
125.114 + "This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing."},
125.115 {"[{0} extension does not support code signing]",
125.116 "[{0} extension does not support code signing]"},
125.117 + {"The signer's certificate chain is not validated.",
125.118 + "The signer's certificate chain is not validated."},
125.119 + {"This jar contains entries whose certificate chain is not validated.",
125.120 + "This jar contains entries whose certificate chain is not validated."},
125.121 };
125.122
125.123 /**
126.1 --- a/src/share/classes/sun/security/tools/KeyTool.java Thu Apr 16 17:42:00 2009 +0100
126.2 +++ b/src/share/classes/sun/security/tools/KeyTool.java Thu Apr 16 19:10:32 2009 -0700
126.3 @@ -2545,7 +2545,19 @@
126.4 * Returns true if the certificate is self-signed, false otherwise.
126.5 */
126.6 private boolean isSelfSigned(X509Certificate cert) {
126.7 - return cert.getSubjectDN().equals(cert.getIssuerDN());
126.8 + return signedBy(cert, cert);
126.9 + }
126.10 +
126.11 + private boolean signedBy(X509Certificate end, X509Certificate ca) {
126.12 + if (!ca.getSubjectDN().equals(end.getIssuerDN())) {
126.13 + return false;
126.14 + }
126.15 + try {
126.16 + end.verify(ca.getPublicKey());
126.17 + return true;
126.18 + } catch (Exception e) {
126.19 + return false;
126.20 + }
126.21 }
126.22
126.23 /**
126.24 @@ -2869,20 +2881,18 @@
126.25 Certificate tmpCert = replyCerts[0];
126.26 replyCerts[0] = replyCerts[i];
126.27 replyCerts[i] = tmpCert;
126.28 - Principal issuer = ((X509Certificate)replyCerts[0]).getIssuerDN();
126.29 +
126.30 + X509Certificate thisCert = (X509Certificate)replyCerts[0];
126.31
126.32 for (i=1; i < replyCerts.length-1; i++) {
126.33 - // find a cert in the reply whose "subject" is the same as the
126.34 - // given "issuer"
126.35 + // find a cert in the reply who signs thisCert
126.36 int j;
126.37 for (j=i; j<replyCerts.length; j++) {
126.38 - Principal subject;
126.39 - subject = ((X509Certificate)replyCerts[j]).getSubjectDN();
126.40 - if (subject.equals(issuer)) {
126.41 + if (signedBy(thisCert, (X509Certificate)replyCerts[j])) {
126.42 tmpCert = replyCerts[i];
126.43 replyCerts[i] = replyCerts[j];
126.44 replyCerts[j] = tmpCert;
126.45 - issuer = ((X509Certificate)replyCerts[i]).getIssuerDN();
126.46 + thisCert = (X509Certificate)replyCerts[i];
126.47 break;
126.48 }
126.49 }
126.50 @@ -2892,18 +2902,6 @@
126.51 }
126.52 }
126.53
126.54 - // now verify each cert in the ordered chain
126.55 - for (i=0; i<replyCerts.length-1; i++) {
126.56 - PublicKey pubKey = replyCerts[i+1].getPublicKey();
126.57 - try {
126.58 - replyCerts[i].verify(pubKey);
126.59 - } catch (Exception e) {
126.60 - throw new Exception(rb.getString
126.61 - ("Certificate chain in reply does not verify: ") +
126.62 - e.getMessage());
126.63 - }
126.64 - }
126.65 -
126.66 if (noprompt) {
126.67 return replyCerts;
126.68 }
126.69 @@ -3035,9 +3033,8 @@
126.70 private boolean buildChain(X509Certificate certToVerify,
126.71 Vector<Certificate> chain,
126.72 Hashtable<Principal, Vector<Certificate>> certs) {
126.73 - Principal subject = certToVerify.getSubjectDN();
126.74 Principal issuer = certToVerify.getIssuerDN();
126.75 - if (subject.equals(issuer)) {
126.76 + if (isSelfSigned(certToVerify)) {
126.77 // reached self-signed root cert;
126.78 // no verification needed because it's trusted.
126.79 chain.addElement(certToVerify);
126.80 @@ -3108,7 +3105,7 @@
126.81 /**
126.82 * Returns the keystore with the configured CA certificates.
126.83 */
126.84 - private KeyStore getCacertsKeyStore()
126.85 + public static KeyStore getCacertsKeyStore()
126.86 throws Exception
126.87 {
126.88 String sep = File.separator;
127.1 --- a/src/share/classes/sun/security/util/ManifestEntryVerifier.java Thu Apr 16 17:42:00 2009 +0100
127.2 +++ b/src/share/classes/sun/security/util/ManifestEntryVerifier.java Thu Apr 16 19:10:32 2009 -0700
127.3 @@ -44,8 +44,6 @@
127.4
127.5 private static final Debug debug = Debug.getInstance("jar");
127.6
127.7 - private static final Provider digestProvider = Providers.getSunProvider();
127.8 -
127.9 /** the created digest objects */
127.10 HashMap<String, MessageDigest> createdDigests;
127.11
127.12 @@ -127,7 +125,7 @@
127.13 try {
127.14
127.15 digest = MessageDigest.getInstance
127.16 - (algorithm, digestProvider);
127.17 + (algorithm, Providers.getSunProvider());
127.18 createdDigests.put(algorithm, digest);
127.19 } catch (NoSuchAlgorithmException nsae) {
127.20 // ignore
128.1 --- a/src/share/classes/sun/swing/FilePane.java Thu Apr 16 17:42:00 2009 +0100
128.2 +++ b/src/share/classes/sun/swing/FilePane.java Thu Apr 16 19:10:32 2009 -0700
128.3 @@ -34,6 +34,7 @@
128.4 import java.text.MessageFormat;
128.5 import java.util.*;
128.6 import java.util.List;
128.7 +import java.util.concurrent.Callable;
128.8
128.9 import javax.swing.*;
128.10 import javax.swing.border.*;
128.11 @@ -900,6 +901,16 @@
128.12 }
128.13 }
128.14
128.15 + @Override
128.16 + public void sort() {
128.17 + ShellFolder.getInvoker().invoke(new Callable<Void>() {
128.18 + public Void call() throws Exception {
128.19 + DetailsTableRowSorter.super.sort();
128.20 + return null;
128.21 + }
128.22 + });
128.23 + }
128.24 +
128.25 public void modelStructureChanged() {
128.26 super.modelStructureChanged();
128.27 updateComparators(detailsTableModel.getColumns());
129.1 --- a/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Thu Apr 16 17:42:00 2009 +0100
129.2 +++ b/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Thu Apr 16 19:10:32 2009 -0700
129.3 @@ -29,6 +29,8 @@
129.4 import java.beans.*;
129.5 import java.io.*;
129.6 import java.util.*;
129.7 +import java.security.AccessController;
129.8 +import java.security.PrivilegedAction;
129.9
129.10 import javax.swing.*;
129.11 import javax.swing.event.*;
129.12 @@ -749,7 +751,11 @@
129.13
129.14 File[] baseFolders;
129.15 if (useShellFolder) {
129.16 - baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders");
129.17 + baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() {
129.18 + public File[] run() {
129.19 + return (File[]) ShellFolder.get("fileChooserComboBoxFolders");
129.20 + }
129.21 + });
129.22 } else {
129.23 baseFolders = fsv.getRoots();
129.24 }
130.1 --- a/src/share/classes/sun/text/normalizer/CharTrie.java Thu Apr 16 17:42:00 2009 +0100
130.2 +++ b/src/share/classes/sun/text/normalizer/CharTrie.java Thu Apr 16 19:10:32 2009 -0700
130.3 @@ -1,5 +1,5 @@
130.4 /*
130.5 - * Portions Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
130.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
130.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
130.8 *
130.9 * This code is free software; you can redistribute it and/or modify it
130.10 @@ -22,10 +22,9 @@
130.11 * CA 95054 USA or visit www.sun.com if you need additional information or
130.12 * have any questions.
130.13 */
130.14 -
130.15 /*
130.16 *******************************************************************************
130.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
130.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
130.19 * *
130.20 * The original version of this source code and documentation is copyrighted *
130.21 * and owned by IBM, These materials are provided under terms of a License *
130.22 @@ -78,6 +77,66 @@
130.23 }
130.24
130.25 /**
130.26 + * Make a dummy CharTrie.
130.27 + * A dummy trie is an empty runtime trie, used when a real data trie cannot
130.28 + * be loaded.
130.29 + *
130.30 + * The trie always returns the initialValue,
130.31 + * or the leadUnitValue for lead surrogate code points.
130.32 + * The Latin-1 part is always set up to be linear.
130.33 + *
130.34 + * @param initialValue the initial value that is set for all code points
130.35 + * @param leadUnitValue the value for lead surrogate code _units_ that do not
130.36 + * have associated supplementary data
130.37 + * @param dataManipulate object which provides methods to parse the char data
130.38 + */
130.39 + public CharTrie(int initialValue, int leadUnitValue, DataManipulate dataManipulate) {
130.40 + super(new char[BMP_INDEX_LENGTH+SURROGATE_BLOCK_COUNT], HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_, dataManipulate);
130.41 +
130.42 + int dataLength, latin1Length, i, limit;
130.43 + char block;
130.44 +
130.45 + /* calculate the actual size of the dummy trie data */
130.46 +
130.47 + /* max(Latin-1, block 0) */
130.48 + dataLength=latin1Length= INDEX_STAGE_1_SHIFT_<=8 ? 256 : DATA_BLOCK_LENGTH;
130.49 + if(leadUnitValue!=initialValue) {
130.50 + dataLength+=DATA_BLOCK_LENGTH;
130.51 + }
130.52 + m_data_=new char[dataLength];
130.53 + m_dataLength_=dataLength;
130.54 +
130.55 + m_initialValue_=(char)initialValue;
130.56 +
130.57 + /* fill the index and data arrays */
130.58 +
130.59 + /* indexes are preset to 0 (block 0) */
130.60 +
130.61 + /* Latin-1 data */
130.62 + for(i=0; i<latin1Length; ++i) {
130.63 + m_data_[i]=(char)initialValue;
130.64 + }
130.65 +
130.66 + if(leadUnitValue!=initialValue) {
130.67 + /* indexes for lead surrogate code units to the block after Latin-1 */
130.68 + block=(char)(latin1Length>>INDEX_STAGE_2_SHIFT_);
130.69 + i=0xd800>>INDEX_STAGE_1_SHIFT_;
130.70 + limit=0xdc00>>INDEX_STAGE_1_SHIFT_;
130.71 + for(; i<limit; ++i) {
130.72 + m_index_[i]=block;
130.73 + }
130.74 +
130.75 + /* data for lead surrogate code units */
130.76 + limit=latin1Length+DATA_BLOCK_LENGTH;
130.77 + for(i=latin1Length; i<limit; ++i) {
130.78 + m_data_[i]=(char)leadUnitValue;
130.79 + }
130.80 + }
130.81 +
130.82 + m_friendAgent_ = new FriendAgent();
130.83 + }
130.84 +
130.85 + /**
130.86 * Java friend implementation
130.87 */
130.88 public class FriendAgent
130.89 @@ -130,7 +189,18 @@
130.90 */
130.91 public final char getCodePointValue(int ch)
130.92 {
130.93 - int offset = getCodePointOffset(ch);
130.94 + int offset;
130.95 +
130.96 + // fastpath for U+0000..U+D7FF
130.97 + if(0 <= ch && ch < UTF16.LEAD_SURROGATE_MIN_VALUE) {
130.98 + // copy of getRawOffset()
130.99 + offset = (m_index_[ch >> INDEX_STAGE_1_SHIFT_] << INDEX_STAGE_2_SHIFT_)
130.100 + + (ch & INDEX_STAGE_3_MASK_);
130.101 + return m_data_[offset];
130.102 + }
130.103 +
130.104 + // handle U+D800..U+10FFFF
130.105 + offset = getCodePointOffset(ch);
130.106
130.107 // return -1 if there is an error, in this case we return the default
130.108 // value: m_initialValue_
131.1 --- a/src/share/classes/sun/text/normalizer/NormalizerBase.java Thu Apr 16 17:42:00 2009 +0100
131.2 +++ b/src/share/classes/sun/text/normalizer/NormalizerBase.java Thu Apr 16 19:10:32 2009 -0700
131.3 @@ -1,5 +1,5 @@
131.4 /*
131.5 - * Portions Copyright 2001-2006 Sun Microsystems, Inc. All Rights Reserved.
131.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
131.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
131.8 *
131.9 * This code is free software; you can redistribute it and/or modify it
131.10 @@ -22,10 +22,9 @@
131.11 * CA 95054 USA or visit www.sun.com if you need additional information or
131.12 * have any questions.
131.13 */
131.14 -
131.15 /*
131.16 *******************************************************************************
131.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
131.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
131.19 * *
131.20 * The original version of this source code and documentation is copyrighted *
131.21 * and owned by IBM, These materials are provided under terms of a License *
131.22 @@ -127,7 +126,7 @@
131.23 * normalize(FCD) may be implemented with NFD.
131.24 *
131.25 * For more details on FCD see the collation design document:
131.26 - * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm
131.27 + * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
131.28 *
131.29 * ICU collation performs either NFD or FCD normalization automatically if
131.30 * normalization is turned on for the collator object. Beyond collation and
132.1 --- a/src/share/classes/sun/text/normalizer/NormalizerDataReader.java Thu Apr 16 17:42:00 2009 +0100
132.2 +++ b/src/share/classes/sun/text/normalizer/NormalizerDataReader.java Thu Apr 16 19:10:32 2009 -0700
132.3 @@ -1,5 +1,5 @@
132.4 /*
132.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
132.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
132.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
132.8 *
132.9 * This code is free software; you can redistribute it and/or modify it
132.10 @@ -22,10 +22,9 @@
132.11 * CA 95054 USA or visit www.sun.com if you need additional information or
132.12 * have any questions.
132.13 */
132.14 -
132.15 /*
132.16 *******************************************************************************
132.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
132.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
132.19 * *
132.20 * The original version of this source code and documentation is copyrighted *
132.21 * and owned by IBM, These materials are provided under terms of a License *
132.22 @@ -331,7 +330,7 @@
132.23 throws IOException{
132.24
132.25 //Read the bytes that make up the normTrie
132.26 - dataInputStream.read(normBytes);
132.27 + dataInputStream.readFully(normBytes);
132.28
132.29 //normTrieStream= new ByteArrayInputStream(normBytes);
132.30
132.31 @@ -346,11 +345,11 @@
132.32 }
132.33
132.34 //Read the fcdTrie
132.35 - dataInputStream.read(fcdBytes);
132.36 + dataInputStream.readFully(fcdBytes);
132.37
132.38
132.39 //Read the AuxTrie
132.40 - dataInputStream.read(auxBytes);
132.41 + dataInputStream.readFully(auxBytes);
132.42 }
132.43
132.44 public byte[] getDataFormatVersion(){
133.1 --- a/src/share/classes/sun/text/normalizer/NormalizerImpl.java Thu Apr 16 17:42:00 2009 +0100
133.2 +++ b/src/share/classes/sun/text/normalizer/NormalizerImpl.java Thu Apr 16 19:10:32 2009 -0700
133.3 @@ -1,5 +1,5 @@
133.4 /*
133.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
133.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
133.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
133.8 *
133.9 * This code is free software; you can redistribute it and/or modify it
133.10 @@ -22,10 +22,9 @@
133.11 * CA 95054 USA or visit www.sun.com if you need additional information or
133.12 * have any questions.
133.13 */
133.14 -
133.15 /*
133.16 *******************************************************************************
133.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
133.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
133.19 * *
133.20 * The original version of this source code and documentation is copyrighted *
133.21 * and owned by IBM, These materials are provided under terms of a License *
133.22 @@ -102,7 +101,7 @@
133.23 private static final long MIN_SPECIAL = (long)(0xfc000000 & UNSIGNED_INT_MASK);
133.24 private static final long SURROGATES_TOP = (long)(0xfff00000 & UNSIGNED_INT_MASK);
133.25 private static final long MIN_HANGUL = (long)(0xfff00000 & UNSIGNED_INT_MASK);
133.26 - private static final long MIN_JAMO_V = (long)(0xfff20000 & UNSIGNED_INT_MASK);
133.27 +// private static final long MIN_JAMO_V = (long)(0xfff20000 & UNSIGNED_INT_MASK);
133.28 private static final long JAMO_V_TOP = (long)(0xfff30000 & UNSIGNED_INT_MASK);
133.29
133.30
133.31 @@ -908,7 +907,7 @@
133.32 buffer = composePart(args,prevStarter,src,srcStart,srcLimit,options,nx);
133.33
133.34 // compare the normalized version with the original
133.35 - if(0!=strCompare(buffer,0,args.length,src,prevStarter,(srcStart-prevStarter), false)) {
133.36 + if(0!=strCompare(buffer,0,args.length,src,prevStarter,srcStart, false)) {
133.37 result=NormalizerBase.NO; // normalization differs
133.38 break;
133.39 }
133.40 @@ -2291,7 +2290,7 @@
133.41 private static final int OPTIONS_NX_MASK=0x1f;
133.42 private static final int OPTIONS_UNICODE_MASK=0xe0;
133.43 public static final int OPTIONS_SETS_MASK=0xff;
133.44 - private static final int OPTIONS_UNICODE_SHIFT=5;
133.45 +// private static final int OPTIONS_UNICODE_SHIFT=5;
133.46 private static final UnicodeSet[] nxCache = new UnicodeSet[OPTIONS_SETS_MASK+1];
133.47
133.48 /* Constants for options flags for normalization.*/
134.1 --- a/src/share/classes/sun/text/normalizer/Trie.java Thu Apr 16 17:42:00 2009 +0100
134.2 +++ b/src/share/classes/sun/text/normalizer/Trie.java Thu Apr 16 19:10:32 2009 -0700
134.3 @@ -1,5 +1,5 @@
134.4 /*
134.5 - * Portions Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
134.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
134.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
134.8 *
134.9 * This code is free software; you can redistribute it and/or modify it
134.10 @@ -22,10 +22,9 @@
134.11 * CA 95054 USA or visit www.sun.com if you need additional information or
134.12 * have any questions.
134.13 */
134.14 -
134.15 /*
134.16 *******************************************************************************
134.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
134.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
134.19 * *
134.20 * The original version of this source code and documentation is copyrighted *
134.21 * and owned by IBM, These materials are provided under terms of a License *
134.22 @@ -37,10 +36,9 @@
134.23
134.24 package sun.text.normalizer;
134.25
134.26 +import java.io.DataInputStream;
134.27 import java.io.InputStream;
134.28 -import java.io.DataInputStream;
134.29 import java.io.IOException;
134.30 -import java.util.Arrays;
134.31
134.32 /**
134.33 * <p>A trie is a kind of compressed, serializable table of values
134.34 @@ -81,7 +79,6 @@
134.35 * This interface specifies methods to be implemented in order for
134.36 * com.ibm.impl.Trie, to surrogate offset information encapsulated within
134.37 * the data.
134.38 - * @draft 2.1
134.39 */
134.40 public static interface DataManipulate
134.41 {
134.42 @@ -92,11 +89,17 @@
134.43 * @param value data value for a surrogate from the trie, including the
134.44 * folding offset
134.45 * @return data offset or 0 if there is no data for the lead surrogate
134.46 - * @draft 2.1
134.47 */
134.48 public int getFoldingOffset(int value);
134.49 }
134.50
134.51 + // default implementation
134.52 + private static class DefaultGetFoldingOffset implements DataManipulate {
134.53 + public int getFoldingOffset(int value) {
134.54 + return value;
134.55 + }
134.56 + }
134.57 +
134.58 // protected constructor -------------------------------------------
134.59
134.60 /**
134.61 @@ -107,7 +110,6 @@
134.62 * trie data
134.63 * @throws IOException thrown when input stream does not have the
134.64 * right header.
134.65 - * @draft 2.1
134.66 */
134.67 protected Trie(InputStream inputStream,
134.68 DataManipulate dataManipulate) throws IOException
134.69 @@ -121,7 +123,11 @@
134.70 throw new IllegalArgumentException("ICU data file error: Trie header authentication failed, please check if you have the most updated ICU data file");
134.71 }
134.72
134.73 - m_dataManipulate_ = dataManipulate;
134.74 + if(dataManipulate != null) {
134.75 + m_dataManipulate_ = dataManipulate;
134.76 + } else {
134.77 + m_dataManipulate_ = new DefaultGetFoldingOffset();
134.78 + }
134.79 m_isLatin1Linear_ = (m_options_ &
134.80 HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_) != 0;
134.81 m_dataOffset_ = input.readInt();
134.82 @@ -135,19 +141,21 @@
134.83 * @param options used by the trie
134.84 * @param dataManipulate object containing the information to parse the
134.85 * trie data
134.86 - * @draft 2.2
134.87 */
134.88 protected Trie(char index[], int options, DataManipulate dataManipulate)
134.89 {
134.90 m_options_ = options;
134.91 - m_dataManipulate_ = dataManipulate;
134.92 + if(dataManipulate != null) {
134.93 + m_dataManipulate_ = dataManipulate;
134.94 + } else {
134.95 + m_dataManipulate_ = new DefaultGetFoldingOffset();
134.96 + }
134.97 m_isLatin1Linear_ = (m_options_ &
134.98 HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_) != 0;
134.99 m_index_ = index;
134.100 m_dataOffset_ = m_index_.length;
134.101 }
134.102
134.103 -
134.104 // protected data members ------------------------------------------
134.105
134.106 /**
134.107 @@ -158,7 +166,6 @@
134.108 protected static final int LEAD_INDEX_OFFSET_ = 0x2800 >> 5;
134.109 /**
134.110 * Shift size for shifting right the input index. 1..9
134.111 - * @draft 2.1
134.112 */
134.113 protected static final int INDEX_STAGE_1_SHIFT_ = 5;
134.114 /**
134.115 @@ -168,31 +175,39 @@
134.116 * This requires blocks of stage 2 data to be aligned by
134.117 * DATA_GRANULARITY.
134.118 * 0..INDEX_STAGE_1_SHIFT
134.119 - * @draft 2.1
134.120 */
134.121 protected static final int INDEX_STAGE_2_SHIFT_ = 2;
134.122 /**
134.123 + * Number of data values in a stage 2 (data array) block.
134.124 + */
134.125 + protected static final int DATA_BLOCK_LENGTH=1<<INDEX_STAGE_1_SHIFT_;
134.126 + /**
134.127 * Mask for getting the lower bits from the input index.
134.128 - * DATA_BLOCK_LENGTH_ - 1.
134.129 - * @draft 2.1
134.130 + * DATA_BLOCK_LENGTH - 1.
134.131 */
134.132 - protected static final int INDEX_STAGE_3_MASK_ =
134.133 - (1 << INDEX_STAGE_1_SHIFT_) - 1;
134.134 + protected static final int INDEX_STAGE_3_MASK_ = DATA_BLOCK_LENGTH - 1;
134.135 + /** Number of bits of a trail surrogate that are used in index table lookups. */
134.136 + protected static final int SURROGATE_BLOCK_BITS=10-INDEX_STAGE_1_SHIFT_;
134.137 + /**
134.138 + * Number of index (stage 1) entries per lead surrogate.
134.139 + * Same as number of index entries for 1024 trail surrogates,
134.140 + * ==0x400>>INDEX_STAGE_1_SHIFT_
134.141 + */
134.142 + protected static final int SURROGATE_BLOCK_COUNT=(1<<SURROGATE_BLOCK_BITS);
134.143 + /** Length of the BMP portion of the index (stage 1) array. */
134.144 + protected static final int BMP_INDEX_LENGTH=0x10000>>INDEX_STAGE_1_SHIFT_;
134.145 /**
134.146 * Surrogate mask to use when shifting offset to retrieve supplementary
134.147 * values
134.148 - * @draft 2.1
134.149 */
134.150 protected static final int SURROGATE_MASK_ = 0x3FF;
134.151 /**
134.152 * Index or UTF16 characters
134.153 - * @draft 2.1
134.154 */
134.155 protected char m_index_[];
134.156 /**
134.157 * Internal TrieValue which handles the parsing of the data value.
134.158 * This class is to be implemented by the user
134.159 - * @draft 2.1
134.160 */
134.161 protected DataManipulate m_dataManipulate_;
134.162 /**
134.163 @@ -200,7 +215,6 @@
134.164 * index and data into a char array, so this is used to indicate the
134.165 * initial offset to the data portion.
134.166 * Note this index always points to the initial value.
134.167 - * @draft 2.1
134.168 */
134.169 protected int m_dataOffset_;
134.170 /**
134.171 @@ -215,7 +229,6 @@
134.172 * @param lead lead surrogate
134.173 * @param trail trailing surrogate
134.174 * @return offset to data
134.175 - * @draft 2.1
134.176 */
134.177 protected abstract int getSurrogateOffset(char lead, char trail);
134.178
134.179 @@ -223,14 +236,12 @@
134.180 * Gets the value at the argument index
134.181 * @param index value at index will be retrieved
134.182 * @return 32 bit value
134.183 - * @draft 2.1
134.184 */
134.185 protected abstract int getValue(int index);
134.186
134.187 /**
134.188 * Gets the default initial value
134.189 * @return 32 bit value
134.190 - * @draft 2.1
134.191 */
134.192 protected abstract int getInitialValue();
134.193
134.194 @@ -247,7 +258,6 @@
134.195 * @param offset index offset which ch is to start from
134.196 * @param ch index to be used after offset
134.197 * @return offset to the data
134.198 - * @draft 2.1
134.199 */
134.200 protected final int getRawOffset(int offset, char ch)
134.201 {
134.202 @@ -261,7 +271,6 @@
134.203 * Treats a lead surrogate as a normal code point.
134.204 * @param ch BMP character
134.205 * @return offset to data
134.206 - * @draft 2.1
134.207 */
134.208 protected final int getBMPOffset(char ch)
134.209 {
134.210 @@ -279,7 +288,6 @@
134.211 * the next trailing surrogate character.
134.212 * @param ch lead surrogate character
134.213 * @return offset to data
134.214 - * @draft 2.1
134.215 */
134.216 protected final int getLeadOffset(char ch)
134.217 {
134.218 @@ -293,26 +301,27 @@
134.219 * Gets the offset to data which the codepoint points to
134.220 * @param ch codepoint
134.221 * @return offset to data
134.222 - * @draft 2.1
134.223 */
134.224 protected final int getCodePointOffset(int ch)
134.225 {
134.226 // if ((ch >> 16) == 0) slower
134.227 - if (ch >= UTF16.CODEPOINT_MIN_VALUE
134.228 - && ch < UTF16.SUPPLEMENTARY_MIN_VALUE) {
134.229 + if (ch < 0) {
134.230 + return -1;
134.231 + } else if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE) {
134.232 + // fastpath for the part of the BMP below surrogates (D800) where getRawOffset() works
134.233 + return getRawOffset(0, (char)ch);
134.234 + } else if (ch < UTF16.SUPPLEMENTARY_MIN_VALUE) {
134.235 // BMP codepoint
134.236 return getBMPOffset((char)ch);
134.237 - }
134.238 - // for optimization
134.239 - if (ch >= UTF16.CODEPOINT_MIN_VALUE
134.240 - && ch <= UCharacter.MAX_VALUE) {
134.241 + } else if (ch <= UCharacter.MAX_VALUE) {
134.242 // look at the construction of supplementary characters
134.243 // trail forms the ends of it.
134.244 return getSurrogateOffset(UTF16.getLeadSurrogate(ch),
134.245 (char)(ch & SURROGATE_MASK_));
134.246 + } else {
134.247 + // return -1 // if there is an error, in this case we return
134.248 + return -1;
134.249 }
134.250 - // return -1 if there is an error, in this case we return
134.251 - return -1;
134.252 }
134.253
134.254 /**
134.255 @@ -320,7 +329,6 @@
134.256 * <p>This is overwritten by the child classes.
134.257 * @param inputStream input stream containing the trie information
134.258 * @exception IOException thrown when data reading fails.
134.259 - * @draft 2.1
134.260 */
134.261 protected void unserialize(InputStream inputStream) throws IOException
134.262 {
134.263 @@ -335,7 +343,6 @@
134.264 /**
134.265 * Determines if this is a 32 bit trie
134.266 * @return true if options specifies this is a 32 bit trie
134.267 - * @draft 2.1
134.268 */
134.269 protected final boolean isIntTrie()
134.270 {
134.271 @@ -345,7 +352,6 @@
134.272 /**
134.273 * Determines if this is a 16 bit trie
134.274 * @return true if this is a 16 bit trie
134.275 - * @draft 2.1
134.276 */
134.277 protected final boolean isCharTrie()
134.278 {
134.279 @@ -355,39 +361,19 @@
134.280 // private data members --------------------------------------------
134.281
134.282 /**
134.283 - * Signature index
134.284 - */
134.285 - private static final int HEADER_SIGNATURE_INDEX_ = 0;
134.286 - /**
134.287 - * Options index
134.288 - */
134.289 - private static final int HEADER_OPTIONS_INDEX_ = 1 << 1;
134.290 - /**
134.291 - * Index length index
134.292 - */
134.293 - private static final int HEADER_INDEX_LENGTH_INDEX_ = 2 << 1;
134.294 - /**
134.295 - * Data length index
134.296 - */
134.297 - private static final int HEADER_DATA_LENGTH_INDEX_ = 3 << 1;
134.298 - /**
134.299 - * Size of header
134.300 - */
134.301 - private static final int HEADER_LENGTH_ = 4 << 1;
134.302 - /**
134.303 * Latin 1 option mask
134.304 */
134.305 - private static final int HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_ = 0x200;
134.306 + protected static final int HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_ = 0x200;
134.307 /**
134.308 * Constant number to authenticate the byte block
134.309 */
134.310 - private static final int HEADER_SIGNATURE_ = 0x54726965;
134.311 + protected static final int HEADER_SIGNATURE_ = 0x54726965;
134.312 /**
134.313 * Header option formatting
134.314 */
134.315 private static final int HEADER_OPTIONS_SHIFT_MASK_ = 0xF;
134.316 - private static final int HEADER_OPTIONS_INDEX_SHIFT_ = 4;
134.317 - private static final int HEADER_OPTIONS_DATA_IS_32_BIT_ = 0x100;
134.318 + protected static final int HEADER_OPTIONS_INDEX_SHIFT_ = 4;
134.319 + protected static final int HEADER_OPTIONS_DATA_IS_32_BIT_ = 0x100;
134.320
134.321 /**
134.322 * Flag indicator for Latin quick access data block
134.323 @@ -409,9 +395,8 @@
134.324 /**
134.325 * Authenticates raw data header.
134.326 * Checking the header information, signature and options.
134.327 - * @param rawdata array of char data to be checked
134.328 + * @param signature This contains the options and type of a Trie
134.329 * @return true if the header is authenticated valid
134.330 - * @draft 2.1
134.331 */
134.332 private final boolean checkHeader(int signature)
134.333 {
135.1 --- a/src/share/classes/sun/text/normalizer/TrieIterator.java Thu Apr 16 17:42:00 2009 +0100
135.2 +++ b/src/share/classes/sun/text/normalizer/TrieIterator.java Thu Apr 16 19:10:32 2009 -0700
135.3 @@ -1,5 +1,5 @@
135.4 /*
135.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
135.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
135.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
135.8 *
135.9 * This code is free software; you can redistribute it and/or modify it
135.10 @@ -22,10 +22,9 @@
135.11 * CA 95054 USA or visit www.sun.com if you need additional information or
135.12 * have any questions.
135.13 */
135.14 -
135.15 /*
135.16 *******************************************************************************
135.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
135.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
135.19 * *
135.20 * The original version of this source code and documentation is copyrighted *
135.21 * and owned by IBM, These materials are provided under terms of a License *
135.22 @@ -108,15 +107,14 @@
135.23 * @since release 2.1, Jan 17 2002
135.24 */
135.25 public class TrieIterator implements RangeValueIterator
135.26 +{
135.27
135.28 -{
135.29 // public constructor ---------------------------------------------
135.30
135.31 /**
135.32 * TrieEnumeration constructor
135.33 * @param trie to be used
135.34 * @exception IllegalArgumentException throw when argument is null.
135.35 - * @draft 2.1
135.36 */
135.37 public TrieIterator(Trie trie)
135.38 {
135.39 @@ -141,7 +139,6 @@
135.40 * @return true if we are not at the end of the iteration, false otherwise.
135.41 * @exception NoSuchElementException - if no more elements exist.
135.42 * @see com.ibm.icu.util.RangeValueIterator.Element
135.43 - * @draft 2.1
135.44 */
135.45 public final boolean next(Element element)
135.46 {
135.47 @@ -158,7 +155,6 @@
135.48
135.49 /**
135.50 * Resets the iterator to the beginning of the iteration
135.51 - * @draft 2.1
135.52 */
135.53 public final void reset()
135.54 {
135.55 @@ -186,7 +182,6 @@
135.56 * The default function is to return the value as it is.
135.57 * @param value a value from the trie
135.58 * @return extracted value
135.59 - * @draft 2.1
135.60 */
135.61 protected int extract(int value)
135.62 {
135.63 @@ -278,7 +273,6 @@
135.64 * Note, if there are no more iterations, it will never get to here.
135.65 * Blocked out by next().
135.66 * @param element return result object
135.67 - * @draft 2.1
135.68 */
135.69 private final void calculateNextSupplementaryElement(Element element)
135.70 {
135.71 @@ -516,10 +510,6 @@
135.72 */
135.73 private static final int TRAIL_SURROGATE_MIN_VALUE_ = 0xDC00;
135.74 /**
135.75 - * Trail surrogate maximum value
135.76 - */
135.77 - private static final int TRAIL_SURROGATE_MAX_VALUE_ = 0xDFFF;
135.78 - /**
135.79 * Number of trail surrogate
135.80 */
135.81 private static final int TRAIL_SURROGATE_COUNT_ = 0x400;
135.82 @@ -538,11 +528,6 @@
135.83 private static final int DATA_BLOCK_LENGTH_ =
135.84 1 << Trie.INDEX_STAGE_1_SHIFT_;
135.85 /**
135.86 - * Number of codepoints in a stage 2 block
135.87 - */
135.88 - private static final int DATA_BLOCK_SUPPLEMENTARY_LENGTH_ =
135.89 - DATA_BLOCK_LENGTH_ << 10;
135.90 - /**
135.91 * Trie instance
135.92 */
135.93 private Trie m_trie_;
135.94 @@ -560,10 +545,4 @@
135.95 private int m_nextBlock_;
135.96 private int m_nextBlockIndex_;
135.97 private int m_nextTrailIndexOffset_;
135.98 - /**
135.99 - * This is the return result element
135.100 - */
135.101 - private int m_start_;
135.102 - private int m_limit_;
135.103 - private int m_value_;
135.104 }
136.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
136.2 +++ b/src/share/classes/sun/text/normalizer/UBiDiProps.java Thu Apr 16 19:10:32 2009 -0700
136.3 @@ -0,0 +1,179 @@
136.4 +/*
136.5 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
136.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
136.7 + *
136.8 + * This code is free software; you can redistribute it and/or modify it
136.9 + * under the terms of the GNU General Public License version 2 only, as
136.10 + * published by the Free Software Foundation. Sun designates this
136.11 + * particular file as subject to the "Classpath" exception as provided
136.12 + * by Sun in the LICENSE file that accompanied this code.
136.13 + *
136.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
136.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
136.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
136.17 + * version 2 for more details (a copy is included in the LICENSE file that
136.18 + * accompanied this code).
136.19 + *
136.20 + * You should have received a copy of the GNU General Public License version
136.21 + * 2 along with this work; if not, write to the Free Software Foundation,
136.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
136.23 + *
136.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
136.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
136.26 + * have any questions.
136.27 + */
136.28 +/*
136.29 + *******************************************************************************
136.30 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
136.31 + * *
136.32 + * The original version of this source code and documentation is copyrighted *
136.33 + * and owned by IBM, These materials are provided under terms of a License *
136.34 + * Agreement between IBM and Sun. This technology is protected by multiple *
136.35 + * US and International patents. This notice and attribution to IBM may not *
136.36 + * to removed. *
136.37 + *******************************************************************************
136.38 +* file name: UBiDiProps.java
136.39 +* encoding: US-ASCII
136.40 +* tab size: 8 (not used)
136.41 +* indentation:4
136.42 +*
136.43 +* created on: 2005jan16
136.44 +* created by: Markus W. Scherer
136.45 +*
136.46 +* Low-level Unicode bidi/shaping properties access.
136.47 +* Java port of ubidi_props.h/.c.
136.48 +*/
136.49 +
136.50 +package sun.text.normalizer;
136.51 +
136.52 +import java.io.BufferedInputStream;
136.53 +import java.io.DataInputStream;
136.54 +import java.io.InputStream;
136.55 +import java.io.IOException;
136.56 +
136.57 +public final class UBiDiProps {
136.58 + // constructors etc. --------------------------------------------------- ***
136.59 +
136.60 + // port of ubidi_openProps()
136.61 + public UBiDiProps() throws IOException{
136.62 + InputStream is=ICUData.getStream(DATA_FILE_NAME);
136.63 + BufferedInputStream b=new BufferedInputStream(is, 4096 /* data buffer size */);
136.64 + readData(b);
136.65 + b.close();
136.66 + is.close();
136.67 +
136.68 + }
136.69 +
136.70 + private void readData(InputStream is) throws IOException {
136.71 + DataInputStream inputStream=new DataInputStream(is);
136.72 +
136.73 + // read the header
136.74 + ICUBinary.readHeader(inputStream, FMT, new IsAcceptable());
136.75 +
136.76 + // read indexes[]
136.77 + int i, count;
136.78 + count=inputStream.readInt();
136.79 + if(count<IX_INDEX_TOP) {
136.80 + throw new IOException("indexes[0] too small in "+DATA_FILE_NAME);
136.81 + }
136.82 + indexes=new int[count];
136.83 +
136.84 + indexes[0]=count;
136.85 + for(i=1; i<count; ++i) {
136.86 + indexes[i]=inputStream.readInt();
136.87 + }
136.88 +
136.89 + // read the trie
136.90 + trie=new CharTrie(inputStream, null);
136.91 +
136.92 + // read mirrors[]
136.93 + count=indexes[IX_MIRROR_LENGTH];
136.94 + if(count>0) {
136.95 + mirrors=new int[count];
136.96 + for(i=0; i<count; ++i) {
136.97 + mirrors[i]=inputStream.readInt();
136.98 + }
136.99 + }
136.100 +
136.101 + // read jgArray[]
136.102 + count=indexes[IX_JG_LIMIT]-indexes[IX_JG_START];
136.103 + jgArray=new byte[count];
136.104 + for(i=0; i<count; ++i) {
136.105 + jgArray[i]=inputStream.readByte();
136.106 + }
136.107 + }
136.108 +
136.109 + // implement ICUBinary.Authenticate
136.110 + private final class IsAcceptable implements ICUBinary.Authenticate {
136.111 + public boolean isDataVersionAcceptable(byte version[]) {
136.112 + return version[0]==1 &&
136.113 + version[2]==Trie.INDEX_STAGE_1_SHIFT_ && version[3]==Trie.INDEX_STAGE_2_SHIFT_;
136.114 + }
136.115 + }
136.116 +
136.117 + // UBiDiProps singleton
136.118 + private static UBiDiProps gBdp=null;
136.119 +
136.120 + // port of ubidi_getSingleton()
136.121 + public static final synchronized UBiDiProps getSingleton() throws IOException {
136.122 + if(gBdp==null) {
136.123 + gBdp=new UBiDiProps();
136.124 + }
136.125 + return gBdp;
136.126 + }
136.127 +
136.128 + // UBiDiProps dummy singleton
136.129 + private static UBiDiProps gBdpDummy=null;
136.130 +
136.131 + private UBiDiProps(boolean makeDummy) { // ignore makeDummy, only creates a unique signature
136.132 + indexes=new int[IX_TOP];
136.133 + indexes[0]=IX_TOP;
136.134 + trie=new CharTrie(0, 0, null); // dummy trie, always returns 0
136.135 + }
136.136 +
136.137 + /**
136.138 + * Get a singleton dummy object, one that works with no real data.
136.139 + * This can be used when the real data is not available.
136.140 + * Using the dummy can reduce checks for available data after an initial failure.
136.141 + * Port of ucase_getDummy().
136.142 + */
136.143 + public static final synchronized UBiDiProps getDummy() {
136.144 + if(gBdpDummy==null) {
136.145 + gBdpDummy=new UBiDiProps(true);
136.146 + }
136.147 + return gBdpDummy;
136.148 + }
136.149 +
136.150 + public final int getClass(int c) {
136.151 + return getClassFromProps(trie.getCodePointValue(c));
136.152 + }
136.153 +
136.154 + // data members -------------------------------------------------------- ***
136.155 + private int indexes[];
136.156 + private int mirrors[];
136.157 + private byte jgArray[];
136.158 +
136.159 + private CharTrie trie;
136.160 +
136.161 + // data format constants ----------------------------------------------- ***
136.162 + private static final String DATA_FILE_NAME = "/sun/text/resources/ubidi.icu";
136.163 +
136.164 + /* format "BiDi" */
136.165 + private static final byte FMT[]={ 0x42, 0x69, 0x44, 0x69 };
136.166 +
136.167 + /* indexes into indexes[] */
136.168 + private static final int IX_INDEX_TOP=0;
136.169 + private static final int IX_MIRROR_LENGTH=3;
136.170 +
136.171 + private static final int IX_JG_START=4;
136.172 + private static final int IX_JG_LIMIT=5;
136.173 +
136.174 + private static final int IX_TOP=16;
136.175 +
136.176 + private static final int CLASS_MASK= 0x0000001f;
136.177 +
136.178 + private static final int getClassFromProps(int props) {
136.179 + return props&CLASS_MASK;
136.180 + }
136.181 +
136.182 +}
137.1 --- a/src/share/classes/sun/text/normalizer/UCharacter.java Thu Apr 16 17:42:00 2009 +0100
137.2 +++ b/src/share/classes/sun/text/normalizer/UCharacter.java Thu Apr 16 19:10:32 2009 -0700
137.3 @@ -1,5 +1,5 @@
137.4 /*
137.5 - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
137.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
137.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
137.8 *
137.9 * This code is free software; you can redistribute it and/or modify it
137.10 @@ -24,7 +24,7 @@
137.11 */
137.12 /*
137.13 *******************************************************************************
137.14 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
137.15 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
137.16 * *
137.17 * The original version of this source code and documentation is copyrighted *
137.18 * and owned by IBM, These materials are provided under terms of a License *
137.19 @@ -36,19 +36,18 @@
137.20
137.21 package sun.text.normalizer;
137.22
137.23 -import java.lang.ref.SoftReference;
137.24 -import java.util.HashMap;
137.25 -import java.util.Locale;
137.26 -import java.util.Map;
137.27 +import java.io.IOException;
137.28 +import java.util.MissingResourceException;
137.29
137.30 /**
137.31 * <p>
137.32 * The UCharacter class provides extensions to the
137.33 - * <a href=http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.html>
137.34 + * <a href="http://java.sun.com/j2se/1.5/docs/api/java/lang/Character.html">
137.35 * java.lang.Character</a> class. These extensions provide support for
137.36 - * Unicode 3.2 properties and together with the <a href=../text/UTF16.html>UTF16</a>
137.37 + * more Unicode properties and together with the <a href=../text/UTF16.html>UTF16</a>
137.38 * class, provide support for supplementary characters (those with code
137.39 * points above U+FFFF).
137.40 + * Each ICU release supports the latest version of Unicode available at that time.
137.41 * </p>
137.42 * <p>
137.43 * Code points are represented in these API using ints. While it would be
137.44 @@ -67,7 +66,7 @@
137.45 * <i>$ICU4J_CLASS/com.ibm.icu.impl.data</i>.
137.46 * </p>
137.47 * <p>
137.48 - * Aside from the additions for UTF-16 support, and the updated Unicode 3.1
137.49 + * Aside from the additions for UTF-16 support, and the updated Unicode
137.50 * properties, the main differences between UCharacter and Character are:
137.51 * <ul>
137.52 * <li> UCharacter is not designed to be a char wrapper and does not have
137.53 @@ -77,7 +76,7 @@
137.54 * <li> char charValue(),
137.55 * <li> int compareTo(java.lang.Character, java.lang.Character), etc.
137.56 * </ul>
137.57 - * <li> UCharacter does not include Character APIs that are deprecated, not
137.58 + * <li> UCharacter does not include Character APIs that are deprecated, nor
137.59 * does it include the Java-specific character information, such as
137.60 * boolean isJavaIdentifierPart(char ch).
137.61 * <li> Character maps characters 'A' - 'Z' and 'a' - 'z' to the numeric
137.62 @@ -89,10 +88,75 @@
137.63 * </ul>
137.64 * <p>
137.65 * Further detail differences can be determined from the program
137.66 - * <a href = http://oss.software.ibm.com/developerworks/opensource/cvs/icu4j/~checkout~/icu4j/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java>
137.67 + * <a href="http://source.icu-project.org/repos/icu/icu4j/trunk/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java">
137.68 * com.ibm.icu.dev.test.lang.UCharacterCompare</a>
137.69 * </p>
137.70 * <p>
137.71 + * In addition to Java compatibility functions, which calculate derived properties,
137.72 + * this API provides low-level access to the Unicode Character Database.
137.73 + * </p>
137.74 + * <p>
137.75 + * Unicode assigns each code point (not just assigned character) values for
137.76 + * many properties.
137.77 + * Most of them are simple boolean flags, or constants from a small enumerated list.
137.78 + * For some properties, values are strings or other relatively more complex types.
137.79 + * </p>
137.80 + * <p>
137.81 + * For more information see
137.82 + * "About the Unicode Character Database" (http://www.unicode.org/ucd/)
137.83 + * and the ICU User Guide chapter on Properties (http://www.icu-project.org/userguide/properties.html).
137.84 + * </p>
137.85 + * <p>
137.86 + * There are also functions that provide easy migration from C/POSIX functions
137.87 + * like isblank(). Their use is generally discouraged because the C/POSIX
137.88 + * standards do not define their semantics beyond the ASCII range, which means
137.89 + * that different implementations exhibit very different behavior.
137.90 + * Instead, Unicode properties should be used directly.
137.91 + * </p>
137.92 + * <p>
137.93 + * There are also only a few, broad C/POSIX character classes, and they tend
137.94 + * to be used for conflicting purposes. For example, the "isalpha()" class
137.95 + * is sometimes used to determine word boundaries, while a more sophisticated
137.96 + * approach would at least distinguish initial letters from continuation
137.97 + * characters (the latter including combining marks).
137.98 + * (In ICU, BreakIterator is the most sophisticated API for word boundaries.)
137.99 + * Another example: There is no "istitle()" class for titlecase characters.
137.100 + * </p>
137.101 + * <p>
137.102 + * ICU 3.4 and later provides API access for all twelve C/POSIX character classes.
137.103 + * ICU implements them according to the Standard Recommendations in
137.104 + * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions
137.105 + * (http://www.unicode.org/reports/tr18/#Compatibility_Properties).
137.106 + * </p>
137.107 + * <p>
137.108 + * API access for C/POSIX character classes is as follows:
137.109 + * - alpha: isUAlphabetic(c) or hasBinaryProperty(c, UProperty.ALPHABETIC)
137.110 + * - lower: isULowercase(c) or hasBinaryProperty(c, UProperty.LOWERCASE)
137.111 + * - upper: isUUppercase(c) or hasBinaryProperty(c, UProperty.UPPERCASE)
137.112 + * - punct: ((1<<getType(c)) & ((1<<DASH_PUNCTUATION)|(1<<START_PUNCTUATION)|(1<<END_PUNCTUATION)|(1<<CONNECTOR_PUNCTUATION)|(1<<OTHER_PUNCTUATION)|(1<<INITIAL_PUNCTUATION)|(1<<FINAL_PUNCTUATION)))!=0
137.113 + * - digit: isDigit(c) or getType(c)==DECIMAL_DIGIT_NUMBER
137.114 + * - xdigit: hasBinaryProperty(c, UProperty.POSIX_XDIGIT)
137.115 + * - alnum: hasBinaryProperty(c, UProperty.POSIX_ALNUM)
137.116 + * - space: isUWhiteSpace(c) or hasBinaryProperty(c, UProperty.WHITE_SPACE)
137.117 + * - blank: hasBinaryProperty(c, UProperty.POSIX_BLANK)
137.118 + * - cntrl: getType(c)==CONTROL
137.119 + * - graph: hasBinaryProperty(c, UProperty.POSIX_GRAPH)
137.120 + * - print: hasBinaryProperty(c, UProperty.POSIX_PRINT)
137.121 + * </p>
137.122 + * <p>
137.123 + * The C/POSIX character classes are also available in UnicodeSet patterns,
137.124 + * using patterns like [:graph:] or \p{graph}.
137.125 + * </p>
137.126 + * <p>
137.127 + * Note: There are several ICU (and Java) whitespace functions.
137.128 + * Comparison:
137.129 + * - isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property;
137.130 + * most of general categories "Z" (separators) + most whitespace ISO controls
137.131 + * (including no-break spaces, but excluding IS1..IS4 and ZWSP)
137.132 + * - isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces
137.133 + * - isSpaceChar: just Z (including no-break spaces)
137.134 + * </p>
137.135 + * <p>
137.136 * This class is not subclassable
137.137 * </p>
137.138 * @author Syn Wee Quek
137.139 @@ -113,92 +177,7 @@
137.140 /**
137.141 * @stable ICU 2.4
137.142 */
137.143 - public static final int NONE = 0;
137.144 - /**
137.145 - * @stable ICU 2.4
137.146 - */
137.147 public static final int DECIMAL = 1;
137.148 - /**
137.149 - * @stable ICU 2.4
137.150 - */
137.151 - public static final int DIGIT = 2;
137.152 - /**
137.153 - * @stable ICU 2.4
137.154 - */
137.155 - public static final int NUMERIC = 3;
137.156 - /**
137.157 - * @stable ICU 2.4
137.158 - */
137.159 - public static final int COUNT = 4;
137.160 - }
137.161 -
137.162 - /**
137.163 - * Hangul Syllable Type constants.
137.164 - *
137.165 - * @see UProperty#HANGUL_SYLLABLE_TYPE
137.166 - * @stable ICU 2.6
137.167 - */
137.168 - public static interface HangulSyllableType
137.169 - {
137.170 - /**
137.171 - * @stable ICU 2.6
137.172 - */
137.173 - public static final int NOT_APPLICABLE = 0; /*[NA]*/ /*See note !!*/
137.174 - /**
137.175 - * @stable ICU 2.6
137.176 - */
137.177 - public static final int LEADING_JAMO = 1; /*[L]*/
137.178 - /**
137.179 - * @stable ICU 2.6
137.180 - */
137.181 - public static final int VOWEL_JAMO = 2; /*[V]*/
137.182 - /**
137.183 - * @stable ICU 2.6
137.184 - */
137.185 - public static final int TRAILING_JAMO = 3; /*[T]*/
137.186 - /**
137.187 - * @stable ICU 2.6
137.188 - */
137.189 - public static final int LV_SYLLABLE = 4; /*[LV]*/
137.190 - /**
137.191 - * @stable ICU 2.6
137.192 - */
137.193 - public static final int LVT_SYLLABLE = 5; /*[LVT]*/
137.194 - /**
137.195 - * @stable ICU 2.6
137.196 - */
137.197 - public static final int COUNT = 6;
137.198 - }
137.199 -
137.200 - /**
137.201 - * [Sun] This interface moved from UCharacterEnums.java.
137.202 - *
137.203 - * 'Enum' for the CharacterCategory constants. These constants are
137.204 - * compatible in name <b>but not in value</b> with those defined in
137.205 - * <code>java.lang.Character</code>.
137.206 - * @see UCharacterCategory
137.207 - * @draft ICU 3.0
137.208 - * @deprecated This is a draft API and might change in a future release of ICU.
137.209 - */
137.210 - public static interface ECharacterCategory
137.211 - {
137.212 - /**
137.213 - * Character type Lu
137.214 - * @stable ICU 2.1
137.215 - */
137.216 - public static final int UPPERCASE_LETTER = 1;
137.217 -
137.218 - /**
137.219 - * Character type Lt
137.220 - * @stable ICU 2.1
137.221 - */
137.222 - public static final int TITLECASE_LETTER = 3;
137.223 -
137.224 - /**
137.225 - * Character type Lo
137.226 - * @stable ICU 2.1
137.227 - */
137.228 - public static final int OTHER_LETTER = 5;
137.229 }
137.230
137.231 // public data members -----------------------------------------------
137.232 @@ -225,14 +204,6 @@
137.233 public static final int SUPPLEMENTARY_MIN_VALUE =
137.234 UTF16.SUPPLEMENTARY_MIN_VALUE;
137.235
137.236 - /**
137.237 - * Special value that is returned by getUnicodeNumericValue(int) when no
137.238 - * numeric value is defined for a code point.
137.239 - * @stable ICU 2.4
137.240 - * @see #getUnicodeNumericValue
137.241 - */
137.242 - public static final double NO_NUMERIC_VALUE = -123456789;
137.243 -
137.244 // public methods ----------------------------------------------------
137.245
137.246 /**
137.247 @@ -262,161 +233,16 @@
137.248 {
137.249 // when ch is out of bounds getProperty == 0
137.250 int props = getProperty(ch);
137.251 - if (getNumericType(props) != NumericType.DECIMAL) {
137.252 - return (radix <= 10) ? -1 : getEuropeanDigit(ch);
137.253 + int value;
137.254 + if (getNumericType(props) == NumericType.DECIMAL) {
137.255 + value = UCharacterProperty.getUnsignedValue(props);
137.256 + } else {
137.257 + value = getEuropeanDigit(ch);
137.258 }
137.259 - // if props == 0, it will just fall through and return -1
137.260 - if (isNotExceptionIndicator(props)) {
137.261 - // not contained in exception data
137.262 - // getSignedValue is just shifting so we can check for the sign
137.263 - // first
137.264 - // Optimization
137.265 - // int result = UCharacterProperty.getSignedValue(props);
137.266 - // if (result >= 0) {
137.267 - // return result;
137.268 - // }
137.269 - if (props >= 0) {
137.270 - return UCharacterProperty.getSignedValue(props);
137.271 - }
137.272 - }
137.273 - else {
137.274 - int index = UCharacterProperty.getExceptionIndex(props);
137.275 - if (PROPERTY_.hasExceptionValue(index,
137.276 - UCharacterProperty.EXC_NUMERIC_VALUE_)) {
137.277 - int result = PROPERTY_.getException(index,
137.278 - UCharacterProperty.EXC_NUMERIC_VALUE_);
137.279 - if (result >= 0) {
137.280 - return result;
137.281 - }
137.282 - }
137.283 - }
137.284 -
137.285 - if (radix > 10) {
137.286 - int result = getEuropeanDigit(ch);
137.287 - if (result >= 0 && result < radix) {
137.288 - return result;
137.289 - }
137.290 - }
137.291 - return -1;
137.292 + return (0 <= value && value < radix) ? value : -1;
137.293 }
137.294
137.295 /**
137.296 - * <p>Get the numeric value for a Unicode code point as defined in the
137.297 - * Unicode Character Database.</p>
137.298 - * <p>A "double" return type is necessary because some numeric values are
137.299 - * fractions, negative, or too large for int.</p>
137.300 - * <p>For characters without any numeric values in the Unicode Character
137.301 - * Database, this function will return NO_NUMERIC_VALUE.</p>
137.302 - * <p><em>API Change:</em> In release 2.2 and prior, this API has a
137.303 - * return type int and returns -1 when the argument ch does not have a
137.304 - * corresponding numeric value. This has been changed to synch with ICU4C
137.305 - * </p>
137.306 - * This corresponds to the ICU4C function u_getNumericValue.
137.307 - * @param ch Code point to get the numeric value for.
137.308 - * @return numeric value of ch, or NO_NUMERIC_VALUE if none is defined.
137.309 - * @stable ICU 2.4
137.310 - */
137.311 - public static double getUnicodeNumericValue(int ch)
137.312 - {
137.313 - // equivalent to c version double u_getNumericValue(UChar32 c)
137.314 - int props = PROPERTY_.getProperty(ch);
137.315 - int numericType = getNumericType(props);
137.316 - if (numericType > NumericType.NONE && numericType < NumericType.COUNT) {
137.317 - if (isNotExceptionIndicator(props)) {
137.318 - return UCharacterProperty.getSignedValue(props);
137.319 - }
137.320 - else {
137.321 - int index = UCharacterProperty.getExceptionIndex(props);
137.322 - boolean nex = false;
137.323 - boolean dex = false;
137.324 - double numerator = 0;
137.325 - if (PROPERTY_.hasExceptionValue(index,
137.326 - UCharacterProperty.EXC_NUMERIC_VALUE_)) {
137.327 - int num = PROPERTY_.getException(index,
137.328 - UCharacterProperty.EXC_NUMERIC_VALUE_);
137.329 - // There are special values for huge numbers that are
137.330 - // powers of ten. genprops/store.c documents:
137.331 - // if numericValue = 0x7fffff00 + x then
137.332 - // numericValue = 10 ^ x
137.333 - if (num >= NUMERATOR_POWER_LIMIT_) {
137.334 - num &= 0xff;
137.335 - // 10^x without math.h
137.336 - numerator = Math.pow(10, num);
137.337 - }
137.338 - else {
137.339 - numerator = num;
137.340 - }
137.341 - nex = true;
137.342 - }
137.343 - double denominator = 0;
137.344 - if (PROPERTY_.hasExceptionValue(index,
137.345 - UCharacterProperty.EXC_DENOMINATOR_VALUE_)) {
137.346 - denominator = PROPERTY_.getException(index,
137.347 - UCharacterProperty.EXC_DENOMINATOR_VALUE_);
137.348 - // faster path not in c
137.349 - if (numerator != 0) {
137.350 - return numerator / denominator;
137.351 - }
137.352 - dex = true;
137.353 - }
137.354 -
137.355 - if (nex) {
137.356 - if (dex) {
137.357 - return numerator / denominator;
137.358 - }
137.359 - return numerator;
137.360 - }
137.361 - if (dex) {
137.362 - return 1 / denominator;
137.363 - }
137.364 - }
137.365 - }
137.366 - return NO_NUMERIC_VALUE;
137.367 - }
137.368 -
137.369 - /**
137.370 - * Returns a value indicating a code point's Unicode category.
137.371 - * Up-to-date Unicode implementation of java.lang.Character.getType()
137.372 - * except for the above mentioned code points that had their category
137.373 - * changed.<br>
137.374 - * Return results are constants from the interface
137.375 - * <a href=UCharacterCategory.html>UCharacterCategory</a><br>
137.376 - * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with
137.377 - * those returned by java.lang.Character.getType. UCharacterCategory values
137.378 - * match the ones used in ICU4C, while java.lang.Character type
137.379 - * values, though similar, skip the value 17.</p>
137.380 - * @param ch code point whose type is to be determined
137.381 - * @return category which is a value of UCharacterCategory
137.382 - * @stable ICU 2.1
137.383 - */
137.384 - public static int getType(int ch)
137.385 - {
137.386 - return getProperty(ch) & UCharacterProperty.TYPE_MASK;
137.387 - }
137.388 -
137.389 - //// for StringPrep
137.390 - /**
137.391 - * Returns a code point corresponding to the two UTF16 characters.
137.392 - * @param lead the lead char
137.393 - * @param trail the trail char
137.394 - * @return code point if surrogate characters are valid.
137.395 - * @exception IllegalArgumentException thrown when argument characters do
137.396 - * not form a valid codepoint
137.397 - * @stable ICU 2.1
137.398 - */
137.399 - public static int getCodePoint(char lead, char trail)
137.400 - {
137.401 - if (lead >= UTF16.LEAD_SURROGATE_MIN_VALUE &&
137.402 - lead <= UTF16.LEAD_SURROGATE_MAX_VALUE &&
137.403 - trail >= UTF16.TRAIL_SURROGATE_MIN_VALUE &&
137.404 - trail <= UTF16.TRAIL_SURROGATE_MAX_VALUE) {
137.405 - return UCharacterProperty.getRawSupplementary(lead, trail);
137.406 - }
137.407 - throw new IllegalArgumentException("Illegal surrogate characters");
137.408 - }
137.409 -
137.410 - //// for StringPrep
137.411 - /**
137.412 * Returns the Bidirection property of a code point.
137.413 * For example, 0x0041 (letter A) has the LEFT_TO_RIGHT directional
137.414 * property.<br>
137.415 @@ -428,111 +254,24 @@
137.416 */
137.417 public static int getDirection(int ch)
137.418 {
137.419 - // when ch is out of bounds getProperty == 0
137.420 - return (getProperty(ch) >> BIDI_SHIFT_) & BIDI_MASK_AFTER_SHIFT_;
137.421 + return gBdp.getClass(ch);
137.422 }
137.423
137.424 /**
137.425 - * The given string is mapped to its case folding equivalent according to
137.426 - * UnicodeData.txt and CaseFolding.txt; if any character has no case
137.427 - * folding equivalent, the character itself is returned.
137.428 - * "Full", multiple-code point case folding mappings are returned here.
137.429 - * For "simple" single-code point mappings use the API
137.430 - * foldCase(int ch, boolean defaultmapping).
137.431 - * @param str the String to be converted
137.432 - * @param defaultmapping Indicates if all mappings defined in
137.433 - * CaseFolding.txt is to be used, otherwise the
137.434 - * mappings for dotted I and dotless i marked with
137.435 - * 'I' in CaseFolding.txt will be skipped.
137.436 - * @return the case folding equivalent of the character, if
137.437 - * any; otherwise the character itself.
137.438 - * @see #foldCase(int, boolean)
137.439 + * Returns a code point corresponding to the two UTF16 characters.
137.440 + * @param lead the lead char
137.441 + * @param trail the trail char
137.442 + * @return code point if surrogate characters are valid.
137.443 + * @exception IllegalArgumentException thrown when argument characters do
137.444 + * not form a valid codepoint
137.445 * @stable ICU 2.1
137.446 */
137.447 - public static String foldCase(String str, boolean defaultmapping)
137.448 + public static int getCodePoint(char lead, char trail)
137.449 {
137.450 - int size = str.length();
137.451 - StringBuffer result = new StringBuffer(size);
137.452 - int offset = 0;
137.453 - int ch;
137.454 -
137.455 - // case mapping loop
137.456 - while (offset < size) {
137.457 - ch = UTF16.charAt(str, offset);
137.458 - offset += UTF16.getCharCount(ch);
137.459 - int props = PROPERTY_.getProperty(ch);
137.460 - if (isNotExceptionIndicator(props)) {
137.461 - int type = UCharacterProperty.TYPE_MASK & props;
137.462 - if (type == ECharacterCategory.UPPERCASE_LETTER ||
137.463 - type == ECharacterCategory.TITLECASE_LETTER) {
137.464 - ch += UCharacterProperty.getSignedValue(props);
137.465 - }
137.466 - }
137.467 - else {
137.468 - int index = UCharacterProperty.getExceptionIndex(props);
137.469 - if (PROPERTY_.hasExceptionValue(index,
137.470 - UCharacterProperty.EXC_CASE_FOLDING_)) {
137.471 - int exception = PROPERTY_.getException(index,
137.472 - UCharacterProperty.EXC_CASE_FOLDING_);
137.473 - if (exception != 0) {
137.474 - PROPERTY_.getFoldCase(exception & LAST_CHAR_MASK_,
137.475 - exception >> SHIFT_24_, result);
137.476 - }
137.477 - else {
137.478 - // special case folding mappings, hardcoded
137.479 - if (ch != 0x49 && ch != 0x130) {
137.480 - // return ch itself because there is no special
137.481 - // mapping for it
137.482 - UTF16.append(result, ch);
137.483 - continue;
137.484 - }
137.485 - if (defaultmapping) {
137.486 - // default mappings
137.487 - if (ch == 0x49) {
137.488 - // 0049; C; 0069; # LATIN CAPITAL LETTER I
137.489 - result.append(
137.490 - UCharacterProperty.LATIN_SMALL_LETTER_I_);
137.491 - }
137.492 - else if (ch == 0x130) {
137.493 - // 0130; F; 0069 0307;
137.494 - // # LATIN CAPITAL LETTER I WITH DOT ABOVE
137.495 - result.append(
137.496 - UCharacterProperty.LATIN_SMALL_LETTER_I_);
137.497 - result.append((char)0x307);
137.498 - }
137.499 - }
137.500 - else {
137.501 - // Turkic mappings
137.502 - if (ch == 0x49) {
137.503 - // 0049; T; 0131; # LATIN CAPITAL LETTER I
137.504 - result.append((char)0x131);
137.505 - }
137.506 - else if (ch == 0x130) {
137.507 - // 0130; T; 0069;
137.508 - // # LATIN CAPITAL LETTER I WITH DOT ABOVE
137.509 - result.append(
137.510 - UCharacterProperty.LATIN_SMALL_LETTER_I_);
137.511 - }
137.512 - }
137.513 - }
137.514 - // do not fall through to the output of c
137.515 - continue;
137.516 - }
137.517 - else {
137.518 - if (PROPERTY_.hasExceptionValue(index,
137.519 - UCharacterProperty.EXC_LOWERCASE_)) {
137.520 - ch = PROPERTY_.getException(index,
137.521 - UCharacterProperty.EXC_LOWERCASE_);
137.522 - }
137.523 - }
137.524 -
137.525 - }
137.526 -
137.527 - // handle 1:1 code point mappings from UnicodeData.txt
137.528 - UTF16.append(result, ch);
137.529 + if (UTF16.isLeadSurrogate(lead) && UTF16.isTrailSurrogate(trail)) {
137.530 + return UCharacterProperty.getRawSupplementary(lead, trail);
137.531 }
137.532 -
137.533 - return result.toString();
137.534 + throw new IllegalArgumentException("Illegal surrogate characters");
137.535 }
137.536
137.537 /**
137.538 @@ -555,83 +294,6 @@
137.539 return PROPERTY_.getAge(ch);
137.540 }
137.541
137.542 - /**
137.543 - * <p>Gets the property value for an Unicode property type of a code point.
137.544 - * Also returns binary and mask property values.</p>
137.545 - * <p>Unicode, especially in version 3.2, defines many more properties than
137.546 - * the original set in UnicodeData.txt.</p>
137.547 - * <p>The properties APIs are intended to reflect Unicode properties as
137.548 - * defined in the Unicode Character Database (UCD) and Unicode Technical
137.549 - * Reports (UTR). For details about the properties see
137.550 - * http://www.unicode.org/.</p>
137.551 - * <p>For names of Unicode properties see the UCD file PropertyAliases.txt.
137.552 - * </p>
137.553 - * <pre>
137.554 - * Sample usage:
137.555 - * int ea = UCharacter.getIntPropertyValue(c, UProperty.EAST_ASIAN_WIDTH);
137.556 - * int ideo = UCharacter.getIntPropertyValue(c, UProperty.IDEOGRAPHIC);
137.557 - * boolean b = (ideo == 1) ? true : false;
137.558 - * </pre>
137.559 - * @param ch code point to test.
137.560 - * @param type UProperty selector constant, identifies which binary
137.561 - * property to check. Must be
137.562 - * UProperty.BINARY_START <= type < UProperty.BINARY_LIMIT or
137.563 - * UProperty.INT_START <= type < UProperty.INT_LIMIT or
137.564 - * UProperty.MASK_START <= type < UProperty.MASK_LIMIT.
137.565 - * @return numeric value that is directly the property value or,
137.566 - * for enumerated properties, corresponds to the numeric value of
137.567 - * the enumerated constant of the respective property value
137.568 - * enumeration type (cast to enum type if necessary).
137.569 - * Returns 0 or 1 (for false / true) for binary Unicode properties.
137.570 - * Returns a bit-mask for mask properties.
137.571 - * Returns 0 if 'type' is out of bounds or if the Unicode version
137.572 - * does not have data for the property at all, or not for this code
137.573 - * point.
137.574 - * @see UProperty
137.575 - * @see #hasBinaryProperty
137.576 - * @see #getIntPropertyMinValue
137.577 - * @see #getIntPropertyMaxValue
137.578 - * @see #getUnicodeVersion
137.579 - * @stable ICU 2.4
137.580 - */
137.581 - public static int getIntPropertyValue(int ch, int type)
137.582 - {
137.583 - /*
137.584 - * For Normalizer with Unicode 3.2, this method is called only for
137.585 - * HANGUL_SYLLABLE_TYPE in UnicodeSet.addPropertyStarts().
137.586 - */
137.587 - if (type == UProperty.HANGUL_SYLLABLE_TYPE) {
137.588 - /* purely algorithmic; hardcode known characters, check for assigned new ones */
137.589 - if(ch<NormalizerImpl.JAMO_L_BASE) {
137.590 - /* NA */
137.591 - } else if(ch<=0x11ff) {
137.592 - /* Jamo range */
137.593 - if(ch<=0x115f) {
137.594 - /* Jamo L range, HANGUL CHOSEONG ... */
137.595 - if(ch==0x115f || ch<=0x1159 || getType(ch)==ECharacterCategory.OTHER_LETTER) {
137.596 - return HangulSyllableType.LEADING_JAMO;
137.597 - }
137.598 - } else if(ch<=0x11a7) {
137.599 - /* Jamo V range, HANGUL JUNGSEONG ... */
137.600 - if(ch<=0x11a2 || getType(ch)==ECharacterCategory.OTHER_LETTER) {
137.601 - return HangulSyllableType.VOWEL_JAMO;
137.602 - }
137.603 - } else {
137.604 - /* Jamo T range */
137.605 - if(ch<=0x11f9 || getType(ch)==ECharacterCategory.OTHER_LETTER) {
137.606 - return HangulSyllableType.TRAILING_JAMO;
137.607 - }
137.608 - }
137.609 - } else if((ch-=NormalizerImpl.HANGUL_BASE)<0) {
137.610 - /* NA */
137.611 - } else if(ch<NormalizerImpl.HANGUL_COUNT) {
137.612 - /* Hangul syllable */
137.613 - return ch%NormalizerImpl.JAMO_T_COUNT==0 ? HangulSyllableType.LV_SYLLABLE : HangulSyllableType.LVT_SYLLABLE;
137.614 - }
137.615 - }
137.616 - return 0; /* NA */
137.617 - }
137.618 -
137.619 // private variables -------------------------------------------------
137.620
137.621 /**
137.622 @@ -643,143 +305,43 @@
137.623 */
137.624 private static final char[] PROPERTY_TRIE_INDEX_;
137.625 private static final char[] PROPERTY_TRIE_DATA_;
137.626 - private static final int[] PROPERTY_DATA_;
137.627 private static final int PROPERTY_INITIAL_VALUE_;
137.628
137.629 + private static final UBiDiProps gBdp;
137.630 +
137.631 // block to initialise character property database
137.632 static
137.633 {
137.634 try
137.635 {
137.636 - PROPERTY_ = UCharacterProperty.getInstance();
137.637 - PROPERTY_TRIE_INDEX_ = PROPERTY_.m_trieIndex_;
137.638 - PROPERTY_TRIE_DATA_ = PROPERTY_.m_trieData_;
137.639 - PROPERTY_DATA_ = PROPERTY_.m_property_;
137.640 - PROPERTY_INITIAL_VALUE_
137.641 - = PROPERTY_DATA_[PROPERTY_.m_trieInitialValue_];
137.642 + PROPERTY_ = UCharacterProperty.getInstance();
137.643 + PROPERTY_TRIE_INDEX_ = PROPERTY_.m_trieIndex_;
137.644 + PROPERTY_TRIE_DATA_ = PROPERTY_.m_trieData_;
137.645 + PROPERTY_INITIAL_VALUE_ = PROPERTY_.m_trieInitialValue_;
137.646 }
137.647 catch (Exception e)
137.648 {
137.649 - throw new RuntimeException(e.getMessage());
137.650 + throw new MissingResourceException(e.getMessage(),"","");
137.651 }
137.652 +
137.653 + UBiDiProps bdp;
137.654 + try {
137.655 + bdp=UBiDiProps.getSingleton();
137.656 + } catch(IOException e) {
137.657 + bdp=UBiDiProps.getDummy();
137.658 + }
137.659 + gBdp=bdp;
137.660 }
137.661
137.662 /**
137.663 - * To get the last character out from a data type
137.664 - */
137.665 - private static final int LAST_CHAR_MASK_ = 0xFFFF;
137.666 -
137.667 - /**
137.668 - * To get the last byte out from a data type
137.669 - */
137.670 -// private static final int LAST_BYTE_MASK_ = 0xFF;
137.671 -
137.672 - /**
137.673 - * Shift 16 bits
137.674 - */
137.675 -// private static final int SHIFT_16_ = 16;
137.676 -
137.677 - /**
137.678 - * Shift 24 bits
137.679 - */
137.680 - private static final int SHIFT_24_ = 24;
137.681 -
137.682 - /**
137.683 * Shift to get numeric type
137.684 */
137.685 - private static final int NUMERIC_TYPE_SHIFT_ = 12;
137.686 + private static final int NUMERIC_TYPE_SHIFT_ = 5;
137.687 /**
137.688 * Mask to get numeric type
137.689 */
137.690 private static final int NUMERIC_TYPE_MASK_ = 0x7 << NUMERIC_TYPE_SHIFT_;
137.691 - /**
137.692 - * Shift to get bidi bits
137.693 - */
137.694 - private static final int BIDI_SHIFT_ = 6;
137.695
137.696 - /**
137.697 - * Mask to be applied after shifting to get bidi bits
137.698 - */
137.699 - private static final int BIDI_MASK_AFTER_SHIFT_ = 0x1F;
137.700 -
137.701 - /**
137.702 - * <p>Numerator power limit.
137.703 - * There are special values for huge numbers that are powers of ten.</p>
137.704 - * <p>c version genprops/store.c documents:
137.705 - * if numericValue = 0x7fffff00 + x then numericValue = 10 ^ x</p>
137.706 - */
137.707 - private static final int NUMERATOR_POWER_LIMIT_ = 0x7fffff00;
137.708 - /**
137.709 - * Integer properties mask and shift values for joining type.
137.710 - * Equivalent to icu4c UPROPS_JT_MASK.
137.711 - */
137.712 - private static final int JOINING_TYPE_MASK_ = 0x00003800;
137.713 - /**
137.714 - * Integer properties mask and shift values for joining type.
137.715 - * Equivalent to icu4c UPROPS_JT_SHIFT.
137.716 - */
137.717 - private static final int JOINING_TYPE_SHIFT_ = 11;
137.718 - /**
137.719 - * Integer properties mask and shift values for joining group.
137.720 - * Equivalent to icu4c UPROPS_JG_MASK.
137.721 - */
137.722 - private static final int JOINING_GROUP_MASK_ = 0x000007e0;
137.723 - /**
137.724 - * Integer properties mask and shift values for joining group.
137.725 - * Equivalent to icu4c UPROPS_JG_SHIFT.
137.726 - */
137.727 - private static final int JOINING_GROUP_SHIFT_ = 5;
137.728 - /**
137.729 - * Integer properties mask for decomposition type.
137.730 - * Equivalent to icu4c UPROPS_DT_MASK.
137.731 - */
137.732 - private static final int DECOMPOSITION_TYPE_MASK_ = 0x0000001f;
137.733 - /**
137.734 - * Integer properties mask and shift values for East Asian cell width.
137.735 - * Equivalent to icu4c UPROPS_EA_MASK
137.736 - */
137.737 - private static final int EAST_ASIAN_MASK_ = 0x00038000;
137.738 - /**
137.739 - * Integer properties mask and shift values for East Asian cell width.
137.740 - * Equivalent to icu4c UPROPS_EA_SHIFT
137.741 - */
137.742 - private static final int EAST_ASIAN_SHIFT_ = 15;
137.743 -
137.744 - /**
137.745 - * Integer properties mask and shift values for line breaks.
137.746 - * Equivalent to icu4c UPROPS_LB_MASK
137.747 - */
137.748 - private static final int LINE_BREAK_MASK_ = 0x007C0000;
137.749 - /**
137.750 - * Integer properties mask and shift values for line breaks.
137.751 - * Equivalent to icu4c UPROPS_LB_SHIFT
137.752 - */
137.753 - private static final int LINE_BREAK_SHIFT_ = 18;
137.754 - /**
137.755 - * Integer properties mask and shift values for blocks.
137.756 - * Equivalent to icu4c UPROPS_BLOCK_MASK
137.757 - */
137.758 - private static final int BLOCK_MASK_ = 0x00007f80;
137.759 - /**
137.760 - * Integer properties mask and shift values for blocks.
137.761 - * Equivalent to icu4c UPROPS_BLOCK_SHIFT
137.762 - */
137.763 - private static final int BLOCK_SHIFT_ = 7;
137.764 - /**
137.765 - * Integer properties mask and shift values for scripts.
137.766 - * Equivalent to icu4c UPROPS_SHIFT_MASK
137.767 - */
137.768 - private static final int SCRIPT_MASK_ = 0x0000007f;
137.769 -
137.770 - // private constructor -----------------------------------------------
137.771 - ///CLOVER:OFF
137.772 - /**
137.773 - * Private constructor to prevent instantiation
137.774 - */
137.775 - private UCharacter()
137.776 - {
137.777 - }
137.778 - ///CLOVER:ON
137.779 // private methods ---------------------------------------------------
137.780
137.781 /**
137.782 @@ -819,17 +381,6 @@
137.783 }
137.784
137.785 /**
137.786 - * Checks if the property value has a exception indicator
137.787 - * @param props 32 bit property value
137.788 - * @return true if property does not have a exception indicator, false
137.789 - * otherwise
137.790 - */
137.791 - private static boolean isNotExceptionIndicator(int props)
137.792 - {
137.793 - return (props & UCharacterProperty.EXCEPTION_MASK) == 0;
137.794 - }
137.795 -
137.796 - /**
137.797 * Gets the property value at the index.
137.798 * This is optimized.
137.799 * Note this is alittle different from CharTrie the index m_trieData_
137.800 @@ -841,35 +392,34 @@
137.801 * @return property value of code point
137.802 * @stable ICU 2.6
137.803 */
137.804 - private static int getProperty(int ch)
137.805 + private static final int getProperty(int ch)
137.806 {
137.807 if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE
137.808 || (ch > UTF16.LEAD_SURROGATE_MAX_VALUE
137.809 && ch < UTF16.SUPPLEMENTARY_MIN_VALUE)) {
137.810 - // BMP codepoint
137.811 - try { // using try for < 0 ch is faster than using an if statement
137.812 - return PROPERTY_DATA_[
137.813 - PROPERTY_TRIE_DATA_[
137.814 + // BMP codepoint 0000..D7FF or DC00..FFFF
137.815 + try { // using try for ch < 0 is faster than using an if statement
137.816 + return PROPERTY_TRIE_DATA_[
137.817 (PROPERTY_TRIE_INDEX_[ch >> 5] << 2)
137.818 - + (ch & 0x1f)]];
137.819 + + (ch & 0x1f)];
137.820 } catch (ArrayIndexOutOfBoundsException e) {
137.821 return PROPERTY_INITIAL_VALUE_;
137.822 }
137.823 }
137.824 if (ch <= UTF16.LEAD_SURROGATE_MAX_VALUE) {
137.825 - // surrogate
137.826 - return PROPERTY_DATA_[
137.827 - PROPERTY_TRIE_DATA_[
137.828 + // lead surrogate D800..DBFF
137.829 + return PROPERTY_TRIE_DATA_[
137.830 (PROPERTY_TRIE_INDEX_[(0x2800 >> 5) + (ch >> 5)] << 2)
137.831 - + (ch & 0x1f)]];
137.832 + + (ch & 0x1f)];
137.833 }
137.834 // for optimization
137.835 if (ch <= UTF16.CODEPOINT_MAX_VALUE) {
137.836 + // supplementary code point 10000..10FFFF
137.837 // look at the construction of supplementary characters
137.838 // trail forms the ends of it.
137.839 - return PROPERTY_DATA_[PROPERTY_.m_trie_.getSurrogateValue(
137.840 + return PROPERTY_.m_trie_.getSurrogateValue(
137.841 UTF16.getLeadSurrogate(ch),
137.842 - (char)(ch & 0x3ff))];
137.843 + (char)(ch & 0x3ff));
137.844 }
137.845 // return m_dataOffset_ if there is an error, in this case we return
137.846 // the default value: m_initialValue_
137.847 @@ -877,4 +427,5 @@
137.848 // this is for optimization.
137.849 return PROPERTY_INITIAL_VALUE_;
137.850 }
137.851 +
137.852 }
138.1 --- a/src/share/classes/sun/text/normalizer/UCharacterProperty.java Thu Apr 16 17:42:00 2009 +0100
138.2 +++ b/src/share/classes/sun/text/normalizer/UCharacterProperty.java Thu Apr 16 19:10:32 2009 -0700
138.3 @@ -1,5 +1,5 @@
138.4 /*
138.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
138.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
138.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
138.8 *
138.9 * This code is free software; you can redistribute it and/or modify it
138.10 @@ -22,10 +22,9 @@
138.11 * CA 95054 USA or visit www.sun.com if you need additional information or
138.12 * have any questions.
138.13 */
138.14 -
138.15 /*
138.16 *******************************************************************************
138.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
138.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
138.19 * *
138.20 * The original version of this source code and documentation is copyrighted *
138.21 * and owned by IBM, These materials are provided under terms of a License *
138.22 @@ -40,8 +39,7 @@
138.23 import java.io.BufferedInputStream;
138.24 import java.io.InputStream;
138.25 import java.io.IOException;
138.26 -import java.text.BreakIterator;
138.27 -import java.util.Locale;
138.28 +import java.util.MissingResourceException;
138.29
138.30 /**
138.31 * <p>Internal class used for Unicode character property database.</p>
138.32 @@ -56,10 +54,9 @@
138.33 * <a href=UCharacter.html>UCharacter</a>.</p>
138.34 * @author Syn Wee Quek
138.35 * @since release 2.1, february 1st 2002
138.36 -* @draft 2.1
138.37 */
138.38
138.39 -public final class UCharacterProperty implements Trie.DataManipulate
138.40 +public final class UCharacterProperty
138.41 {
138.42 // public data members -----------------------------------------------
138.43
138.44 @@ -83,68 +80,16 @@
138.45 */
138.46 public int m_trieInitialValue_;
138.47 /**
138.48 - * Character property table
138.49 - */
138.50 - public int m_property_[];
138.51 - /**
138.52 * Unicode version
138.53 */
138.54 public VersionInfo m_unicodeVersion_;
138.55 - /**
138.56 - * Exception indicator for uppercase type
138.57 - */
138.58 - public static final int EXC_UPPERCASE_ = 0;
138.59 - /**
138.60 - * Exception indicator for lowercase type
138.61 - */
138.62 - public static final int EXC_LOWERCASE_ = 1;
138.63 - /**
138.64 - * Exception indicator for titlecase type
138.65 - */
138.66 - public static final int EXC_TITLECASE_ = 2;
138.67 - /**
138.68 - * Exception indicator for digit type
138.69 - */
138.70 - public static final int EXC_UNUSED_ = 3;
138.71 - /**
138.72 - * Exception indicator for numeric type
138.73 - */
138.74 - public static final int EXC_NUMERIC_VALUE_ = 4;
138.75 - /**
138.76 - * Exception indicator for denominator type
138.77 - */
138.78 - public static final int EXC_DENOMINATOR_VALUE_ = 5;
138.79 - /**
138.80 - * Exception indicator for mirror type
138.81 - */
138.82 - public static final int EXC_MIRROR_MAPPING_ = 6;
138.83 - /**
138.84 - * Exception indicator for special casing type
138.85 - */
138.86 - public static final int EXC_SPECIAL_CASING_ = 7;
138.87 - /**
138.88 - * Exception indicator for case folding type
138.89 - */
138.90 - public static final int EXC_CASE_FOLDING_ = 8;
138.91 - /**
138.92 - * EXC_COMBINING_CLASS_ is not found in ICU.
138.93 - * Used to retrieve the combining class of the character in the exception
138.94 - * value
138.95 - */
138.96 - public static final int EXC_COMBINING_CLASS_ = 9;
138.97
138.98 - /**
138.99 - * Latin lowercase i
138.100 - */
138.101 - public static final char LATIN_SMALL_LETTER_I_ = 0x69;
138.102 - /**
138.103 - * Character type mask
138.104 - */
138.105 - public static final int TYPE_MASK = 0x1F;
138.106 - /**
138.107 - * Exception test mask
138.108 - */
138.109 - public static final int EXCEPTION_MASK = 0x20;
138.110 + // uprops.h enum UPropertySource --------------------------------------- ***
138.111 +
138.112 + /** From uchar.c/uprops.icu properties vectors trie */
138.113 + public static final int SRC_PROPSVEC=2;
138.114 + /** One more than the highest UPropertySource (SRC_) constant. */
138.115 + public static final int SRC_COUNT=9;
138.116
138.117 // public methods ----------------------------------------------------
138.118
138.119 @@ -159,23 +104,6 @@
138.120 }
138.121
138.122 /**
138.123 - * Called by com.ibm.icu.util.Trie to extract from a lead surrogate's
138.124 - * data the index array offset of the indexes for that lead surrogate.
138.125 - * @param value data value for a surrogate from the trie, including the
138.126 - * folding offset
138.127 - * @return data offset or 0 if there is no data for the lead surrogate
138.128 - */
138.129 - public int getFoldingOffset(int value)
138.130 - {
138.131 - if ((value & SUPPLEMENTARY_FOLD_INDICATOR_MASK_) != 0) {
138.132 - return (value & SUPPLEMENTARY_FOLD_OFFSET_MASK_);
138.133 - }
138.134 - else {
138.135 - return 0;
138.136 - }
138.137 - }
138.138 -
138.139 - /**
138.140 * Gets the property value at the index.
138.141 * This is optimized.
138.142 * Note this is alittle different from CharTrie the index m_trieData_
138.143 @@ -183,129 +111,79 @@
138.144 * @param ch code point whose property value is to be retrieved
138.145 * @return property value of code point
138.146 */
138.147 - public int getProperty(int ch)
138.148 + public final int getProperty(int ch)
138.149 {
138.150 if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE
138.151 || (ch > UTF16.LEAD_SURROGATE_MAX_VALUE
138.152 && ch < UTF16.SUPPLEMENTARY_MIN_VALUE)) {
138.153 - // BMP codepoint
138.154 + // BMP codepoint 0000..D7FF or DC00..FFFF
138.155 // optimized
138.156 - try {
138.157 - return m_property_[
138.158 - m_trieData_[
138.159 + try { // using try for ch < 0 is faster than using an if statement
138.160 + return m_trieData_[
138.161 (m_trieIndex_[ch >> Trie.INDEX_STAGE_1_SHIFT_]
138.162 << Trie.INDEX_STAGE_2_SHIFT_)
138.163 - + (ch & Trie.INDEX_STAGE_3_MASK_)]];
138.164 + + (ch & Trie.INDEX_STAGE_3_MASK_)];
138.165 } catch (ArrayIndexOutOfBoundsException e) {
138.166 - return m_property_[m_trieInitialValue_];
138.167 + return m_trieInitialValue_;
138.168 }
138.169 }
138.170 if (ch <= UTF16.LEAD_SURROGATE_MAX_VALUE) {
138.171 - return m_property_[
138.172 - m_trieData_[
138.173 + // lead surrogate D800..DBFF
138.174 + return m_trieData_[
138.175 (m_trieIndex_[Trie.LEAD_INDEX_OFFSET_
138.176 + (ch >> Trie.INDEX_STAGE_1_SHIFT_)]
138.177 << Trie.INDEX_STAGE_2_SHIFT_)
138.178 - + (ch & Trie.INDEX_STAGE_3_MASK_)]];
138.179 + + (ch & Trie.INDEX_STAGE_3_MASK_)];
138.180 }
138.181 - // for optimization
138.182 if (ch <= UTF16.CODEPOINT_MAX_VALUE) {
138.183 + // supplementary code point 10000..10FFFF
138.184 // look at the construction of supplementary characters
138.185 // trail forms the ends of it.
138.186 - return m_property_[m_trie_.getSurrogateValue(
138.187 + return m_trie_.getSurrogateValue(
138.188 UTF16.getLeadSurrogate(ch),
138.189 - (char)(ch & Trie.SURROGATE_MASK_))];
138.190 + (char)(ch & Trie.SURROGATE_MASK_));
138.191 }
138.192 + // ch is out of bounds
138.193 // return m_dataOffset_ if there is an error, in this case we return
138.194 // the default value: m_initialValue_
138.195 // we cannot assume that m_initialValue_ is at offset 0
138.196 // this is for optimization.
138.197 - return m_property_[m_trieInitialValue_];
138.198 - // return m_property_[m_trie_.getCodePointValue(ch)];
138.199 + return m_trieInitialValue_;
138.200 +
138.201 + // this all is an inlined form of return m_trie_.getCodePointValue(ch);
138.202 }
138.203
138.204 /**
138.205 - * Getting the signed numeric value of a character embedded in the property
138.206 + * Getting the unsigned numeric value of a character embedded in the property
138.207 * argument
138.208 * @param prop the character
138.209 - * @return signed numberic value
138.210 + * @return unsigned numberic value
138.211 */
138.212 - public static int getSignedValue(int prop)
138.213 - {
138.214 - return (prop >> VALUE_SHIFT_);
138.215 - }
138.216 -
138.217 - /**
138.218 - * Getting the exception index for argument property
138.219 - * @param prop character property
138.220 - * @return exception index
138.221 - */
138.222 - public static int getExceptionIndex(int prop)
138.223 + public static int getUnsignedValue(int prop)
138.224 {
138.225 return (prop >> VALUE_SHIFT_) & UNSIGNED_VALUE_MASK_AFTER_SHIFT_;
138.226 }
138.227
138.228 /**
138.229 - * Determines if the exception value passed in has the kind of information
138.230 - * which the indicator wants, e.g if the exception value contains the digit
138.231 - * value of the character
138.232 - * @param index exception index
138.233 - * @param indicator type indicator
138.234 - * @return true if type value exist
138.235 - */
138.236 - public boolean hasExceptionValue(int index, int indicator)
138.237 - {
138.238 - return (m_exception_[index] & (1 << indicator)) != 0;
138.239 - }
138.240 -
138.241 - /**
138.242 - * Gets the exception value at the index, assuming that data type is
138.243 - * available. Result is undefined if data is not available. Use
138.244 - * hasExceptionValue() to determine data's availability.
138.245 - * @param index
138.246 - * @param etype exception data type
138.247 - * @return exception data type value at index
138.248 - */
138.249 - public int getException(int index, int etype)
138.250 - {
138.251 - // contained in exception data
138.252 - if (etype == EXC_COMBINING_CLASS_) {
138.253 - return m_exception_[index];
138.254 - }
138.255 - // contained in the exception digit address
138.256 - index = addExceptionOffset(m_exception_[index], etype, ++ index);
138.257 - return m_exception_[index];
138.258 - }
138.259 -
138.260 - /**
138.261 - * Gets the folded case value at the index
138.262 - * @param index of the case value to be retrieved
138.263 - * @param count number of characters to retrieve
138.264 - * @param str string buffer to which to append the result
138.265 - */
138.266 - public void getFoldCase(int index, int count, StringBuffer str)
138.267 - {
138.268 - // first 2 chars are for the simple mappings
138.269 - index += 2;
138.270 - while (count > 0) {
138.271 - str.append(m_case_[index]);
138.272 - index ++;
138.273 - count --;
138.274 - }
138.275 - }
138.276 -
138.277 - /**
138.278 * Gets the unicode additional properties.
138.279 * C version getUnicodeProperties.
138.280 * @param codepoint codepoint whose additional properties is to be
138.281 * retrieved
138.282 + * @param column
138.283 * @return unicode properties
138.284 */
138.285 - public int getAdditional(int codepoint) {
138.286 - return m_additionalVectors_[m_additionalTrie_.getCodePointValue(codepoint)];
138.287 + public int getAdditional(int codepoint, int column) {
138.288 + if (column == -1) {
138.289 + return getProperty(codepoint);
138.290 + }
138.291 + if (column < 0 || column >= m_additionalColumnsCount_) {
138.292 + return 0;
138.293 + }
138.294 + return m_additionalVectors_[
138.295 + m_additionalTrie_.getCodePointValue(codepoint) + column];
138.296 }
138.297
138.298 - /**
138.299 + /**
138.300 * <p>Get the "age" of the code point.</p>
138.301 * <p>The "age" is the Unicode version when the code point was first
138.302 * designated (as a non-character or for Private Use) or assigned a
138.303 @@ -316,11 +194,10 @@
138.304 * <p>This API does not check the validity of the codepoint.</p>
138.305 * @param codepoint The code point.
138.306 * @return the Unicode version number
138.307 - * @draft ICU 2.1
138.308 */
138.309 public VersionInfo getAge(int codepoint)
138.310 {
138.311 - int version = getAdditional(codepoint) >> AGE_SHIFT_;
138.312 + int version = getAdditional(codepoint, 0) >> AGE_SHIFT_;
138.313 return VersionInfo.getInstance(
138.314 (version >> FIRST_NIBBLE_SHIFT_) & LAST_NIBBLE_MASK_,
138.315 version & LAST_NIBBLE_MASK_, 0, 0);
138.316 @@ -341,16 +218,16 @@
138.317
138.318 /**
138.319 * Loads the property data and initialize the UCharacterProperty instance.
138.320 - * @throws RuntimeException when data is missing or data has been corrupted
138.321 + * @throws MissingResourceException when data is missing or data has been corrupted
138.322 */
138.323 - public static UCharacterProperty getInstance() throws RuntimeException
138.324 + public static UCharacterProperty getInstance()
138.325 {
138.326 - if (INSTANCE_ == null) {
138.327 + if(INSTANCE_ == null) {
138.328 try {
138.329 INSTANCE_ = new UCharacterProperty();
138.330 }
138.331 catch (Exception e) {
138.332 - throw new RuntimeException(e.getMessage());
138.333 + throw new MissingResourceException(e.getMessage(),"","");
138.334 }
138.335 }
138.336 return INSTANCE_;
138.337 @@ -359,6 +236,9 @@
138.338 /**
138.339 * Checks if the argument c is to be treated as a white space in ICU
138.340 * rules. Usually ICU rule white spaces are ignored unless quoted.
138.341 + * Equivalent to test for Pattern_White_Space Unicode property.
138.342 + * Stable set of characters, won't change.
138.343 + * See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/
138.344 * @param c codepoint to check
138.345 * @return true if c is a ICU white space
138.346 */
138.347 @@ -366,8 +246,9 @@
138.348 {
138.349 /* "white space" in the sense of ICU rule parsers
138.350 This is a FIXED LIST that is NOT DEPENDENT ON UNICODE PROPERTIES.
138.351 - See UTR #31: http://www.unicode.org/reports/tr31/.
138.352 + See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/
138.353 U+0009..U+000D, U+0020, U+0085, U+200E..U+200F, and U+2028..U+2029
138.354 + Equivalent to test for Pattern_White_Space Unicode property.
138.355 */
138.356 return (c >= 0x0009 && c <= 0x2029 &&
138.357 (c <= 0x000D || c == 0x0020 || c == 0x0085 ||
138.358 @@ -377,15 +258,6 @@
138.359 // protected variables -----------------------------------------------
138.360
138.361 /**
138.362 - * Case table
138.363 - */
138.364 - char m_case_[];
138.365 -
138.366 - /**
138.367 - * Exception property table
138.368 - */
138.369 - int m_exception_[];
138.370 - /**
138.371 * Extra property trie
138.372 */
138.373 CharTrie m_additionalTrie_;
138.374 @@ -427,77 +299,19 @@
138.375 private static final int DATA_BUFFER_SIZE_ = 25000;
138.376
138.377 /**
138.378 - * This, from what i infer is the max size of the indicators used for the
138.379 - * exception values.
138.380 - * Number of bits in an 8-bit integer value
138.381 - */
138.382 - private static final int EXC_GROUP_ = 8;
138.383 -
138.384 - /**
138.385 - * Mask to get the group
138.386 - */
138.387 - private static final int EXC_GROUP_MASK_ = 255;
138.388 -
138.389 - /**
138.390 - * Mask to get the digit value in the exception result
138.391 - */
138.392 - private static final int EXC_DIGIT_MASK_ = 0xFFFF;
138.393 -
138.394 - /**
138.395 - * Offset table for data in exception block.<br>
138.396 - * Table formed by the number of bits used for the index, e.g. 0 = 0 bits,
138.397 - * 1 = 1 bits.
138.398 - */
138.399 - private static final byte FLAGS_OFFSET_[] =
138.400 - {
138.401 - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
138.402 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
138.403 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
138.404 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
138.405 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
138.406 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
138.407 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
138.408 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
138.409 - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
138.410 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
138.411 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
138.412 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
138.413 - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
138.414 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
138.415 - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
138.416 - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
138.417 - };
138.418 -
138.419 - /**
138.420 * Numeric value shift
138.421 */
138.422 - private static final int VALUE_SHIFT_ = 20;
138.423 + private static final int VALUE_SHIFT_ = 8;
138.424
138.425 /**
138.426 * Mask to be applied after shifting to obtain an unsigned numeric value
138.427 */
138.428 - private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0x7FF;
138.429 -
138.430 - /**
138.431 - *
138.432 - */
138.433 - private static final int NUMERIC_TYPE_SHIFT = 12;
138.434 -
138.435 - /**
138.436 - * Folding indicator mask
138.437 - */
138.438 - private static final int SUPPLEMENTARY_FOLD_INDICATOR_MASK_ = 0x8000;
138.439 -
138.440 - /**
138.441 - * Folding offset mask
138.442 - */
138.443 - private static final int SUPPLEMENTARY_FOLD_OFFSET_MASK_ = 0x7FFF;
138.444 + private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0xFF;
138.445
138.446 /**
138.447 * Shift value for lead surrogate to form a supplementary character.
138.448 */
138.449 private static final int LEAD_SURROGATE_SHIFT_ = 10;
138.450 -
138.451 /**
138.452 * Offset to add to combined surrogate pair to avoid msking.
138.453 */
138.454 @@ -507,16 +321,12 @@
138.455 LEAD_SURROGATE_SHIFT_) -
138.456 UTF16.TRAIL_SURROGATE_MIN_VALUE;
138.457
138.458 - /**
138.459 - * To get the last character out from a data type
138.460 - */
138.461 - private static final int LAST_CHAR_MASK_ = 0xFFFF;
138.462 + // additional properties ----------------------------------------------
138.463
138.464 /**
138.465 * First nibble shift
138.466 */
138.467 private static final int FIRST_NIBBLE_SHIFT_ = 0x4;
138.468 -
138.469 /**
138.470 * Second nibble mask
138.471 */
138.472 @@ -530,7 +340,7 @@
138.473
138.474 /**
138.475 * Constructor
138.476 - * @exception thrown when data reading fails or data corrupted
138.477 + * @exception IOException thrown when data reading fails or data corrupted
138.478 */
138.479 private UCharacterProperty() throws IOException
138.480 {
138.481 @@ -544,275 +354,16 @@
138.482 m_trie_.putIndexData(this);
138.483 }
138.484
138.485 - /* Is followed by {case-ignorable}* cased ? */
138.486 - /**
138.487 - * Getting the correct address for data in the exception value
138.488 - * @param evalue exception value
138.489 - * @param indicator type of data to retrieve
138.490 - * @param address current address to move from
138.491 - * @return the correct address
138.492 - */
138.493 - private int addExceptionOffset(int evalue, int indicator, int address)
138.494 - {
138.495 - int result = address;
138.496 - if (indicator >= EXC_GROUP_) {
138.497 - result += FLAGS_OFFSET_[evalue & EXC_GROUP_MASK_];
138.498 - evalue >>= EXC_GROUP_;
138.499 - indicator -= EXC_GROUP_;
138.500 - }
138.501 - int mask = (1 << indicator) - 1;
138.502 - result += FLAGS_OFFSET_[evalue & mask];
138.503 - return result;
138.504 - }
138.505 -
138.506 - private static final int TAB = 0x0009;
138.507 - private static final int LF = 0x000a;
138.508 - private static final int FF = 0x000c;
138.509 - private static final int CR = 0x000d;
138.510 - private static final int U_A = 0x0041;
138.511 - private static final int U_Z = 0x005a;
138.512 - private static final int U_a = 0x0061;
138.513 - private static final int U_z = 0x007a;
138.514 - private static final int DEL = 0x007f;
138.515 - private static final int NL = 0x0085;
138.516 - private static final int NBSP = 0x00a0;
138.517 - private static final int CGJ = 0x034f;
138.518 - private static final int FIGURESP= 0x2007;
138.519 - private static final int HAIRSP = 0x200a;
138.520 - private static final int ZWNJ = 0x200c;
138.521 - private static final int ZWJ = 0x200d;
138.522 - private static final int RLM = 0x200f;
138.523 - private static final int NNBSP = 0x202f;
138.524 - private static final int WJ = 0x2060;
138.525 - private static final int INHSWAP = 0x206a;
138.526 - private static final int NOMDIG = 0x206f;
138.527 - private static final int ZWNBSP = 0xfeff;
138.528 -
138.529 - public UnicodeSet addPropertyStarts(UnicodeSet set) {
138.530 - int c;
138.531 -
138.532 - /* add the start code point of each same-value range of each trie */
138.533 - //utrie_enum(&normTrie, NULL, _enumPropertyStartsRange, set);
138.534 - TrieIterator propsIter = new TrieIterator(m_trie_);
138.535 - RangeValueIterator.Element propsResult = new RangeValueIterator.Element();
138.536 - while(propsIter.next(propsResult)){
138.537 - set.add(propsResult.start);
138.538 - }
138.539 - //utrie_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, set);
138.540 - TrieIterator propsVectorsIter = new TrieIterator(m_additionalTrie_);
138.541 - RangeValueIterator.Element propsVectorsResult = new RangeValueIterator.Element();
138.542 - while(propsVectorsIter.next(propsVectorsResult)){
138.543 - set.add(propsVectorsResult.start);
138.544 - }
138.545 -
138.546 -
138.547 - /* add code points with hardcoded properties, plus the ones following them */
138.548 -
138.549 - /* add for IS_THAT_CONTROL_SPACE() */
138.550 - set.add(TAB); /* range TAB..CR */
138.551 - set.add(CR+1);
138.552 - set.add(0x1c);
138.553 - set.add(0x1f+1);
138.554 - set.add(NL);
138.555 - set.add(NL+1);
138.556 -
138.557 - /* add for u_isIDIgnorable() what was not added above */
138.558 - set.add(DEL); /* range DEL..NBSP-1, NBSP added below */
138.559 - set.add(HAIRSP);
138.560 - set.add(RLM+1);
138.561 - set.add(INHSWAP);
138.562 - set.add(NOMDIG+1);
138.563 - set.add(ZWNBSP);
138.564 - set.add(ZWNBSP+1);
138.565 -
138.566 - /* add no-break spaces for u_isWhitespace() what was not added above */
138.567 - set.add(NBSP);
138.568 - set.add(NBSP+1);
138.569 - set.add(FIGURESP);
138.570 - set.add(FIGURESP+1);
138.571 - set.add(NNBSP);
138.572 - set.add(NNBSP+1);
138.573 -
138.574 - /* add for u_charDigitValue() */
138.575 - set.add(0x3007);
138.576 - set.add(0x3008);
138.577 - set.add(0x4e00);
138.578 - set.add(0x4e01);
138.579 - set.add(0x4e8c);
138.580 - set.add(0x4e8d);
138.581 - set.add(0x4e09);
138.582 - set.add(0x4e0a);
138.583 - set.add(0x56db);
138.584 - set.add(0x56dc);
138.585 - set.add(0x4e94);
138.586 - set.add(0x4e95);
138.587 - set.add(0x516d);
138.588 - set.add(0x516e);
138.589 - set.add(0x4e03);
138.590 - set.add(0x4e04);
138.591 - set.add(0x516b);
138.592 - set.add(0x516c);
138.593 - set.add(0x4e5d);
138.594 - set.add(0x4e5e);
138.595 -
138.596 - /* add for u_digit() */
138.597 - set.add(U_a);
138.598 - set.add(U_z+1);
138.599 - set.add(U_A);
138.600 - set.add(U_Z+1);
138.601 -
138.602 - /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */
138.603 - set.add(WJ); /* range WJ..NOMDIG */
138.604 - set.add(0xfff0);
138.605 - set.add(0xfffb+1);
138.606 - set.add(0xe0000);
138.607 - set.add(0xe0fff+1);
138.608 -
138.609 - /* add for UCHAR_GRAPHEME_BASE and others */
138.610 - set.add(CGJ);
138.611 - set.add(CGJ+1);
138.612 -
138.613 - /* add for UCHAR_JOINING_TYPE */
138.614 - set.add(ZWNJ); /* range ZWNJ..ZWJ */
138.615 - set.add(ZWJ+1);
138.616 -
138.617 - /* add Jamo type boundaries for UCHAR_HANGUL_SYLLABLE_TYPE */
138.618 - set.add(0x1100);
138.619 - int value= UCharacter.HangulSyllableType.LEADING_JAMO;
138.620 - int value2;
138.621 - for(c=0x115a; c<=0x115f; ++c) {
138.622 - value2= UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE);
138.623 - if(value!=value2) {
138.624 - value=value2;
138.625 - set.add(c);
138.626 + public void upropsvec_addPropertyStarts(UnicodeSet set) {
138.627 + /* add the start code point of each same-value range of the properties vectors trie */
138.628 + if(m_additionalColumnsCount_>0) {
138.629 + /* if m_additionalColumnsCount_==0 then the properties vectors trie may not be there at all */
138.630 + TrieIterator propsVectorsIter = new TrieIterator(m_additionalTrie_);
138.631 + RangeValueIterator.Element propsVectorsResult = new RangeValueIterator.Element();
138.632 + while(propsVectorsIter.next(propsVectorsResult)){
138.633 + set.add(propsVectorsResult.start);
138.634 }
138.635 }
138.636 -
138.637 - set.add(0x1160);
138.638 - value=UCharacter.HangulSyllableType.VOWEL_JAMO;
138.639 - for(c=0x11a3; c<=0x11a7; ++c) {
138.640 - value2=UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE);
138.641 - if(value!=value2) {
138.642 - value=value2;
138.643 - set.add(c);
138.644 - }
138.645 - }
138.646 -
138.647 - set.add(0x11a8);
138.648 - value=UCharacter.HangulSyllableType.TRAILING_JAMO;
138.649 - for(c=0x11fa; c<=0x11ff; ++c) {
138.650 - value2=UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE);
138.651 - if(value!=value2) {
138.652 - value=value2;
138.653 - set.add(c);
138.654 - }
138.655 - }
138.656 -
138.657 -
138.658 - /*
138.659 - * Omit code points for u_charCellWidth() because
138.660 - * - it is deprecated and not a real Unicode property
138.661 - * - they are probably already set from the trie enumeration
138.662 - */
138.663 -
138.664 - /*
138.665 - * Omit code points with hardcoded specialcasing properties
138.666 - * because we do not build property UnicodeSets for them right now.
138.667 - */
138.668 - return set; // for chaining
138.669 - }
138.670 -/*----------------------------------------------------------------
138.671 - * Inclusions list
138.672 - *----------------------------------------------------------------*/
138.673 -
138.674 - /*
138.675 - * Return a set of characters for property enumeration.
138.676 - * The set implicitly contains 0x110000 as well, which is one more than the highest
138.677 - * Unicode code point.
138.678 - *
138.679 - * This set is used as an ordered list - its code points are ordered, and
138.680 - * consecutive code points (in Unicode code point order) in the set define a range.
138.681 - * For each two consecutive characters (start, limit) in the set,
138.682 - * all of the UCD/normalization and related properties for
138.683 - * all code points start..limit-1 are all the same,
138.684 - * except for character names and ISO comments.
138.685 - *
138.686 - * All Unicode code points U+0000..U+10ffff are covered by these ranges.
138.687 - * The ranges define a partition of the Unicode code space.
138.688 - * ICU uses the inclusions set to enumerate properties for generating
138.689 - * UnicodeSets containing all code points that have a certain property value.
138.690 - *
138.691 - * The Inclusion List is generated from the UCD. It is generated
138.692 - * by enumerating the data tries, and code points for hardcoded properties
138.693 - * are added as well.
138.694 - *
138.695 - * --------------------------------------------------------------------------
138.696 - *
138.697 - * The following are ideas for getting properties-unique code point ranges,
138.698 - * with possible optimizations beyond the current implementation.
138.699 - * These optimizations would require more code and be more fragile.
138.700 - * The current implementation generates one single list (set) for all properties.
138.701 - *
138.702 - * To enumerate properties efficiently, one needs to know ranges of
138.703 - * repetitive values, so that the value of only each start code point
138.704 - * can be applied to the whole range.
138.705 - * This information is in principle available in the uprops.icu/unorm.icu data.
138.706 - *
138.707 - * There are two obstacles:
138.708 - *
138.709 - * 1. Some properties are computed from multiple data structures,
138.710 - * making it necessary to get repetitive ranges by intersecting
138.711 - * ranges from multiple tries.
138.712 - *
138.713 - * 2. It is not economical to write code for getting repetitive ranges
138.714 - * that are precise for each of some 50 properties.
138.715 - *
138.716 - * Compromise ideas:
138.717 - *
138.718 - * - Get ranges per trie, not per individual property.
138.719 - * Each range contains the same values for a whole group of properties.
138.720 - * This would generate currently five range sets, two for uprops.icu tries
138.721 - * and three for unorm.icu tries.
138.722 - *
138.723 - * - Combine sets of ranges for multiple tries to get sufficient sets
138.724 - * for properties, e.g., the uprops.icu main and auxiliary tries
138.725 - * for all non-normalization properties.
138.726 - *
138.727 - * Ideas for representing ranges and combining them:
138.728 - *
138.729 - * - A UnicodeSet could hold just the start code points of ranges.
138.730 - * Multiple sets are easily combined by or-ing them together.
138.731 - *
138.732 - * - Alternatively, a UnicodeSet could hold each even-numbered range.
138.733 - * All ranges could be enumerated by using each start code point
138.734 - * (for the even-numbered ranges) as well as each limit (end+1) code point
138.735 - * (for the odd-numbered ranges).
138.736 - * It should be possible to combine two such sets by xor-ing them,
138.737 - * but no more than two.
138.738 - *
138.739 - * The second way to represent ranges may(?!) yield smaller UnicodeSet arrays,
138.740 - * but the first one is certainly simpler and applicable for combining more than
138.741 - * two range sets.
138.742 - *
138.743 - * It is possible to combine all range sets for all uprops/unorm tries into one
138.744 - * set that can be used for all properties.
138.745 - * As an optimization, there could be less-combined range sets for certain
138.746 - * groups of properties.
138.747 - * The relationship of which less-combined range set to use for which property
138.748 - * depends on the implementation of the properties and must be hardcoded
138.749 - * - somewhat error-prone and higher maintenance but can be tested easily
138.750 - * by building property sets "the simple way" in test code.
138.751 - *
138.752 - * ---
138.753 - *
138.754 - * Do not use a UnicodeSet pattern because that causes infinite recursion;
138.755 - * UnicodeSet depends on the inclusions set.
138.756 - */
138.757 - public UnicodeSet getInclusions() {
138.758 - UnicodeSet set = new UnicodeSet();
138.759 - NormalizerImpl.addPropertyStarts(set);
138.760 - addPropertyStarts(set);
138.761 - return set;
138.762 }
138.763
138.764 }
139.1 --- a/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java Thu Apr 16 17:42:00 2009 +0100
139.2 +++ b/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java Thu Apr 16 19:10:32 2009 -0700
139.3 @@ -1,5 +1,5 @@
139.4 /*
139.5 - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
139.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
139.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
139.8 *
139.9 * This code is free software; you can redistribute it and/or modify it
139.10 @@ -22,10 +22,9 @@
139.11 * CA 95054 USA or visit www.sun.com if you need additional information or
139.12 * have any questions.
139.13 */
139.14 -
139.15 /*
139.16 *******************************************************************************
139.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
139.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
139.19 * *
139.20 * The original version of this source code and documentation is copyrighted *
139.21 * and owned by IBM, These materials are provided under terms of a License *
139.22 @@ -37,8 +36,8 @@
139.23
139.24 package sun.text.normalizer;
139.25
139.26 +import java.io.DataInputStream;
139.27 import java.io.InputStream;
139.28 -import java.io.DataInputStream;
139.29 import java.io.IOException;
139.30
139.31 /**
139.32 @@ -50,254 +49,13 @@
139.33 * </p>
139.34 * <p>uprops.icu which is in big-endian format is jared together with this
139.35 * package.</p>
139.36 +*
139.37 +* Unicode character properties file format see
139.38 +* (ICU4C)/source/tools/genprops/store.c
139.39 +*
139.40 * @author Syn Wee Quek
139.41 * @since release 2.1, February 1st 2002
139.42 -* @draft 2.1
139.43 */
139.44 -/* Unicode character properties file format ------------------------------------
139.45 -
139.46 -The file format prepared and written here contains several data
139.47 -structures that store indexes or data.
139.48 -
139.49 -
139.50 -
139.51 -The following is a description of format version 3 .
139.52 -
139.53 -Data contents:
139.54 -
139.55 -The contents is a parsed, binary form of several Unicode character
139.56 -database files, most prominently UnicodeData.txt.
139.57 -
139.58 -Any Unicode code point from 0 to 0x10ffff can be looked up to get
139.59 -the properties, if any, for that code point. This means that the input
139.60 -to the lookup are 21-bit unsigned integers, with not all of the
139.61 -21-bit range used.
139.62 -
139.63 -It is assumed that client code keeps a uint32_t pointer
139.64 -to the beginning of the data:
139.65 -
139.66 - const uint32_t *p32;
139.67 -
139.68 -Formally, the file contains the following structures:
139.69 -
139.70 - const int32_t indexes[16] with values i0..i15:
139.71 -
139.72 - i0 propsIndex; -- 32-bit unit index to the table of 32-bit properties words
139.73 - i1 exceptionsIndex; -- 32-bit unit index to the table of 32-bit exception words
139.74 - i2 exceptionsTopIndex; -- 32-bit unit index to the array of UChars for special mappings
139.75 -
139.76 - i3 additionalTrieIndex; -- 32-bit unit index to the additional trie for more properties
139.77 - i4 additionalVectorsIndex; -- 32-bit unit index to the table of properties vectors
139.78 - i5 additionalVectorsColumns; -- number of 32-bit words per properties vector
139.79 -
139.80 - i6 reservedItemIndex; -- 32-bit unit index to the top of the properties vectors table
139.81 - i7..i9 reservedIndexes; -- reserved values; 0 for now
139.82 -
139.83 - i10 maxValues; -- maximum code values for vector word 0, see uprops.h (format version 3.1+)
139.84 - i11 maxValues2; -- maximum code values for vector word 2, see uprops.h (format version 3.2)
139.85 - i12..i15 reservedIndexes; -- reserved values; 0 for now
139.86 -
139.87 - PT serialized properties trie, see utrie.h (byte size: 4*(i0-16))
139.88 -
139.89 - P const uint32_t props32[i1-i0];
139.90 - E const uint32_t exceptions[i2-i1];
139.91 - U const UChar uchars[2*(i3-i2)];
139.92 -
139.93 - AT serialized trie for additional properties (byte size: 4*(i4-i3))
139.94 - PV const uint32_t propsVectors[(i6-i4)/i5][i5]==uint32_t propsVectors[i6-i4];
139.95 -
139.96 -Trie lookup and properties:
139.97 -
139.98 -In order to condense the data for the 21-bit code space, several properties of
139.99 -the Unicode code assignment are exploited:
139.100 -- The code space is sparse.
139.101 -- There are several 10k of consecutive codes with the same properties.
139.102 -- Characters and scripts are allocated in groups of 16 code points.
139.103 -- Inside blocks for scripts the properties are often repetitive.
139.104 -- The 21-bit space is not fully used for Unicode.
139.105 -
139.106 -The lookup of properties for a given code point is done with a trie lookup,
139.107 -using the UTrie implementation.
139.108 -The trie lookup result is a 16-bit index in the props32[] table where the
139.109 -actual 32-bit properties word is stored. This is done to save space.
139.110 -
139.111 -(There are thousands of 16-bit entries in the trie data table, but
139.112 -only a few hundred unique 32-bit properties words.
139.113 -If the trie data table contained 32-bit words directly, then that would be
139.114 -larger because the length of the table would be the same as now but the
139.115 -width would be 32 bits instead of 16. This saves more than 10kB.)
139.116 -
139.117 -With a given Unicode code point
139.118 -
139.119 - UChar32 c;
139.120 -
139.121 -and 0<=c<0x110000, the lookup is done like this:
139.122 -
139.123 - uint16_t i;
139.124 - UTRIE_GET16(c, i);
139.125 - uint32_t props=p32[i];
139.126 -
139.127 -For some characters, not all of the properties can be efficiently encoded
139.128 -using 32 bits. For them, the 32-bit word contains an index into the exceptions[]
139.129 -array:
139.130 -
139.131 - if(props&EXCEPTION_BIT)) {
139.132 - uint16_t e=(uint16_t)(props>>VALUE_SHIFT);
139.133 - ...
139.134 - }
139.135 -
139.136 -The exception values are a variable number of uint32_t starting at
139.137 -
139.138 - const uint32_t *pe=p32+exceptionsIndex+e;
139.139 -
139.140 -The first uint32_t there contains flags about what values actually follow it.
139.141 -Some of the exception values are UChar32 code points for the case mappings,
139.142 -others are numeric values etc.
139.143 -
139.144 -32-bit properties sets:
139.145 -
139.146 -Each 32-bit properties word contains:
139.147 -
139.148 - 0.. 4 general category
139.149 - 5 has exception values
139.150 - 6..10 BiDi category
139.151 -11 is mirrored
139.152 -12..14 numericType:
139.153 - 0 no numeric value
139.154 - 1 decimal digit value
139.155 - 2 digit value
139.156 - 3 numeric value
139.157 - ### TODO: type 4 for Han digits & numbers?!
139.158 -15..19 reserved
139.159 -20..31 value according to bits 0..5:
139.160 - if(has exception) {
139.161 - exception index;
139.162 - } else switch(general category) {
139.163 - case Ll: delta to uppercase; -- same as titlecase
139.164 - case Lu: -delta to lowercase; -- titlecase is same as c
139.165 - case Lt: -delta to lowercase; -- uppercase is same as c
139.166 - default:
139.167 - if(is mirrored) {
139.168 - delta to mirror;
139.169 - } else if(numericType!=0) {
139.170 - numericValue;
139.171 - } else {
139.172 - 0;
139.173 - };
139.174 - }
139.175 -
139.176 -Exception values:
139.177 -
139.178 -In the first uint32_t exception word for a code point,
139.179 -bits
139.180 -31..16 reserved
139.181 -15..0 flags that indicate which values follow:
139.182 -
139.183 -bit
139.184 - 0 has uppercase mapping
139.185 - 1 has lowercase mapping
139.186 - 2 has titlecase mapping
139.187 - 3 unused
139.188 - 4 has numeric value (numerator)
139.189 - if numericValue=0x7fffff00+x then numericValue=10^x
139.190 - 5 has denominator value
139.191 - 6 has a mirror-image Unicode code point
139.192 - 7 has SpecialCasing.txt entries
139.193 - 8 has CaseFolding.txt entries
139.194 -
139.195 -According to the flags in this word, one or more uint32_t words follow it
139.196 -in the sequence of the bit flags in the flags word; if a flag is not set,
139.197 -then the value is missing or 0:
139.198 -
139.199 -For the case mappings and the mirror-image Unicode code point,
139.200 -one uint32_t or UChar32 each is the code point.
139.201 -If the titlecase mapping is missing, then it is the same as the uppercase mapping.
139.202 -
139.203 -For the digit values, bits 31..16 contain the decimal digit value, and
139.204 -bits 15..0 contain the digit value. A value of -1 indicates that
139.205 -this value is missing.
139.206 -
139.207 -For the numeric/numerator value, an int32_t word contains the value directly,
139.208 -except for when there is no numerator but a denominator, then the numerator
139.209 -is implicitly 1. This means:
139.210 - numerator denominator result
139.211 - none none none
139.212 - x none x
139.213 - none y 1/y
139.214 - x y x/y
139.215 -
139.216 -If the numerator value is 0x7fffff00+x then it is replaced with 10^x.
139.217 -
139.218 -For the denominator value, a uint32_t word contains the value directly.
139.219 -
139.220 -For special casing mappings, the 32-bit exception word contains:
139.221 -31 if set, this character has complex, conditional mappings
139.222 - that are not stored;
139.223 - otherwise, the mappings are stored according to the following bits
139.224 -30..24 number of UChars used for mappings
139.225 -23..16 reserved
139.226 -15.. 0 UChar offset from the beginning of the UChars array where the
139.227 - UChars for the special case mappings are stored in the following format:
139.228 -
139.229 -Format of special casing UChars:
139.230 -One UChar value with lengths as follows:
139.231 -14..10 number of UChars for titlecase mapping
139.232 - 9.. 5 number of UChars for uppercase mapping
139.233 - 4.. 0 number of UChars for lowercase mapping
139.234 -
139.235 -Followed by the UChars for lowercase, uppercase, titlecase mappings in this order.
139.236 -
139.237 -For case folding mappings, the 32-bit exception word contains:
139.238 -31..24 number of UChars used for the full mapping
139.239 -23..16 reserved
139.240 -15.. 0 UChar offset from the beginning of the UChars array where the
139.241 - UChars for the special case mappings are stored in the following format:
139.242 -
139.243 -Format of case folding UChars:
139.244 -Two UChars contain the simple mapping as follows:
139.245 - 0, 0 no simple mapping
139.246 - BMP,0 a simple mapping to a BMP code point
139.247 - s1, s2 a simple mapping to a supplementary code point stored as two surrogates
139.248 -This is followed by the UChars for the full case folding mappings.
139.249 -
139.250 -Example:
139.251 -U+2160, ROMAN NUMERAL ONE, needs an exception because it has a lowercase
139.252 -mapping and a numeric value.
139.253 -Its exception values would be stored as 3 uint32_t words:
139.254 -
139.255 -- flags=0x0a (see above) with combining class 0
139.256 -- lowercase mapping 0x2170
139.257 -- numeric value=1
139.258 -
139.259 ---- Additional properties (new in format version 2.1) ---
139.260 -
139.261 -The second trie for additional properties (AT) is also a UTrie with 16-bit data.
139.262 -The data words consist of 32-bit unit indexes (not row indexes!) into the
139.263 -table of unique properties vectors (PV).
139.264 -Each vector contains a set of properties.
139.265 -The width of a vector (number of uint32_t per row) may change
139.266 -with the formatVersion, it is stored in i5.
139.267 -
139.268 -Current properties: see icu/source/common/uprops.h
139.269 -
139.270 ---- Changes in format version 3.1 ---
139.271 -
139.272 -See i10 maxValues above, contains only UBLOCK_COUNT and USCRIPT_CODE_LIMIT.
139.273 -
139.274 ---- Changes in format version 3.2 ---
139.275 -
139.276 -- The tries use linear Latin-1 ranges.
139.277 -- The additional properties bits store full properties XYZ instead
139.278 - of partial Other_XYZ, so that changes in the derivation formulas
139.279 - need not be tracked in runtime library code.
139.280 -- Joining Type and Line Break are also stored completely, so that uprops.c
139.281 - needs no runtime formulas for enumerated properties either.
139.282 -- Store the case-sensitive flag in the main properties word.
139.283 -- i10 also contains U_LB_COUNT and U_EA_COUNT.
139.284 -- i11 contains maxValues2 for vector word 2.
139.285 -
139.286 ------------------------------------------------------------------------------ */
139.287 -
139.288 final class UCharacterPropertyReader implements ICUBinary.Authenticate
139.289 {
139.290 // public methods ----------------------------------------------------
139.291 @@ -315,7 +73,6 @@
139.292 * <p>Protected constructor.</p>
139.293 * @param inputStream ICU uprop.dat file input stream
139.294 * @exception IOException throw if data file fails authentication
139.295 - * @draft 2.1
139.296 */
139.297 protected UCharacterPropertyReader(InputStream inputStream)
139.298 throws IOException
139.299 @@ -331,8 +88,7 @@
139.300 * <p>Reads uprops.icu, parse it into blocks of data to be stored in
139.301 * UCharacterProperty.</P
139.302 * @param ucharppty UCharacterProperty instance
139.303 - * @exception thrown when data reading fails
139.304 - * @draft 2.1
139.305 + * @exception IOException thrown when data reading fails
139.306 */
139.307 protected void read(UCharacterProperty ucharppty) throws IOException
139.308 {
139.309 @@ -362,38 +118,30 @@
139.310
139.311 // read the trie index block
139.312 // m_props_index_ in terms of ints
139.313 - ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, ucharppty);
139.314 + ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, null);
139.315
139.316 - // reads the 32 bit properties block
139.317 + // skip the 32 bit properties block
139.318 int size = m_exceptionOffset_ - m_propertyOffset_;
139.319 - ucharppty.m_property_ = new int[size];
139.320 - for (int i = 0; i < size; i ++) {
139.321 - ucharppty.m_property_[i] = m_dataInputStream_.readInt();
139.322 - }
139.323 + m_dataInputStream_.skipBytes(size * 4);
139.324
139.325 // reads the 32 bit exceptions block
139.326 size = m_caseOffset_ - m_exceptionOffset_;
139.327 - ucharppty.m_exception_ = new int[size];
139.328 - for (int i = 0; i < size; i ++) {
139.329 - ucharppty.m_exception_[i] = m_dataInputStream_.readInt();
139.330 - }
139.331 + m_dataInputStream_.skipBytes(size * 4);
139.332
139.333 // reads the 32 bit case block
139.334 size = (m_additionalOffset_ - m_caseOffset_) << 1;
139.335 - ucharppty.m_case_ = new char[size];
139.336 - for (int i = 0; i < size; i ++) {
139.337 - ucharppty.m_case_[i] = m_dataInputStream_.readChar();
139.338 - }
139.339 + m_dataInputStream_.skipBytes(size * 2);
139.340
139.341 - // reads the additional property block
139.342 - ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_,
139.343 - ucharppty);
139.344 + if(m_additionalColumnsCount_ > 0) {
139.345 + // reads the additional property block
139.346 + ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_, null);
139.347
139.348 - // additional properties
139.349 - size = m_reservedOffset_ - m_additionalVectorsOffset_;
139.350 - ucharppty.m_additionalVectors_ = new int[size];
139.351 - for (int i = 0; i < size; i ++) {
139.352 - ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt();
139.353 + // additional properties
139.354 + size = m_reservedOffset_ - m_additionalVectorsOffset_;
139.355 + ucharppty.m_additionalVectors_ = new int[size];
139.356 + for (int i = 0; i < size; i ++) {
139.357 + ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt();
139.358 + }
139.359 }
139.360
139.361 m_dataInputStream_.close();
139.362 @@ -428,12 +176,15 @@
139.363 private byte m_unicodeVersion_[];
139.364
139.365 /**
139.366 - * File format version that this class understands.
139.367 - * No guarantees are made if a older version is used
139.368 + * Data format "UPro".
139.369 */
139.370 private static final byte DATA_FORMAT_ID_[] = {(byte)0x55, (byte)0x50,
139.371 (byte)0x72, (byte)0x6F};
139.372 - private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x3, (byte)0x1,
139.373 + /**
139.374 + * Format version; this code works with all versions with the same major
139.375 + * version number and the same Trie bit distribution.
139.376 + */
139.377 + private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x5, (byte)0,
139.378 (byte)Trie.INDEX_STAGE_1_SHIFT_,
139.379 (byte)Trie.INDEX_STAGE_2_SHIFT_};
139.380 }
140.1 --- a/src/share/classes/sun/text/normalizer/UProperty.java Thu Apr 16 17:42:00 2009 +0100
140.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
140.3 @@ -1,80 +0,0 @@
140.4 -/*
140.5 - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
140.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
140.7 - *
140.8 - * This code is free software; you can redistribute it and/or modify it
140.9 - * under the terms of the GNU General Public License version 2 only, as
140.10 - * published by the Free Software Foundation. Sun designates this
140.11 - * particular file as subject to the "Classpath" exception as provided
140.12 - * by Sun in the LICENSE file that accompanied this code.
140.13 - *
140.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
140.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
140.16 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
140.17 - * version 2 for more details (a copy is included in the LICENSE file that
140.18 - * accompanied this code).
140.19 - *
140.20 - * You should have received a copy of the GNU General Public License version
140.21 - * 2 along with this work; if not, write to the Free Software Foundation,
140.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
140.23 - *
140.24 - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
140.25 - * CA 95054 USA or visit www.sun.com if you need additional information or
140.26 - * have any questions.
140.27 - */
140.28 -
140.29 -/*
140.30 - *******************************************************************************
140.31 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
140.32 - * *
140.33 - * The original version of this source code and documentation is copyrighted *
140.34 - * and owned by IBM, These materials are provided under terms of a License *
140.35 - * Agreement between IBM and Sun. This technology is protected by multiple *
140.36 - * US and International patents. This notice and attribution to IBM may not *
140.37 - * to removed. *
140.38 - *******************************************************************************
140.39 - */
140.40 -
140.41 -package sun.text.normalizer;
140.42 -
140.43 -/**
140.44 - * <p>Selection constants for Unicode properties. </p>
140.45 - * <p>These constants are used in functions like
140.46 - * UCharacter.hasBinaryProperty(int) to select one of the Unicode properties.
140.47 - * </p>
140.48 - * <p>The properties APIs are intended to reflect Unicode properties as
140.49 - * defined in the Unicode Character Database (UCD) and Unicode Technical
140.50 - * Reports (UTR).</p>
140.51 - * <p>For details about the properties see <a href=http://www.unicode.org>
140.52 - * http://www.unicode.org</a>.</p>
140.53 - * <p>For names of Unicode properties see the UCD file PropertyAliases.txt.
140.54 - * </p>
140.55 - * <p>Important: If ICU is built with UCD files from Unicode versions below
140.56 - * 3.2, then properties marked with "new" are not or not fully
140.57 - * available. Check UCharacter.getUnicodeVersion() to be sure.</p>
140.58 - * @author Syn Wee Quek
140.59 - * @stable ICU 2.6
140.60 - * @see com.ibm.icu.lang.UCharacter
140.61 - */
140.62 -public interface UProperty
140.63 -{
140.64 - // public data member --------------------------------------------------
140.65 -
140.66 - /**
140.67 - * Enumerated property Hangul_Syllable_Type, new in Unicode 4.
140.68 - * Returns HangulSyllableType values.
140.69 - * @stable ICU 2.6
140.70 - */
140.71 - public static final int HANGUL_SYLLABLE_TYPE = 0x100B;
140.72 -
140.73 - /**
140.74 - * Bitmask property General_Category_Mask.
140.75 - * This is the General_Category property returned as a bit mask.
140.76 - * When used in UCharacter.getIntPropertyValue(c),
140.77 - * returns bit masks for UCharacterCategory values where exactly one bit is set.
140.78 - * When used with UCharacter.getPropertyValueName() and UCharacter.getPropertyValueEnum(),
140.79 - * a multi-bit mask is used for sets of categories like "Letters".
140.80 - * @stable ICU 2.4
140.81 - */
140.82 - public static final int GENERAL_CATEGORY_MASK = 0x2000;
140.83 -}
141.1 --- a/src/share/classes/sun/text/normalizer/UTF16.java Thu Apr 16 17:42:00 2009 +0100
141.2 +++ b/src/share/classes/sun/text/normalizer/UTF16.java Thu Apr 16 19:10:32 2009 -0700
141.3 @@ -1,5 +1,5 @@
141.4 /*
141.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
141.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
141.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
141.8 *
141.9 * This code is free software; you can redistribute it and/or modify it
141.10 @@ -22,10 +22,9 @@
141.11 * CA 95054 USA or visit www.sun.com if you need additional information or
141.12 * have any questions.
141.13 */
141.14 -
141.15 /*
141.16 *******************************************************************************
141.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
141.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
141.19 * *
141.20 * The original version of this source code and documentation is copyrighted *
141.21 * and owned by IBM, These materials are provided under terms of a License *
141.22 @@ -184,15 +183,16 @@
141.23 * bounds.
141.24 * @stable ICU 2.1
141.25 */
141.26 - public static int charAt(String source, int offset16)
141.27 - {
141.28 - if (offset16 < 0 || offset16 >= source.length()) {
141.29 - throw new StringIndexOutOfBoundsException(offset16);
141.30 + public static int charAt(String source, int offset16) {
141.31 + char single = source.charAt(offset16);
141.32 + if (single < LEAD_SURROGATE_MIN_VALUE) {
141.33 + return single;
141.34 }
141.35 + return _charAt(source, offset16, single);
141.36 + }
141.37
141.38 - char single = source.charAt(offset16);
141.39 - if (single < LEAD_SURROGATE_MIN_VALUE ||
141.40 - single > TRAIL_SURROGATE_MAX_VALUE) {
141.41 + private static int _charAt(String source, int offset16, char single) {
141.42 + if (single > TRAIL_SURROGATE_MAX_VALUE) {
141.43 return single;
141.44 }
141.45
141.46 @@ -201,29 +201,23 @@
141.47 // low, look both directions.
141.48
141.49 if (single <= LEAD_SURROGATE_MAX_VALUE) {
141.50 - ++ offset16;
141.51 + ++offset16;
141.52 if (source.length() != offset16) {
141.53 char trail = source.charAt(offset16);
141.54 - if (trail >= TRAIL_SURROGATE_MIN_VALUE &&
141.55 - trail <= TRAIL_SURROGATE_MAX_VALUE) {
141.56 - return UCharacterProperty.getRawSupplementary(single,
141.57 - trail);
141.58 + if (trail >= TRAIL_SURROGATE_MIN_VALUE && trail <= TRAIL_SURROGATE_MAX_VALUE) {
141.59 + return UCharacterProperty.getRawSupplementary(single, trail);
141.60 + }
141.61 + }
141.62 + } else {
141.63 + --offset16;
141.64 + if (offset16 >= 0) {
141.65 + // single is a trail surrogate so
141.66 + char lead = source.charAt(offset16);
141.67 + if (lead >= LEAD_SURROGATE_MIN_VALUE && lead <= LEAD_SURROGATE_MAX_VALUE) {
141.68 + return UCharacterProperty.getRawSupplementary(lead, single);
141.69 }
141.70 }
141.71 }
141.72 - else
141.73 - {
141.74 - -- offset16;
141.75 - if (offset16 >= 0) {
141.76 - // single is a trail surrogate so
141.77 - char lead = source.charAt(offset16);
141.78 - if (lead >= LEAD_SURROGATE_MIN_VALUE &&
141.79 - lead <= LEAD_SURROGATE_MAX_VALUE) {
141.80 - return UCharacterProperty.getRawSupplementary(lead,
141.81 - single);
141.82 - }
141.83 - }
141.84 - }
141.85 return single; // return unmatched surrogate
141.86 }
141.87
142.1 --- a/src/share/classes/sun/text/normalizer/UnicodeSet.java Thu Apr 16 17:42:00 2009 +0100
142.2 +++ b/src/share/classes/sun/text/normalizer/UnicodeSet.java Thu Apr 16 19:10:32 2009 -0700
142.3 @@ -1,5 +1,5 @@
142.4 /*
142.5 - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
142.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
142.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
142.8 *
142.9 * This code is free software; you can redistribute it and/or modify it
142.10 @@ -22,10 +22,9 @@
142.11 * CA 95054 USA or visit www.sun.com if you need additional information or
142.12 * have any questions.
142.13 */
142.14 -
142.15 /*
142.16 *******************************************************************************
142.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
142.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
142.19 * *
142.20 * The original version of this source code and documentation is copyrighted *
142.21 * and owned by IBM, These materials are provided under terms of a License *
142.22 @@ -38,11 +37,8 @@
142.23 package sun.text.normalizer;
142.24
142.25 import java.text.ParsePosition;
142.26 -import java.util.Map;
142.27 -import java.util.HashMap;
142.28 +import java.util.Iterator;
142.29 import java.util.TreeSet;
142.30 -import java.util.Iterator;
142.31 -import java.util.Collection;
142.32
142.33 /**
142.34 * A mutable set of Unicode characters and multicharacter strings. Objects of this class
142.35 @@ -130,8 +126,8 @@
142.36 * "[:Lu:]" and the Perl-like syntax "\p{Lu}" are recognized. For a
142.37 * complete list of supported property patterns, see the User's Guide
142.38 * for UnicodeSet at
142.39 - * <a href="http://oss.software.ibm.com/icu/userguide/unicodeSet.html">
142.40 - * http://oss.software.ibm.com/icu/userguide/unicodeSet.html</a>.
142.41 + * <a href="http://www.icu-project.org/userguide/unicodeSet.html">
142.42 + * http://www.icu-project.org/userguide/unicodeSet.html</a>.
142.43 * Actual determination of property data is defined by the underlying
142.44 * Unicode database as implemented by UCharacter.
142.45 *
142.46 @@ -271,9 +267,11 @@
142.47 * </tr>
142.48 * </table>
142.49 * </blockquote>
142.50 + * <p>To iterate over contents of UnicodeSet, use UnicodeSetIterator class.
142.51 *
142.52 * @author Alan Liu
142.53 * @stable ICU 2.0
142.54 + * @see UnicodeSetIterator
142.55 */
142.56 public class UnicodeSet implements UnicodeMatcher {
142.57
142.58 @@ -322,7 +320,7 @@
142.59 * properties are all exactly alike, e.g. CJK Ideographs from
142.60 * U+4E00 to U+9FA5.
142.61 */
142.62 - private static UnicodeSet INCLUSIONS = null;
142.63 + private static UnicodeSet INCLUSIONS[] = null;
142.64
142.65 //----------------------------------------------------------------
142.66 // Public API
142.67 @@ -471,17 +469,18 @@
142.68 return result;
142.69 }
142.70
142.71 - return _generatePattern(result, escapeUnprintable);
142.72 + return _generatePattern(result, escapeUnprintable, true);
142.73 }
142.74
142.75 /**
142.76 * Generate and append a string representation of this set to result.
142.77 * This does not use this.pat, the cleaned up copy of the string
142.78 * passed to applyPattern().
142.79 - * @stable ICU 2.0
142.80 + * @param includeStrings if false, doesn't include the strings.
142.81 + * @stable ICU 3.8
142.82 */
142.83 public StringBuffer _generatePattern(StringBuffer result,
142.84 - boolean escapeUnprintable) {
142.85 + boolean escapeUnprintable, boolean includeStrings) {
142.86 result.append('[');
142.87
142.88 int count = getRangeCount();
142.89 @@ -524,7 +523,7 @@
142.90 }
142.91 }
142.92
142.93 - if (strings.size() > 0) {
142.94 + if (includeStrings && strings.size() > 0) {
142.95 Iterator it = strings.iterator();
142.96 while (it.hasNext()) {
142.97 result.append('{');
142.98 @@ -535,19 +534,8 @@
142.99 return result.append(']');
142.100 }
142.101
142.102 - /**
142.103 - * Adds the specified range to this set if it is not already
142.104 - * present. If this set already contains the specified range,
142.105 - * the call leaves this set unchanged. If <code>end > start</code>
142.106 - * then an empty range is added, leaving the set unchanged.
142.107 - *
142.108 - * @param start first character, inclusive, of range to be added
142.109 - * to this set.
142.110 - * @param end last character, inclusive, of range to be added
142.111 - * to this set.
142.112 - * @stable ICU 2.0
142.113 - */
142.114 - public UnicodeSet add(int start, int end) {
142.115 + // for internal use, after checkFrozen has been called
142.116 + private UnicodeSet add_unchecked(int start, int end) {
142.117 if (start < MIN_VALUE || start > MAX_VALUE) {
142.118 throw new IllegalArgumentException("Invalid code point U+" + Utility.hex(start, 6));
142.119 }
142.120 @@ -569,6 +557,11 @@
142.121 * @stable ICU 2.0
142.122 */
142.123 public final UnicodeSet add(int c) {
142.124 + return add_unchecked(c);
142.125 + }
142.126 +
142.127 + // for internal use only, after checkFrozen has been called
142.128 + private final UnicodeSet add_unchecked(int c) {
142.129 if (c < MIN_VALUE || c > MAX_VALUE) {
142.130 throw new IllegalArgumentException("Invalid code point U+" + Utility.hex(c, 6));
142.131 }
142.132 @@ -663,13 +656,12 @@
142.133 * @stable ICU 2.0
142.134 */
142.135 public final UnicodeSet add(String s) {
142.136 -
142.137 int cp = getSingleCP(s);
142.138 if (cp < 0) {
142.139 strings.add(s);
142.140 pat = null;
142.141 } else {
142.142 - add(cp, cp);
142.143 + add_unchecked(cp, cp);
142.144 }
142.145 return this;
142.146 }
142.147 @@ -981,7 +973,6 @@
142.148 */
142.149 void applyPattern(RuleCharacterIterator chars, SymbolTable symbols,
142.150 StringBuffer rebuiltPat, int options) {
142.151 -
142.152 // Syntax characters: [ ] ^ - & { }
142.153
142.154 // Recognized special forms for chars, sets: c-c s-s s&s
142.155 @@ -992,7 +983,7 @@
142.156 opts |= RuleCharacterIterator.SKIP_WHITESPACE;
142.157 }
142.158
142.159 - StringBuffer pat = new StringBuffer(), buf = null;
142.160 + StringBuffer patBuf = new StringBuffer(), buf = null;
142.161 boolean usePat = false;
142.162 UnicodeSet scratch = null;
142.163 Object backup = null;
142.164 @@ -1049,13 +1040,13 @@
142.165 } else {
142.166 // Handle opening '[' delimiter
142.167 mode = 1;
142.168 - pat.append('[');
142.169 + patBuf.append('[');
142.170 backup = chars.getPos(backup); // prepare to backup
142.171 c = chars.next(opts);
142.172 literal = chars.isEscaped();
142.173 if (c == '^' && !literal) {
142.174 invert = true;
142.175 - pat.append('^');
142.176 + patBuf.append('^');
142.177 backup = chars.getPos(backup); // prepare to backup
142.178 c = chars.next(opts);
142.179 literal = chars.isEscaped();
142.180 @@ -1093,13 +1084,13 @@
142.181 if (op != 0) {
142.182 syntaxError(chars, "Char expected after operator");
142.183 }
142.184 - add(lastChar, lastChar);
142.185 - _appendToPat(pat, lastChar, false);
142.186 + add_unchecked(lastChar, lastChar);
142.187 + _appendToPat(patBuf, lastChar, false);
142.188 lastItem = op = 0;
142.189 }
142.190
142.191 if (op == '-' || op == '&') {
142.192 - pat.append(op);
142.193 + patBuf.append(op);
142.194 }
142.195
142.196 if (nested == null) {
142.197 @@ -1108,14 +1099,14 @@
142.198 }
142.199 switch (setMode) {
142.200 case 1:
142.201 - nested.applyPattern(chars, symbols, pat, options);
142.202 + nested.applyPattern(chars, symbols, patBuf, options);
142.203 break;
142.204 case 2:
142.205 chars.skipIgnored(opts);
142.206 - nested.applyPropertyPattern(chars, pat, symbols);
142.207 + nested.applyPropertyPattern(chars, patBuf, symbols);
142.208 break;
142.209 case 3: // `nested' already parsed
142.210 - nested._toPattern(pat, false);
142.211 + nested._toPattern(patBuf, false);
142.212 break;
142.213 }
142.214
142.215 @@ -1158,17 +1149,17 @@
142.216 switch (c) {
142.217 case ']':
142.218 if (lastItem == 1) {
142.219 - add(lastChar, lastChar);
142.220 - _appendToPat(pat, lastChar, false);
142.221 + add_unchecked(lastChar, lastChar);
142.222 + _appendToPat(patBuf, lastChar, false);
142.223 }
142.224 // Treat final trailing '-' as a literal
142.225 if (op == '-') {
142.226 - add(op, op);
142.227 - pat.append(op);
142.228 + add_unchecked(op, op);
142.229 + patBuf.append(op);
142.230 } else if (op == '&') {
142.231 syntaxError(chars, "Trailing '&'");
142.232 }
142.233 - pat.append(']');
142.234 + patBuf.append(']');
142.235 mode = 2;
142.236 continue;
142.237 case '-':
142.238 @@ -1178,11 +1169,11 @@
142.239 continue;
142.240 } else {
142.241 // Treat final trailing '-' as a literal
142.242 - add(c, c);
142.243 + add_unchecked(c, c);
142.244 c = chars.next(opts);
142.245 literal = chars.isEscaped();
142.246 if (c == ']' && !literal) {
142.247 - pat.append("-]");
142.248 + patBuf.append("-]");
142.249 mode = 2;
142.250 continue;
142.251 }
142.252 @@ -1202,8 +1193,8 @@
142.253 syntaxError(chars, "Missing operand after operator");
142.254 }
142.255 if (lastItem == 1) {
142.256 - add(lastChar, lastChar);
142.257 - _appendToPat(pat, lastChar, false);
142.258 + add_unchecked(lastChar, lastChar);
142.259 + _appendToPat(patBuf, lastChar, false);
142.260 }
142.261 lastItem = 0;
142.262 if (buf == null) {
142.263 @@ -1228,9 +1219,9 @@
142.264 // we don't need to drop through to the further
142.265 // processing
142.266 add(buf.toString());
142.267 - pat.append('{');
142.268 - _appendToPat(pat, buf.toString(), false);
142.269 - pat.append('}');
142.270 + patBuf.append('{');
142.271 + _appendToPat(patBuf, buf.toString(), false);
142.272 + patBuf.append('}');
142.273 continue;
142.274 case SymbolTable.SYMBOL_REF:
142.275 // symbols nosymbols
142.276 @@ -1250,12 +1241,12 @@
142.277 }
142.278 if (anchor && op == 0) {
142.279 if (lastItem == 1) {
142.280 - add(lastChar, lastChar);
142.281 - _appendToPat(pat, lastChar, false);
142.282 + add_unchecked(lastChar, lastChar);
142.283 + _appendToPat(patBuf, lastChar, false);
142.284 }
142.285 - add(UnicodeMatcher.ETHER);
142.286 + add_unchecked(UnicodeMatcher.ETHER);
142.287 usePat = true;
142.288 - pat.append(SymbolTable.SYMBOL_REF).append(']');
142.289 + patBuf.append(SymbolTable.SYMBOL_REF).append(']');
142.290 mode = 2;
142.291 continue;
142.292 }
142.293 @@ -1281,14 +1272,14 @@
142.294 // these are most likely typos.
142.295 syntaxError(chars, "Invalid range");
142.296 }
142.297 - add(lastChar, c);
142.298 - _appendToPat(pat, lastChar, false);
142.299 - pat.append(op);
142.300 - _appendToPat(pat, c, false);
142.301 + add_unchecked(lastChar, c);
142.302 + _appendToPat(patBuf, lastChar, false);
142.303 + patBuf.append(op);
142.304 + _appendToPat(patBuf, c, false);
142.305 lastItem = op = 0;
142.306 } else {
142.307 - add(lastChar, lastChar);
142.308 - _appendToPat(pat, lastChar, false);
142.309 + add_unchecked(lastChar, lastChar);
142.310 + _appendToPat(patBuf, lastChar, false);
142.311 lastChar = c;
142.312 }
142.313 break;
142.314 @@ -1315,9 +1306,9 @@
142.315 // Use the rebuilt pattern (pat) only if necessary. Prefer the
142.316 // generated pattern.
142.317 if (usePat) {
142.318 - rebuiltPat.append(pat.toString());
142.319 + rebuiltPat.append(patBuf.toString());
142.320 } else {
142.321 - _generatePattern(rebuiltPat, false);
142.322 + _generatePattern(rebuiltPat, false, true);
142.323 }
142.324 }
142.325
142.326 @@ -1590,7 +1581,9 @@
142.327
142.328 private static class VersionFilter implements Filter {
142.329 VersionInfo version;
142.330 +
142.331 VersionFilter(VersionInfo version) { this.version = version; }
142.332 +
142.333 public boolean contains(int ch) {
142.334 VersionInfo v = UCharacter.getAge(ch);
142.335 // Reference comparison ok; VersionInfo caches and reuses
142.336 @@ -1600,18 +1593,28 @@
142.337 }
142.338 }
142.339
142.340 - private static synchronized UnicodeSet getInclusions() {
142.341 + private static synchronized UnicodeSet getInclusions(int src) {
142.342 if (INCLUSIONS == null) {
142.343 - UCharacterProperty property = UCharacterProperty.getInstance();
142.344 - INCLUSIONS = property.getInclusions();
142.345 + INCLUSIONS = new UnicodeSet[UCharacterProperty.SRC_COUNT];
142.346 }
142.347 - return INCLUSIONS;
142.348 + if(INCLUSIONS[src] == null) {
142.349 + UnicodeSet incl = new UnicodeSet();
142.350 + switch(src) {
142.351 + case UCharacterProperty.SRC_PROPSVEC:
142.352 + UCharacterProperty.getInstance().upropsvec_addPropertyStarts(incl);
142.353 + break;
142.354 + default:
142.355 + throw new IllegalStateException("UnicodeSet.getInclusions(unknown src "+src+")");
142.356 + }
142.357 + INCLUSIONS[src] = incl;
142.358 + }
142.359 + return INCLUSIONS[src];
142.360 }
142.361
142.362 /**
142.363 * Generic filter-based scanning code for UCD property UnicodeSets.
142.364 */
142.365 - private UnicodeSet applyFilter(Filter filter) {
142.366 + private UnicodeSet applyFilter(Filter filter, int src) {
142.367 // Walk through all Unicode characters, noting the start
142.368 // and end of each range for which filter.contain(c) is
142.369 // true. Add each range to a set.
142.370 @@ -1629,7 +1632,7 @@
142.371 clear();
142.372
142.373 int startHasProperty = -1;
142.374 - UnicodeSet inclusions = getInclusions();
142.375 + UnicodeSet inclusions = getInclusions(src);
142.376 int limitRange = inclusions.getRangeCount();
142.377
142.378 for (int j=0; j<limitRange; ++j) {
142.379 @@ -1646,19 +1649,18 @@
142.380 startHasProperty = ch;
142.381 }
142.382 } else if (startHasProperty >= 0) {
142.383 - add(startHasProperty, ch-1);
142.384 + add_unchecked(startHasProperty, ch-1);
142.385 startHasProperty = -1;
142.386 }
142.387 }
142.388 }
142.389 if (startHasProperty >= 0) {
142.390 - add(startHasProperty, 0x10FFFF);
142.391 + add_unchecked(startHasProperty, 0x10FFFF);
142.392 }
142.393
142.394 return this;
142.395 }
142.396
142.397 -
142.398 /**
142.399 * Remove leading and trailing rule white space and compress
142.400 * internal rule white space to a single space character.
142.401 @@ -1686,10 +1688,6 @@
142.402 return buf.toString();
142.403 }
142.404
142.405 - //----------------------------------------------------------------
142.406 - // Property set API
142.407 - //----------------------------------------------------------------
142.408 -
142.409 /**
142.410 * Modifies this set to contain those code points which have the
142.411 * given value for the given property. Prior contents of this
142.412 @@ -1699,22 +1697,21 @@
142.413 * @param symbols if not null, then symbols are first called to see if a property
142.414 * is available. If true, then everything else is skipped.
142.415 * @return this set
142.416 - * @draft ICU 3.2
142.417 - * @deprecated This is a draft API and might change in a future release of ICU.
142.418 + * @stable ICU 3.2
142.419 */
142.420 public UnicodeSet applyPropertyAlias(String propertyAlias,
142.421 String valueAlias, SymbolTable symbols) {
142.422 - if (propertyAlias.equals("Age"))
142.423 - {
142.424 - // Must munge name, since
142.425 - // VersionInfo.getInstance() does not do
142.426 - // 'loose' matching.
142.427 - VersionInfo version = VersionInfo.getInstance(mungeCharName(valueAlias));
142.428 - applyFilter(new VersionFilter(version));
142.429 - return this;
142.430 - }
142.431 - else
142.432 - throw new IllegalArgumentException("Unsupported property");
142.433 + if (valueAlias.length() > 0) {
142.434 + if (propertyAlias.equals("Age")) {
142.435 + // Must munge name, since
142.436 + // VersionInfo.getInstance() does not do
142.437 + // 'loose' matching.
142.438 + VersionInfo version = VersionInfo.getInstance(mungeCharName(valueAlias));
142.439 + applyFilter(new VersionFilter(version), UCharacterProperty.SRC_PROPSVEC);
142.440 + return this;
142.441 + }
142.442 + }
142.443 + throw new IllegalArgumentException("Unsupported property: " + propertyAlias);
142.444 }
142.445
142.446 /**
142.447 @@ -1840,14 +1837,14 @@
142.448 */
142.449 private void applyPropertyPattern(RuleCharacterIterator chars,
142.450 StringBuffer rebuiltPat, SymbolTable symbols) {
142.451 - String pat = chars.lookahead();
142.452 + String patStr = chars.lookahead();
142.453 ParsePosition pos = new ParsePosition(0);
142.454 - applyPropertyPattern(pat, pos, symbols);
142.455 + applyPropertyPattern(patStr, pos, symbols);
142.456 if (pos.getIndex() == 0) {
142.457 syntaxError(chars, "Invalid property pattern");
142.458 }
142.459 chars.jumpahead(pos.getIndex());
142.460 - rebuiltPat.append(pat.substring(0, pos.getIndex()));
142.461 + rebuiltPat.append(patStr.substring(0, pos.getIndex()));
142.462 }
142.463
142.464 //----------------------------------------------------------------
142.465 @@ -1860,8 +1857,9 @@
142.466 * which UCharacterProperty.isRuleWhiteSpace() returns true,
142.467 * unless they are quoted or escaped. This may be ORed together
142.468 * with other selectors.
142.469 - * @internal
142.470 + * @stable ICU 3.8
142.471 */
142.472 public static final int IGNORE_SPACE = 1;
142.473
142.474 }
142.475 +
143.1 --- a/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java Thu Apr 16 17:42:00 2009 +0100
143.2 +++ b/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java Thu Apr 16 19:10:32 2009 -0700
143.3 @@ -1,5 +1,5 @@
143.4 /*
143.5 - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
143.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
143.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
143.8 *
143.9 * This code is free software; you can redistribute it and/or modify it
143.10 @@ -22,10 +22,9 @@
143.11 * CA 95054 USA or visit www.sun.com if you need additional information or
143.12 * have any questions.
143.13 */
143.14 -
143.15 /*
143.16 *******************************************************************************
143.17 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
143.18 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
143.19 * *
143.20 * The original version of this source code and documentation is copyrighted *
143.21 * and owned by IBM, These materials are provided under terms of a License *
143.22 @@ -167,8 +166,8 @@
143.23 * @param set the set to iterate over.
143.24 * @stable ICU 2.0
143.25 */
143.26 - public void reset(UnicodeSet set) {
143.27 - this.set = set;
143.28 + public void reset(UnicodeSet uset) {
143.29 + set = uset;
143.30 reset();
143.31 }
143.32
143.33 @@ -213,8 +212,8 @@
143.34 /**
143.35 * @internal
143.36 */
143.37 - protected void loadRange(int range) {
143.38 - nextElement = set.getRangeStart(range);
143.39 - endElement = set.getRangeEnd(range);
143.40 + protected void loadRange(int aRange) {
143.41 + nextElement = set.getRangeStart(aRange);
143.42 + endElement = set.getRangeEnd(aRange);
143.43 }
143.44 }
144.1 --- a/src/share/classes/sun/text/normalizer/Utility.java Thu Apr 16 17:42:00 2009 +0100
144.2 +++ b/src/share/classes/sun/text/normalizer/Utility.java Thu Apr 16 19:10:32 2009 -0700
144.3 @@ -1,5 +1,5 @@
144.4 /*
144.5 - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
144.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
144.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
144.8 *
144.9 * This code is free software; you can redistribute it and/or modify it
144.10 @@ -24,7 +24,7 @@
144.11 */
144.12 /*
144.13 *******************************************************************************
144.14 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
144.15 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
144.16 * *
144.17 * The original version of this source code and documentation is copyrighted *
144.18 * and owned by IBM, These materials are provided under terms of a License *
144.19 @@ -36,11 +36,28 @@
144.20
144.21 package sun.text.normalizer;
144.22
144.23 -// This class contains utility functions so testing not needed
144.24 -///CLOVER:OFF
144.25 public final class Utility {
144.26
144.27 /**
144.28 + * Convenience utility to compare two Object[]s
144.29 + * Ought to be in System.
144.30 + * @param len the length to compare.
144.31 + * The start indices and start+len must be valid.
144.32 + */
144.33 + public final static boolean arrayRegionMatches(char[] source, int sourceStart,
144.34 + char[] target, int targetStart,
144.35 + int len)
144.36 + {
144.37 + int sourceEnd = sourceStart + len;
144.38 + int delta = targetStart - sourceStart;
144.39 + for (int i = sourceStart; i < sourceEnd; i++) {
144.40 + if (source[i]!=target[i + delta])
144.41 + return false;
144.42 + }
144.43 + return true;
144.44 + }
144.45 +
144.46 + /**
144.47 * Convert characters outside the range U+0020 to U+007F to
144.48 * Unicode escapes, and convert backslash to a double backslash.
144.49 */
144.50 @@ -344,7 +361,6 @@
144.51 return false;
144.52 }
144.53
144.54 - //// for StringPrep
144.55 /**
144.56 * Similar to StringBuffer.getChars, version 1.3.
144.57 * Since JDK 1.2 implements StringBuffer.getChars differently, this method
144.58 @@ -356,7 +372,6 @@
144.59 * @param dst char array to store the retrieved chars
144.60 * @param dstBegin offset to the start of the destination char array to
144.61 * store the retrieved chars
144.62 - * @draft since ICU4J 2.0
144.63 */
144.64 public static void getChars(StringBuffer src, int srcBegin, int srcEnd,
144.65 char dst[], int dstBegin)
144.66 @@ -367,23 +382,4 @@
144.67 src.getChars(srcBegin, srcEnd, dst, dstBegin);
144.68 }
144.69
144.70 - /**
144.71 - * Convenience utility to compare two char[]s.
144.72 - * @param len the length to compare.
144.73 - * The start indices and start+len must be valid.
144.74 - */
144.75 - public final static boolean arrayRegionMatches(char[] source, int sourceStart,
144.76 - char[] target, int targetStart,
144.77 - int len)
144.78 - {
144.79 - int sourceEnd = sourceStart + len;
144.80 - int delta = targetStart - sourceStart;
144.81 - for (int i = sourceStart; i < sourceEnd; i++) {
144.82 - if (source[i] != target[i + delta])
144.83 - return false;
144.84 - }
144.85 - return true;
144.86 - }
144.87 -
144.88 }
144.89 -///CLOVER:ON
145.1 --- a/src/share/classes/sun/text/normalizer/VersionInfo.java Thu Apr 16 17:42:00 2009 +0100
145.2 +++ b/src/share/classes/sun/text/normalizer/VersionInfo.java Thu Apr 16 19:10:32 2009 -0700
145.3 @@ -1,5 +1,5 @@
145.4 /*
145.5 - * Portions Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
145.6 + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
145.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
145.8 *
145.9 * This code is free software; you can redistribute it and/or modify it
145.10 @@ -24,7 +24,7 @@
145.11 */
145.12 /*
145.13 *******************************************************************************
145.14 - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved *
145.15 + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved *
145.16 * *
145.17 * The original version of this source code and documentation is copyrighted *
145.18 * and owned by IBM, These materials are provided under terms of a License *
146.1 Binary file src/share/classes/sun/text/resources/ubidi.icu has changed
147.1 Binary file src/share/classes/sun/text/resources/unorm.icu has changed
148.1 Binary file src/share/classes/sun/text/resources/uprops.icu has changed
149.1 --- a/src/share/native/java/lang/ClassLoader.c Thu Apr 16 17:42:00 2009 +0100
149.2 +++ b/src/share/native/java/lang/ClassLoader.c Thu Apr 16 19:10:32 2009 -0700
149.3 @@ -1,5 +1,5 @@
149.4 /*
149.5 - * Copyright 1996-2005 Sun Microsystems, Inc. All Rights Reserved.
149.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
149.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
149.8 *
149.9 * This code is free software; you can redistribute it and/or modify it
149.10 @@ -437,3 +437,21 @@
149.11 (*env)->ReleaseStringUTFChars(env, name, cname);
149.12 return res;
149.13 }
149.14 +
149.15 +JNIEXPORT jobject JNICALL
149.16 +Java_java_lang_ClassLoader_getCaller(JNIEnv *env, jclass cls, jint index)
149.17 +{
149.18 + jobjectArray jcallerStack;
149.19 + int len;
149.20 +
149.21 + jcallerStack = JVM_GetClassContext(env);
149.22 + if ((*env)->ExceptionCheck(env)) {
149.23 + return NULL;
149.24 + }
149.25 + len = (*env)->GetArrayLength(env, jcallerStack);
149.26 + if (index < len) {
149.27 + return (*env)->GetObjectArrayElement(env, jcallerStack, index);
149.28 + }
149.29 + return NULL;
149.30 +}
149.31 +
150.1 --- a/src/share/native/java/util/zip/zip_util.c Thu Apr 16 17:42:00 2009 +0100
150.2 +++ b/src/share/native/java/util/zip/zip_util.c Thu Apr 16 19:10:32 2009 -0700
150.3 @@ -313,6 +313,38 @@
150.4 }
150.5
150.6 /*
150.7 + * Searches for the ZIP64 end of central directory (END) header. The
150.8 + * contents of the ZIP64 END header will be read and placed in end64buf.
150.9 + * Returns the file position of the ZIP64 END header, otherwise returns
150.10 + * -1 if the END header was not found or an error occurred.
150.11 + *
150.12 + * The ZIP format specifies the "position" of each related record as
150.13 + * ...
150.14 + * [central directory]
150.15 + * [zip64 end of central directory record]
150.16 + * [zip64 end of central directory locator]
150.17 + * [end of central directory record]
150.18 + *
150.19 + * The offset of zip64 end locator can be calculated from endpos as
150.20 + * "endpos - ZIP64_LOCHDR".
150.21 + * The "offset" of zip64 end record is stored in zip64 end locator.
150.22 + */
150.23 +static jlong
150.24 +findEND64(jzfile *zip, void *end64buf, jlong endpos)
150.25 +{
150.26 + char loc64[ZIP64_LOCHDR];
150.27 + jlong end64pos;
150.28 + if (readFullyAt(zip->zfd, loc64, ZIP64_LOCHDR, endpos - ZIP64_LOCHDR) == -1) {
150.29 + return -1; // end64 locator not found
150.30 + }
150.31 + end64pos = ZIP64_LOCOFF(loc64);
150.32 + if (readFullyAt(zip->zfd, end64buf, ZIP64_ENDHDR, end64pos) == -1) {
150.33 + return -1; // end64 record not found
150.34 + }
150.35 + return end64pos;
150.36 +}
150.37 +
150.38 +/*
150.39 * Returns a hash code value for a C-style NUL-terminated string.
150.40 */
150.41 static unsigned int
150.42 @@ -463,7 +495,7 @@
150.43 readCEN(jzfile *zip, jint knownTotal)
150.44 {
150.45 /* Following are unsigned 32-bit */
150.46 - jlong endpos, cenpos, cenlen;
150.47 + jlong endpos, end64pos, cenpos, cenlen, cenoff;
150.48 /* Following are unsigned 16-bit */
150.49 jint total, tablelen, i, j;
150.50 unsigned char *cenbuf = NULL;
150.51 @@ -474,6 +506,7 @@
150.52 jlong offset;
150.53 #endif
150.54 unsigned char endbuf[ENDHDR];
150.55 + jint endhdrlen = ENDHDR;
150.56 jzcell *entries;
150.57 jint *table;
150.58
150.59 @@ -490,13 +523,27 @@
150.60
150.61 /* Get position and length of central directory */
150.62 cenlen = ENDSIZ(endbuf);
150.63 + cenoff = ENDOFF(endbuf);
150.64 + total = ENDTOT(endbuf);
150.65 + if (cenlen == ZIP64_MAGICVAL || cenoff == ZIP64_MAGICVAL ||
150.66 + total == ZIP64_MAGICCOUNT) {
150.67 + unsigned char end64buf[ZIP64_ENDHDR];
150.68 + if ((end64pos = findEND64(zip, end64buf, endpos)) != -1) {
150.69 + cenlen = ZIP64_ENDSIZ(end64buf);
150.70 + cenoff = ZIP64_ENDOFF(end64buf);
150.71 + total = (jint)ZIP64_ENDTOT(end64buf);
150.72 + endpos = end64pos;
150.73 + endhdrlen = ZIP64_ENDHDR;
150.74 + }
150.75 + }
150.76 +
150.77 if (cenlen > endpos)
150.78 ZIP_FORMAT_ERROR("invalid END header (bad central directory size)");
150.79 cenpos = endpos - cenlen;
150.80
150.81 /* Get position of first local file (LOC) header, taking into
150.82 * account that there may be a stub prefixed to the zip file. */
150.83 - zip->locpos = cenpos - ENDOFF(endbuf);
150.84 + zip->locpos = cenpos - cenoff;
150.85 if (zip->locpos < 0)
150.86 ZIP_FORMAT_ERROR("invalid END header (bad central directory offset)");
150.87
150.88 @@ -527,7 +574,7 @@
150.89 out the page size in order to make offset to be multiples of
150.90 page size.
150.91 */
150.92 - zip->mlen = cenpos - offset + cenlen + ENDHDR;
150.93 + zip->mlen = cenpos - offset + cenlen + endhdrlen;
150.94 zip->offset = offset;
150.95 mappedAddr = mmap64(0, zip->mlen, PROT_READ, MAP_SHARED, zip->zfd, (off64_t) offset);
150.96 zip->maddr = (mappedAddr == (void*) MAP_FAILED) ? NULL :
150.97 @@ -551,8 +598,13 @@
150.98 * is a 2-byte field, but we (and other zip implementations)
150.99 * support approx. 2**31 entries, we do not trust ENDTOT, but
150.100 * treat it only as a strong hint. When we call ourselves
150.101 - * recursively, knownTotal will have the "true" value. */
150.102 - total = (knownTotal != -1) ? knownTotal : ENDTOT(endbuf);
150.103 + * recursively, knownTotal will have the "true" value.
150.104 + *
150.105 + * Keep this path alive even with the Zip64 END support added, just
150.106 + * for zip files that have more than 0xffff entries but don't have
150.107 + * the Zip64 enabled.
150.108 + */
150.109 + total = (knownTotal != -1) ? knownTotal : total;
150.110 entries = zip->entries = calloc(total, sizeof(entries[0]));
150.111 tablelen = zip->tablelen = ((total/2) | 1); // Odd -> fewer collisions
150.112 table = zip->table = malloc(tablelen * sizeof(table[0]));
150.113 @@ -854,6 +906,7 @@
150.114 static jzentry *
150.115 newEntry(jzfile *zip, jzcell *zc, AccessHint accessHint)
150.116 {
150.117 + jlong locoff;
150.118 jint nlen, elen, clen;
150.119 jzentry *ze;
150.120 char *cen;
150.121 @@ -880,18 +933,55 @@
150.122 ze->size = CENLEN(cen);
150.123 ze->csize = (CENHOW(cen) == STORED) ? 0 : CENSIZ(cen);
150.124 ze->crc = CENCRC(cen);
150.125 - ze->pos = -(zip->locpos + CENOFF(cen));
150.126 + locoff = CENOFF(cen);
150.127 + ze->pos = -(zip->locpos + locoff);
150.128
150.129 if ((ze->name = malloc(nlen + 1)) == NULL) goto Catch;
150.130 memcpy(ze->name, cen + CENHDR, nlen);
150.131 ze->name[nlen] = '\0';
150.132
150.133 if (elen > 0) {
150.134 + char *extra = cen + CENHDR + nlen;
150.135 +
150.136 /* This entry has "extra" data */
150.137 if ((ze->extra = malloc(elen + 2)) == NULL) goto Catch;
150.138 ze->extra[0] = (unsigned char) elen;
150.139 ze->extra[1] = (unsigned char) (elen >> 8);
150.140 - memcpy(ze->extra+2, cen + CENHDR + nlen, elen);
150.141 + memcpy(ze->extra+2, extra, elen);
150.142 + if (ze->csize == ZIP64_MAGICVAL || ze->size == ZIP64_MAGICVAL ||
150.143 + locoff == ZIP64_MAGICVAL) {
150.144 + jint off = 0;
150.145 + while ((off + 4) < elen) { // spec: HeaderID+DataSize+Data
150.146 + jint sz = SH(extra, off + 2);
150.147 + if (SH(extra, off) == ZIP64_EXTID) {
150.148 + off += 4;
150.149 + if (ze->size == ZIP64_MAGICVAL) {
150.150 + // if invalid zip64 extra fields, just skip
150.151 + if (sz < 8 || (off + 8) > elen)
150.152 + break;
150.153 + ze->size = LL(extra, off);
150.154 + sz -= 8;
150.155 + off += 8;
150.156 + }
150.157 + if (ze->csize == ZIP64_MAGICVAL) {
150.158 + if (sz < 8 || (off + 8) > elen)
150.159 + break;
150.160 + ze->csize = LL(extra, off);
150.161 + sz -= 8;
150.162 + off += 8;
150.163 + }
150.164 + if (locoff == ZIP64_MAGICVAL) {
150.165 + if (sz < 8 || (off + 8) > elen)
150.166 + break;
150.167 + ze->pos = -(zip->locpos + LL(extra, off));
150.168 + sz -= 8;
150.169 + off += 8;
150.170 + }
150.171 + break;
150.172 + }
150.173 + off += (sz + 4);
150.174 + }
150.175 + }
150.176 }
150.177
150.178 if (clen > 0) {
151.1 --- a/src/share/native/java/util/zip/zip_util.h Thu Apr 16 17:42:00 2009 +0100
151.2 +++ b/src/share/native/java/util/zip/zip_util.h Thu Apr 16 19:10:32 2009 -0700
151.3 @@ -38,9 +38,13 @@
151.4 #define CENSIG 0x02014b50L /* "PK\001\002" */
151.5 #define ENDSIG 0x06054b50L /* "PK\005\006" */
151.6
151.7 +#define ZIP64_ENDSIG 0x06064b50L /* "PK\006\006" */
151.8 +#define ZIP64_LOCSIG 0x07064b50L /* "PK\006\007" */
151.9 +
151.10 /*
151.11 * Header sizes including signatures
151.12 */
151.13 +
151.14 #ifdef USE_MMAP
151.15 #define SIGSIZ 4
151.16 #endif
151.17 @@ -49,12 +53,22 @@
151.18 #define CENHDR 46
151.19 #define ENDHDR 22
151.20
151.21 +#define ZIP64_ENDHDR 56 // ZIP64 end header size
151.22 +#define ZIP64_LOCHDR 20 // ZIP64 end loc header size
151.23 +#define ZIP64_EXTHDR 24 // EXT header size
151.24 +#define ZIP64_EXTID 1 // Extra field Zip64 header ID
151.25 +
151.26 +#define ZIP64_MAGICVAL 0xffffffffLL
151.27 +#define ZIP64_MAGICCOUNT 0xffff
151.28 +
151.29 +
151.30 /*
151.31 * Header field access macros
151.32 */
151.33 #define CH(b, n) (((unsigned char *)(b))[n])
151.34 #define SH(b, n) (CH(b, n) | (CH(b, n+1) << 8))
151.35 -#define LG(b, n) (SH(b, n) | (SH(b, n+2) << 16))
151.36 +#define LG(b, n) ((SH(b, n) | (SH(b, n+2) << 16)) &0xffffffffUL)
151.37 +#define LL(b, n) (((jlong)LG(b, n)) | (((jlong)LG(b, n+4)) << 32))
151.38 #define GETSIG(b) LG(b, 0)
151.39
151.40 /*
151.41 @@ -106,6 +120,26 @@
151.42 #define ENDCOM(b) SH(b, 20) /* size of zip file comment */
151.43
151.44 /*
151.45 + * Macros for getting Zip64 end of central directory header fields
151.46 + */
151.47 +#define ZIP64_ENDLEN(b) LL(b, 4) /* size of zip64 end of central dir */
151.48 +#define ZIP64_ENDVEM(b) SH(b, 12) /* version made by */
151.49 +#define ZIP64_ENDVER(b) SH(b, 14) /* version needed to extract */
151.50 +#define ZIP64_ENDNMD(b) LG(b, 16) /* number of this disk */
151.51 +#define ZIP64_ENDDSK(b) LG(b, 20) /* disk number of start */
151.52 +#define ZIP64_ENDTOD(b) LL(b, 24) /* total number of entries on this disk */
151.53 +#define ZIP64_ENDTOT(b) LL(b, 32) /* total number of entries */
151.54 +#define ZIP64_ENDSIZ(b) LL(b, 40) /* central directory size in bytes */
151.55 +#define ZIP64_ENDOFF(b) LL(b, 48) /* offset of first CEN header */
151.56 +
151.57 +/*
151.58 + * Macros for getting Zip64 end of central directory locator fields
151.59 + */
151.60 +#define ZIP64_LOCDSK(b) LG(b, 4) /* disk number start */
151.61 +#define ZIP64_LOCOFF(b) LL(b, 8) /* offset of zip64 end */
151.62 +#define ZIP64_LOCTOT(b) LG(b, 16) /* total number of disks */
151.63 +
151.64 +/*
151.65 * Supported compression methods
151.66 */
151.67 #define STORED 0
151.68 @@ -145,7 +179,7 @@
151.69 */
151.70 typedef struct jzcell {
151.71 unsigned int hash; /* 32 bit hashcode on name */
151.72 - unsigned int cenpos; /* Offset of central directory file header */
151.73 + jlong cenpos; /* Offset of central directory file header */
151.74 unsigned int next; /* hash chain: index into jzfile->entries */
151.75 } jzcell;
151.76
152.1 --- a/src/share/native/java/util/zip/zlib-1.1.3/zlib.h Thu Apr 16 17:42:00 2009 +0100
152.2 +++ b/src/share/native/java/util/zip/zlib-1.1.3/zlib.h Thu Apr 16 19:10:32 2009 -0700
152.3 @@ -106,11 +106,11 @@
152.4 typedef struct z_stream_s {
152.5 Bytef *next_in; /* next input byte */
152.6 uInt avail_in; /* number of bytes available at next_in */
152.7 - uLong total_in; /* total nb of input bytes read so far */
152.8 + long long total_in; /* total nb of input bytes read so far */
152.9
152.10 Bytef *next_out; /* next output byte should be put there */
152.11 uInt avail_out; /* remaining free space at next_out */
152.12 - uLong total_out; /* total nb of bytes output so far */
152.13 + long long total_out; /* total nb of bytes output so far */
152.14
152.15 char *msg; /* last error message, NULL if no error */
152.16 struct internal_state FAR *state; /* not visible by applications */
153.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
153.2 +++ b/src/share/native/sun/awt/utility/rect.c Thu Apr 16 19:10:32 2009 -0700
153.3 @@ -0,0 +1,102 @@
153.4 +/*
153.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
153.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
153.7 + *
153.8 + * This code is free software; you can redistribute it and/or modify it
153.9 + * under the terms of the GNU General Public License version 2 only, as
153.10 + * published by the Free Software Foundation. Sun designates this
153.11 + * particular file as subject to the "Classpath" exception as provided
153.12 + * by Sun in the LICENSE file that accompanied this code.
153.13 + *
153.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
153.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
153.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
153.17 + * version 2 for more details (a copy is included in the LICENSE file that
153.18 + * accompanied this code).
153.19 + *
153.20 + * You should have received a copy of the GNU General Public License version
153.21 + * 2 along with this work; if not, write to the Free Software Foundation,
153.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
153.23 + *
153.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
153.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
153.26 + * have any questions.
153.27 + */
153.28 +
153.29 +#include "utility/rect.h"
153.30 +
153.31 +#if defined(__cplusplus)
153.32 +extern "C" {
153.33 +#endif
153.34 +
153.35 +/**
153.36 + * bitsPerPixel must be 32 for now.
153.37 + * outBuf must be large enough to conatin all the rectangles.
153.38 + */
153.39 +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height, unsigned char * buf, RECT_T * outBuf)
153.40 +{
153.41 + //XXX: we might want to reuse the code in the splashscreen library,
153.42 + // though we'd have to deal with the ALPHA_THRESHOLD and different
153.43 + // image formats in this case.
153.44 + int widthBytes = width * bitsPerPixel / 8;
153.45 + int alignedWidth = (((widthBytes - 1) / 4) + 1) * 4;
153.46 +
153.47 + RECT_T * out = outBuf;
153.48 +
153.49 + RECT_T *pPrevLine = NULL, *pFirst = out, *pThis = pFirst;
153.50 + int i, j, i0;
153.51 + int length;
153.52 +
153.53 + for (j = 0; j < height; j++) {
153.54 + /* generate data for a scanline */
153.55 +
153.56 + unsigned char *pSrc = (unsigned char *) buf + j * alignedWidth;
153.57 + RECT_T *pLine = pThis;
153.58 +
153.59 + i = 0;
153.60 +
153.61 + do {
153.62 + // pSrc[0,1,2] == B,G,R; pSrc[3] == Alpha
153.63 + while (i < width && !pSrc[3]) {
153.64 + pSrc += 4;
153.65 + ++i;
153.66 + }
153.67 + if (i >= width)
153.68 + break;
153.69 + i0 = i;
153.70 + while (i < width && pSrc[3]) {
153.71 + pSrc += 4;
153.72 + ++i;
153.73 + }
153.74 + RECT_SET(*pThis, i0, j, i - i0, 1);
153.75 + ++pThis;
153.76 + } while (i < width);
153.77 +
153.78 + /* check if the previous scanline is exactly the same, merge if so
153.79 + (this is the only optimization we can use for YXBanded rectangles,
153.80 + and win32 supports YXBanded only */
153.81 +
153.82 + length = pThis - pLine;
153.83 + if (pPrevLine && pLine - pPrevLine == length) {
153.84 + for (i = 0; i < length && RECT_EQ_X(pPrevLine[i], pLine[i]); ++i) {
153.85 + }
153.86 + if (i == pLine - pPrevLine) {
153.87 + // do merge
153.88 + for (i = 0; i < length; i++) {
153.89 + RECT_INC_HEIGHT(pPrevLine[i]);
153.90 + }
153.91 + pThis = pLine;
153.92 + continue;
153.93 + }
153.94 + }
153.95 + /* or else use the generated scanline */
153.96 +
153.97 + pPrevLine = pLine;
153.98 + }
153.99 +
153.100 + return pThis - pFirst;
153.101 +}
153.102 +
153.103 +#if defined(__cplusplus)
153.104 +}
153.105 +#endif
154.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
154.2 +++ b/src/solaris/classes/sun/awt/X11/InfoWindow.java Thu Apr 16 19:10:32 2009 -0700
154.3 @@ -0,0 +1,495 @@
154.4 +/*
154.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
154.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
154.7 + *
154.8 + * This code is free software; you can redistribute it and/or modify it
154.9 + * under the terms of the GNU General Public License version 2 only, as
154.10 + * published by the Free Software Foundation. Sun designates this
154.11 + * particular file as subject to the "Classpath" exception as provided
154.12 + * by Sun in the LICENSE file that accompanied this code.
154.13 + *
154.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
154.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
154.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
154.17 + * version 2 for more details (a copy is included in the LICENSE file that
154.18 + * accompanied this code).
154.19 + *
154.20 + * You should have received a copy of the GNU General Public License version
154.21 + * 2 along with this work; if not, write to the Free Software Foundation,
154.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
154.23 + *
154.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
154.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
154.26 + * have any questions.
154.27 + */
154.28 +
154.29 +package sun.awt.X11;
154.30 +
154.31 +import java.awt.*;
154.32 +import java.awt.event.*;
154.33 +import java.awt.peer.TrayIconPeer;
154.34 +import sun.awt.*;
154.35 +import java.awt.image.*;
154.36 +import java.text.BreakIterator;
154.37 +import java.util.logging.Logger;
154.38 +import java.util.logging.Level;
154.39 +import java.util.concurrent.ArrayBlockingQueue;
154.40 +import java.security.AccessController;
154.41 +import java.security.PrivilegedAction;
154.42 +import java.lang.reflect.InvocationTargetException;
154.43 +
154.44 +/**
154.45 + * An utility window class. This is a base class for Tooltip and Balloon.
154.46 + */
154.47 +public abstract class InfoWindow extends Window {
154.48 + private Container container;
154.49 + private Closer closer;
154.50 +
154.51 + protected InfoWindow(Frame parent, Color borderColor) {
154.52 + super(parent);
154.53 + container = new Container() {
154.54 + @Override
154.55 + public Insets getInsets() {
154.56 + return new Insets(1, 1, 1, 1);
154.57 + }
154.58 + };
154.59 + setLayout(new BorderLayout());
154.60 + setBackground(borderColor);
154.61 + add(container, BorderLayout.CENTER);
154.62 + container.setLayout(new BorderLayout());
154.63 +
154.64 + closer = new Closer();
154.65 + }
154.66 +
154.67 + public Component add(Component c) {
154.68 + container.add(c, BorderLayout.CENTER);
154.69 + return c;
154.70 + }
154.71 +
154.72 + protected void setCloser(Runnable action, int time) {
154.73 + closer.set(action, time);
154.74 + }
154.75 +
154.76 + // Must be executed on EDT.
154.77 + protected void show(Point corner, int indent) {
154.78 + assert SunToolkit.isDispatchThreadForAppContext(this);
154.79 +
154.80 + pack();
154.81 +
154.82 + Dimension size = getSize();
154.83 + // TODO: When 6356322 is fixed we should get screen bounds in
154.84 + // this way: eframe.getGraphicsConfiguration().getBounds().
154.85 + Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
154.86 +
154.87 + if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square
154.88 + setLocation(corner.x + indent, corner.y + indent);
154.89 +
154.90 + } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square
154.91 + setLocation(corner.x - indent - size.width, corner.y + indent);
154.92 +
154.93 + } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square
154.94 + setLocation(corner.x + indent, corner.y - indent - size.height);
154.95 +
154.96 + } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square
154.97 + setLocation(corner.x - indent - size.width, corner.y - indent - size.height);
154.98 + }
154.99 +
154.100 + super.show();
154.101 + closer.schedule();
154.102 + }
154.103 +
154.104 + public void hide() {
154.105 + closer.close();
154.106 + }
154.107 +
154.108 + private class Closer implements Runnable {
154.109 + Runnable action;
154.110 + int time;
154.111 +
154.112 + public void run() {
154.113 + doClose();
154.114 + }
154.115 +
154.116 + void set(Runnable action, int time) {
154.117 + this.action = action;
154.118 + this.time = time;
154.119 + }
154.120 +
154.121 + void schedule() {
154.122 + XToolkit.schedule(this, time);
154.123 + }
154.124 +
154.125 + void close() {
154.126 + XToolkit.remove(this);
154.127 + doClose();
154.128 + }
154.129 +
154.130 + // WARNING: this method may be executed on Toolkit thread.
154.131 + private void doClose() {
154.132 + SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() {
154.133 + public void run() {
154.134 + InfoWindow.super.hide();
154.135 + invalidate();
154.136 + if (action != null) {
154.137 + action.run();
154.138 + }
154.139 + }
154.140 + });
154.141 + }
154.142 + }
154.143 +
154.144 +
154.145 + private interface LiveArguments {
154.146 + /** Whether the target of the InfoWindow is disposed. */
154.147 + boolean isDisposed();
154.148 +
154.149 + /** The bounds of the target of the InfoWindow. */
154.150 + Rectangle getBounds();
154.151 + }
154.152 +
154.153 + public static class Tooltip extends InfoWindow {
154.154 +
154.155 + public interface LiveArguments extends InfoWindow.LiveArguments {
154.156 + /** The tooltip to be displayed. */
154.157 + String getTooltipString();
154.158 + }
154.159 +
154.160 + private final Object target;
154.161 + private final LiveArguments liveArguments;
154.162 +
154.163 + private final Label textLabel = new Label("");
154.164 + private final Runnable starter = new Runnable() {
154.165 + public void run() {
154.166 + display();
154.167 + }};
154.168 +
154.169 + private final static int TOOLTIP_SHOW_TIME = 10000;
154.170 + private final static int TOOLTIP_START_DELAY_TIME = 1000;
154.171 + private final static int TOOLTIP_MAX_LENGTH = 64;
154.172 + private final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5;
154.173 + private final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220);
154.174 + private final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont();
154.175 +
154.176 + public Tooltip(Frame parent, Object target,
154.177 + LiveArguments liveArguments)
154.178 + {
154.179 + super(parent, Color.black);
154.180 +
154.181 + this.target = target;
154.182 + this.liveArguments = liveArguments;
154.183 +
154.184 + XTrayIconPeer.suppressWarningString(this);
154.185 +
154.186 + setCloser(null, TOOLTIP_SHOW_TIME);
154.187 + textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR);
154.188 + textLabel.setFont(TOOLTIP_TEXT_FONT);
154.189 + add(textLabel);
154.190 + }
154.191 +
154.192 + /*
154.193 + * WARNING: this method is executed on Toolkit thread!
154.194 + */
154.195 + private void display() {
154.196 + String tooltipString = liveArguments.getTooltipString();
154.197 + if (tooltipString == null) {
154.198 + return;
154.199 + } else if (tooltipString.length() > TOOLTIP_MAX_LENGTH) {
154.200 + textLabel.setText(tooltipString.substring(0, TOOLTIP_MAX_LENGTH));
154.201 + } else {
154.202 + textLabel.setText(tooltipString);
154.203 + }
154.204 +
154.205 + // Execute on EDT to avoid deadlock (see 6280857).
154.206 + SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
154.207 + public void run() {
154.208 + if (liveArguments.isDisposed()) {
154.209 + return;
154.210 + }
154.211 + Point pointer = (Point)AccessController.doPrivileged(new PrivilegedAction() {
154.212 + public Object run() {
154.213 + if (!isPointerOverTrayIcon(liveArguments.getBounds())) {
154.214 + return null;
154.215 + }
154.216 + return MouseInfo.getPointerInfo().getLocation();
154.217 + }
154.218 + });
154.219 + if (pointer == null) {
154.220 + return;
154.221 + }
154.222 + show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT);
154.223 + }
154.224 + });
154.225 + }
154.226 +
154.227 + public void enter() {
154.228 + XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME);
154.229 + }
154.230 +
154.231 + public void exit() {
154.232 + XToolkit.remove(starter);
154.233 + if (isVisible()) {
154.234 + hide();
154.235 + }
154.236 + }
154.237 +
154.238 + private boolean isPointerOverTrayIcon(Rectangle trayRect) {
154.239 + Point p = MouseInfo.getPointerInfo().getLocation();
154.240 + return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) ||
154.241 + p.y < trayRect.y || p.y > (trayRect.y + trayRect.height));
154.242 + }
154.243 + }
154.244 +
154.245 + public static class Balloon extends InfoWindow {
154.246 +
154.247 + public interface LiveArguments extends InfoWindow.LiveArguments {
154.248 + /** The action to be performed upon clicking the baloon. */
154.249 + String getActionCommand();
154.250 + }
154.251 +
154.252 + private final LiveArguments liveArguments;
154.253 + private final Object target;
154.254 +
154.255 + private final static int BALLOON_SHOW_TIME = 10000;
154.256 + private final static int BALLOON_TEXT_MAX_LENGTH = 256;
154.257 + private final static int BALLOON_WORD_LINE_MAX_LENGTH = 16;
154.258 + private final static int BALLOON_WORD_LINE_MAX_COUNT = 4;
154.259 + private final static int BALLOON_ICON_WIDTH = 32;
154.260 + private final static int BALLOON_ICON_HEIGHT = 32;
154.261 + private final static int BALLOON_TRAY_ICON_INDENT = 0;
154.262 + private final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255);
154.263 + private final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12);
154.264 +
154.265 + private Panel mainPanel = new Panel();
154.266 + private Panel captionPanel = new Panel();
154.267 + private Label captionLabel = new Label("");
154.268 + private Button closeButton = new Button("X");
154.269 + private Panel textPanel = new Panel();
154.270 + private XTrayIconPeer.IconCanvas iconCanvas = new XTrayIconPeer.IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT);
154.271 + private Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT];
154.272 + private ActionPerformer ap = new ActionPerformer();
154.273 +
154.274 + private Image iconImage;
154.275 + private Image errorImage;
154.276 + private Image warnImage;
154.277 + private Image infoImage;
154.278 + private boolean gtkImagesLoaded;
154.279 +
154.280 + private Displayer displayer = new Displayer();
154.281 +
154.282 + public Balloon(Frame parent, Object target, LiveArguments liveArguments) {
154.283 + super(parent, new Color(90, 80 ,190));
154.284 + this.liveArguments = liveArguments;
154.285 + this.target = target;
154.286 +
154.287 + XTrayIconPeer.suppressWarningString(this);
154.288 +
154.289 + setCloser(new Runnable() {
154.290 + public void run() {
154.291 + if (textPanel != null) {
154.292 + textPanel.removeAll();
154.293 + textPanel.setSize(0, 0);
154.294 + iconCanvas.setSize(0, 0);
154.295 + XToolkit.awtLock();
154.296 + try {
154.297 + displayer.isDisplayed = false;
154.298 + XToolkit.awtLockNotifyAll();
154.299 + } finally {
154.300 + XToolkit.awtUnlock();
154.301 + }
154.302 + }
154.303 + }
154.304 + }, BALLOON_SHOW_TIME);
154.305 +
154.306 + add(mainPanel);
154.307 +
154.308 + captionLabel.setFont(BALLOON_CAPTION_FONT);
154.309 + captionLabel.addMouseListener(ap);
154.310 +
154.311 + captionPanel.setLayout(new BorderLayout());
154.312 + captionPanel.add(captionLabel, BorderLayout.WEST);
154.313 + captionPanel.add(closeButton, BorderLayout.EAST);
154.314 + captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR);
154.315 + captionPanel.addMouseListener(ap);
154.316 +
154.317 + closeButton.addActionListener(new ActionListener() {
154.318 + public void actionPerformed(ActionEvent e) {
154.319 + hide();
154.320 + }
154.321 + });
154.322 +
154.323 + mainPanel.setLayout(new BorderLayout());
154.324 + mainPanel.setBackground(Color.white);
154.325 + mainPanel.add(captionPanel, BorderLayout.NORTH);
154.326 + mainPanel.add(iconCanvas, BorderLayout.WEST);
154.327 + mainPanel.add(textPanel, BorderLayout.CENTER);
154.328 +
154.329 + iconCanvas.addMouseListener(ap);
154.330 +
154.331 + for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) {
154.332 + lineLabels[i] = new Label();
154.333 + lineLabels[i].addMouseListener(ap);
154.334 + lineLabels[i].setBackground(Color.white);
154.335 + }
154.336 +
154.337 + displayer.start();
154.338 + }
154.339 +
154.340 + public void display(String caption, String text, String messageType) {
154.341 + if (!gtkImagesLoaded) {
154.342 + loadGtkImages();
154.343 + }
154.344 + displayer.display(caption, text, messageType);
154.345 + }
154.346 +
154.347 + private void _display(String caption, String text, String messageType) {
154.348 + captionLabel.setText(caption);
154.349 +
154.350 + BreakIterator iter = BreakIterator.getWordInstance();
154.351 + if (text != null) {
154.352 + iter.setText(text);
154.353 + int start = iter.first(), end;
154.354 + int nLines = 0;
154.355 +
154.356 + do {
154.357 + end = iter.next();
154.358 +
154.359 + if (end == BreakIterator.DONE ||
154.360 + text.substring(start, end).length() >= 50)
154.361 + {
154.362 + lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ?
154.363 + iter.last() : end));
154.364 + textPanel.add(lineLabels[nLines++]);
154.365 + start = end;
154.366 + }
154.367 + if (nLines == BALLOON_WORD_LINE_MAX_COUNT) {
154.368 + if (end != BreakIterator.DONE) {
154.369 + lineLabels[nLines - 1].setText(
154.370 + new String(lineLabels[nLines - 1].getText() + " ..."));
154.371 + }
154.372 + break;
154.373 + }
154.374 + } while (end != BreakIterator.DONE);
154.375 +
154.376 +
154.377 + textPanel.setLayout(new GridLayout(nLines, 1));
154.378 + }
154.379 +
154.380 + if ("ERROR".equals(messageType)) {
154.381 + iconImage = errorImage;
154.382 + } else if ("WARNING".equals(messageType)) {
154.383 + iconImage = warnImage;
154.384 + } else if ("INFO".equals(messageType)) {
154.385 + iconImage = infoImage;
154.386 + } else {
154.387 + iconImage = null;
154.388 + }
154.389 +
154.390 + if (iconImage != null) {
154.391 + Dimension tpSize = textPanel.getSize();
154.392 + iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ?
154.393 + BALLOON_ICON_HEIGHT : tpSize.height));
154.394 + iconCanvas.validate();
154.395 + }
154.396 +
154.397 + SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
154.398 + public void run() {
154.399 + if (liveArguments.isDisposed()) {
154.400 + return;
154.401 + }
154.402 + Point parLoc = getParent().getLocationOnScreen();
154.403 + Dimension parSize = getParent().getSize();
154.404 + show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2),
154.405 + BALLOON_TRAY_ICON_INDENT);
154.406 + if (iconImage != null) {
154.407 + iconCanvas.updateImage(iconImage); // call it after the show(..) above
154.408 + }
154.409 + }
154.410 + });
154.411 + }
154.412 +
154.413 + public void dispose() {
154.414 + displayer.interrupt();
154.415 + super.dispose();
154.416 + }
154.417 +
154.418 + private void loadGtkImages() {
154.419 + if (!gtkImagesLoaded) {
154.420 + errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
154.421 + "gtk.icon.gtk-dialog-error.6.rtl");
154.422 + warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
154.423 + "gtk.icon.gtk-dialog-warning.6.rtl");
154.424 + infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
154.425 + "gtk.icon.gtk-dialog-info.6.rtl");
154.426 + gtkImagesLoaded = true;
154.427 + }
154.428 + }
154.429 +
154.430 + private class ActionPerformer extends MouseAdapter {
154.431 + public void mouseClicked(MouseEvent e) {
154.432 + // hide the balloon by any click
154.433 + hide();
154.434 + if (e.getButton() == MouseEvent.BUTTON1) {
154.435 + ActionEvent aev = new ActionEvent(target, ActionEvent.ACTION_PERFORMED,
154.436 + liveArguments.getActionCommand(),
154.437 + e.getWhen(), e.getModifiers());
154.438 + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(aev);
154.439 + }
154.440 + }
154.441 + }
154.442 +
154.443 + private class Displayer extends Thread {
154.444 + final int MAX_CONCURRENT_MSGS = 10;
154.445 +
154.446 + ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS);
154.447 + boolean isDisplayed;
154.448 +
154.449 + Displayer() {
154.450 + setDaemon(true);
154.451 + }
154.452 +
154.453 + public void run() {
154.454 + while (true) {
154.455 + Message msg = null;
154.456 + try {
154.457 + msg = (Message)messageQueue.take();
154.458 + } catch (InterruptedException e) {
154.459 + return;
154.460 + }
154.461 +
154.462 + /*
154.463 + * Wait till the previous message is displayed if any
154.464 + */
154.465 + XToolkit.awtLock();
154.466 + try {
154.467 + while (isDisplayed) {
154.468 + try {
154.469 + XToolkit.awtLockWait();
154.470 + } catch (InterruptedException e) {
154.471 + return;
154.472 + }
154.473 + }
154.474 + isDisplayed = true;
154.475 + } finally {
154.476 + XToolkit.awtUnlock();
154.477 + }
154.478 + _display(msg.caption, msg.text, msg.messageType);
154.479 + }
154.480 + }
154.481 +
154.482 + void display(String caption, String text, String messageType) {
154.483 + messageQueue.offer(new Message(caption, text, messageType));
154.484 + }
154.485 + }
154.486 +
154.487 + private static class Message {
154.488 + String caption, text, messageType;
154.489 +
154.490 + Message(String caption, String text, String messageType) {
154.491 + this.caption = caption;
154.492 + this.text = text;
154.493 + this.messageType = messageType;
154.494 + }
154.495 + }
154.496 + }
154.497 +}
154.498 +
155.1 --- a/src/solaris/classes/sun/awt/X11/XBaseWindow.java Thu Apr 16 17:42:00 2009 +0100
155.2 +++ b/src/solaris/classes/sun/awt/X11/XBaseWindow.java Thu Apr 16 19:10:32 2009 -0700
155.3 @@ -842,27 +842,35 @@
155.4 | XConstants.ButtonMotionMask);
155.5 final int ownerEvents = 1;
155.6
155.7 - int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
155.8 - getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
155.9 - XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
155.10 - XConstants.CurrentTime);
155.11 - // Check grab results to be consistent with X server grab
155.12 - if (ptrGrab != XConstants.GrabSuccess) {
155.13 - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
155.14 - XAwtState.setGrabWindow(null);
155.15 - grabLog.fine(" Grab Failure - mouse");
155.16 - return false;
155.17 - }
155.18
155.19 - int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
155.20 - getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
155.21 - XConstants.CurrentTime);
155.22 - if (keyGrab != XConstants.GrabSuccess) {
155.23 - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
155.24 - XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
155.25 - XAwtState.setGrabWindow(null);
155.26 - grabLog.fine(" Grab Failure - keyboard");
155.27 - return false;
155.28 + //6714678: IDE (Netbeans, Eclipse, JDeveloper) Debugger hangs
155.29 + //process on Linux
155.30 + //The user must pass the sun.awt.disablegrab property to disable
155.31 + //taking grabs. This prevents hanging of the GUI when a breakpoint
155.32 + //is hit while a popup window taking the grab is open.
155.33 + if (!XToolkit.getSunAwtDisableGrab()) {
155.34 + int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
155.35 + getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
155.36 + XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
155.37 + XConstants.CurrentTime);
155.38 + // Check grab results to be consistent with X server grab
155.39 + if (ptrGrab != XConstants.GrabSuccess) {
155.40 + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
155.41 + XAwtState.setGrabWindow(null);
155.42 + grabLog.fine(" Grab Failure - mouse");
155.43 + return false;
155.44 + }
155.45 +
155.46 + int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
155.47 + getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
155.48 + XConstants.CurrentTime);
155.49 + if (keyGrab != XConstants.GrabSuccess) {
155.50 + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
155.51 + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
155.52 + XAwtState.setGrabWindow(null);
155.53 + grabLog.fine(" Grab Failure - keyboard");
155.54 + return false;
155.55 + }
155.56 }
155.57 if (prevGrabWindow != null) {
155.58 prevGrabWindow.ungrabInputImpl();
155.59 @@ -882,8 +890,10 @@
155.60 grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow});
155.61 if (grabWindow != null) {
155.62 grabWindow.ungrabInputImpl();
155.63 - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
155.64 - XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
155.65 + if (!XToolkit.getSunAwtDisableGrab()) {
155.66 + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
155.67 + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
155.68 + }
155.69 XAwtState.setGrabWindow(null);
155.70 // we need to call XFlush() here to force ungrab
155.71 // see 6384219 for details
156.1 --- a/src/solaris/classes/sun/awt/X11/XCanvasPeer.java Thu Apr 16 17:42:00 2009 +0100
156.2 +++ b/src/solaris/classes/sun/awt/X11/XCanvasPeer.java Thu Apr 16 19:10:32 2009 -0700
156.3 @@ -27,7 +27,6 @@
156.4 import java.awt.*;
156.5 import java.awt.peer.*;
156.6
156.7 -import sun.awt.ComponentAccessor;
156.8 import sun.awt.SunToolkit;
156.9
156.10 import sun.awt.X11GraphicsConfig;
156.11 @@ -54,60 +53,45 @@
156.12 }
156.13 }
156.14
156.15 - void resetTargetGC(Component target) {
156.16 - ComponentAccessor.resetGC(target);
156.17 + /* Get a GraphicsConfig with the same visual on the new
156.18 + * screen, which should be easy in Xinerama mode.
156.19 + */
156.20 + public GraphicsConfiguration getAppropriateGraphicsConfiguration(
156.21 + GraphicsConfiguration gc)
156.22 + {
156.23 + if (graphicsConfig == null || gc == null) {
156.24 + return gc;
156.25 + }
156.26 + // Opt: Only need to do if we're not using the default GC
156.27 +
156.28 + int screenNum = ((X11GraphicsDevice)gc.getDevice()).getScreen();
156.29 +
156.30 + X11GraphicsConfig parentgc;
156.31 + // save vis id of current gc
156.32 + int visual = graphicsConfig.getVisual();
156.33 +
156.34 + X11GraphicsDevice newDev = (X11GraphicsDevice) GraphicsEnvironment.
156.35 + getLocalGraphicsEnvironment().
156.36 + getScreenDevices()[screenNum];
156.37 +
156.38 + for (int i = 0; i < newDev.getNumConfigs(screenNum); i++) {
156.39 + if (visual == newDev.getConfigVisualId(i, screenNum)) {
156.40 + // use that
156.41 + graphicsConfig = (X11GraphicsConfig)newDev.getConfigurations()[i];
156.42 + break;
156.43 + }
156.44 + }
156.45 + // just in case...
156.46 + if (graphicsConfig == null) {
156.47 + graphicsConfig = (X11GraphicsConfig) GraphicsEnvironment.
156.48 + getLocalGraphicsEnvironment().
156.49 + getScreenDevices()[screenNum].
156.50 + getDefaultConfiguration();
156.51 + }
156.52 +
156.53 + return graphicsConfig;
156.54 }
156.55
156.56 - /*
156.57 - * Called when the Window this
156.58 - * Canvas is on is moved onto another Xinerama screen.
156.59 - *
156.60 - * Canvases can be created with a non-defulat GraphicsConfiguration. The
156.61 - * GraphicsConfiguration needs to be changed to one on the new screen,
156.62 - * preferably with the same visual ID.
156.63 - *
156.64 - * Up-called for other windows peer instances (XPanelPeer, XWindowPeer).
156.65 - *
156.66 - * Should only be called from the event thread.
156.67 - */
156.68 - public void displayChanged(int screenNum) {
156.69 - resetLocalGC(screenNum);
156.70 - resetTargetGC(target);
156.71 - }
156.72 -
156.73 - /* Set graphicsConfig to a GraphicsConfig with the same visual on the new
156.74 - * screen, which should be easy in Xinerama mode.
156.75 - *
156.76 - * Should only be called from displayChanged(), and therefore only from
156.77 - * the event thread.
156.78 - */
156.79 - void resetLocalGC(int screenNum) {
156.80 - // Opt: Only need to do if we're not using the default GC
156.81 - if (graphicsConfig != null) {
156.82 - X11GraphicsConfig parentgc;
156.83 - // save vis id of current gc
156.84 - int visual = graphicsConfig.getVisual();
156.85 -
156.86 - X11GraphicsDevice newDev = (X11GraphicsDevice) GraphicsEnvironment.
156.87 - getLocalGraphicsEnvironment().
156.88 - getScreenDevices()[screenNum];
156.89 -
156.90 - for (int i = 0; i < newDev.getNumConfigs(screenNum); i++) {
156.91 - if (visual == newDev.getConfigVisualId(i, screenNum)) {
156.92 - // use that
156.93 - graphicsConfig = (X11GraphicsConfig)newDev.getConfigurations()[i];
156.94 - break;
156.95 - }
156.96 - }
156.97 - // just in case...
156.98 - if (graphicsConfig == null) {
156.99 - graphicsConfig = (X11GraphicsConfig) GraphicsEnvironment.
156.100 - getLocalGraphicsEnvironment().
156.101 - getScreenDevices()[screenNum].
156.102 - getDefaultConfiguration();
156.103 - }
156.104 - }
156.105 - }
156.106 protected boolean shouldFocusOnClick() {
156.107 // Canvas should always be able to be focused by mouse clicks.
156.108 return true;
157.1 --- a/src/solaris/classes/sun/awt/X11/XComponentPeer.java Thu Apr 16 17:42:00 2009 +0100
157.2 +++ b/src/solaris/classes/sun/awt/X11/XComponentPeer.java Thu Apr 16 19:10:32 2009 -0700
157.3 @@ -35,6 +35,7 @@
157.4 import java.awt.Font;
157.5 import java.awt.FontMetrics;
157.6 import java.awt.Graphics;
157.7 +import java.awt.GraphicsConfiguration;
157.8 import java.awt.Image;
157.9 import java.awt.Insets;
157.10 import java.awt.KeyboardFocusManager;
157.11 @@ -76,11 +77,6 @@
157.12 public class XComponentPeer extends XWindow implements ComponentPeer, DropTargetPeer,
157.13 BackBufferCapsProvider
157.14 {
157.15 - /* FIX ME: these constants copied from java.awt.KeyboardFocusManager */
157.16 - static final int SNFH_FAILURE = 0;
157.17 - static final int SNFH_SUCCESS_HANDLED = 1;
157.18 - static final int SNFH_SUCCESS_PROCEED = 2;
157.19 -
157.20 private static final Logger log = Logger.getLogger("sun.awt.X11.XComponentPeer");
157.21 private static final Logger buffersLog = Logger.getLogger("sun.awt.X11.XComponentPeer.multibuffer");
157.22 private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XComponentPeer");
157.23 @@ -166,7 +162,7 @@
157.24 enableLog.log(Level.FINE, "Initial enable state: {0}", new Object[] {Boolean.valueOf(enabled)});
157.25
157.26 if (target.isVisible()) {
157.27 - show();
157.28 + setVisible(true);
157.29 }
157.30 }
157.31
157.32 @@ -314,113 +310,27 @@
157.33 return null;
157.34 }
157.35
157.36 - /**
157.37 - * Returns whether or not this component should be given focus on mouse click.
157.38 - * Default implementation return whether or not this peer is "focusable"
157.39 - * Descendants might want to override it to extend/restrict conditions at which this
157.40 - * component should be focused by click (see MCanvasPeer and MPanelPeer)
157.41 - */
157.42 - protected boolean shouldFocusOnClick() {
157.43 - return isFocusable();
157.44 - }
157.45 -
157.46 - /**
157.47 - * Checks whether or not this component would be focused by native system if it would be allowed to do so.
157.48 - * Currently it checks that it displayable, visible, enabled and focusable.
157.49 - */
157.50 - static boolean canBeFocusedByClick(Component component) {
157.51 - if (component == null) {
157.52 - return false;
157.53 - } else {
157.54 - return component.isDisplayable() && component.isVisible() && component.isEnabled() && component.isFocusable();
157.55 - }
157.56 - }
157.57 -
157.58 - static Window getContainingWindow(Component comp) {
157.59 - while (comp != null && !(comp instanceof Window)) {
157.60 - comp = comp.getParent();
157.61 - }
157.62 -
157.63 - return (Window)comp;
157.64 - }
157.65 -
157.66 - static Method processSynchronousLightweightTransferMethod;
157.67 - static boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant,
157.68 - boolean temporary, boolean focusedWindowChangeAllowed,
157.69 - long time)
157.70 + // TODO: consider moving it to KeyboardFocusManagerPeerImpl
157.71 + final public boolean requestFocus(Component lightweightChild, boolean temporary,
157.72 + boolean focusedWindowChangeAllowed, long time,
157.73 + CausedFocusEvent.Cause cause)
157.74 {
157.75 - try {
157.76 - if (processSynchronousLightweightTransferMethod == null) {
157.77 - processSynchronousLightweightTransferMethod =
157.78 - (Method)AccessController.doPrivileged(
157.79 - new PrivilegedExceptionAction() {
157.80 - public Object run() throws IllegalAccessException, NoSuchMethodException
157.81 - {
157.82 - Method m = KeyboardFocusManager.class.
157.83 - getDeclaredMethod("processSynchronousLightweightTransfer",
157.84 - new Class[] {Component.class, Component.class,
157.85 - Boolean.TYPE, Boolean.TYPE,
157.86 - Long.TYPE});
157.87 - m.setAccessible(true);
157.88 - return m;
157.89 - }
157.90 - });
157.91 - }
157.92 - Object[] params = new Object[] {
157.93 - heavyweight,
157.94 - descendant,
157.95 - Boolean.valueOf(temporary),
157.96 - Boolean.valueOf(focusedWindowChangeAllowed),
157.97 - Long.valueOf(time)
157.98 - };
157.99 - return ((Boolean)processSynchronousLightweightTransferMethod.invoke(null, params)).booleanValue();
157.100 - } catch (PrivilegedActionException pae) {
157.101 - pae.printStackTrace();
157.102 - return false;
157.103 - } catch (IllegalAccessException iae) {
157.104 - iae.printStackTrace();
157.105 - return false;
157.106 - } catch (IllegalArgumentException iaee) {
157.107 - iaee.printStackTrace();
157.108 - return false;
157.109 - } catch (InvocationTargetException ite) {
157.110 - ite.printStackTrace();
157.111 - return false;
157.112 - }
157.113 - }
157.114 -
157.115 - static Method requestFocusWithCause;
157.116 -
157.117 - static void callRequestFocus(Component target, CausedFocusEvent.Cause cause) {
157.118 - if (requestFocusWithCause == null) {
157.119 - requestFocusWithCause = SunToolkit.getMethod(Component.class, "requestFocus", new Class[] {CausedFocusEvent.Cause.class});
157.120 - }
157.121 - if (requestFocusWithCause != null) {
157.122 - try {
157.123 - requestFocusWithCause.invoke(target, new Object[] {cause});
157.124 - } catch (Exception e) {
157.125 - e.printStackTrace();
157.126 - }
157.127 - }
157.128 - }
157.129 -
157.130 - final public boolean requestFocus(Component lightweightChild, boolean temporary,
157.131 - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause)
157.132 - {
157.133 - if (processSynchronousLightweightTransfer(target, lightweightChild, temporary,
157.134 + if (XKeyboardFocusManagerPeer.
157.135 + processSynchronousLightweightTransfer(target, lightweightChild, temporary,
157.136 focusedWindowChangeAllowed, time))
157.137 {
157.138 return true;
157.139 }
157.140
157.141 - int result = XKeyboardFocusManagerPeer
157.142 - .shouldNativelyFocusHeavyweight(target, lightweightChild,
157.143 - temporary, focusedWindowChangeAllowed, time, cause);
157.144 + int result = XKeyboardFocusManagerPeer.
157.145 + shouldNativelyFocusHeavyweight(target, lightweightChild,
157.146 + temporary, focusedWindowChangeAllowed,
157.147 + time, cause);
157.148
157.149 switch (result) {
157.150 - case SNFH_FAILURE:
157.151 + case XKeyboardFocusManagerPeer.SNFH_FAILURE:
157.152 return false;
157.153 - case SNFH_SUCCESS_PROCEED:
157.154 + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED:
157.155 // Currently we just generate focus events like we deal with lightweight instead of calling
157.156 // XSetInputFocus on native window
157.157 if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Proceeding with request to " +
157.158 @@ -433,7 +343,7 @@
157.159 * focus owner which had focus before WLF. So, we should not add request record for such requests
157.160 * but store this component in mostRecent - and return true as before for compatibility.
157.161 */
157.162 - Window parentWindow = getContainingWindow(target);
157.163 + Window parentWindow = SunToolkit.getContainingWindow(target);
157.164 if (parentWindow == null) {
157.165 return rejectFocusRequestHelper("WARNING: Parent window is null");
157.166 }
157.167 @@ -454,14 +364,13 @@
157.168 if (!(res && parentWindow.isFocused())) {
157.169 return rejectFocusRequestHelper("Waiting for asynchronous processing of the request");
157.170 }
157.171 -
157.172 - // NOTE: We simulate heavyweight behavior of Motif - component receives focus right
157.173 - // after request, not after event. Normally, we should better listen for event
157.174 - // by listeners.
157.175 - return XKeyboardFocusManagerPeer.simulateMotifRequestFocus(lightweightChild, target, temporary,
157.176 - focusedWindowChangeAllowed, time, cause);
157.177 + return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild,
157.178 + (Component)target,
157.179 + temporary,
157.180 + focusedWindowChangeAllowed,
157.181 + time, cause);
157.182 // Motif compatibility code
157.183 - case SNFH_SUCCESS_HANDLED:
157.184 + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
157.185 // Either lightweight or excessive request - all events are generated.
157.186 return true;
157.187 }
157.188 @@ -470,7 +379,7 @@
157.189
157.190 private boolean rejectFocusRequestHelper(String logMsg) {
157.191 if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg);
157.192 - KeyboardFocusManagerPeerImpl.removeLastFocusRequest(target);
157.193 + XKeyboardFocusManagerPeer.removeLastFocusRequest(target);
157.194 return false;
157.195 }
157.196
157.197 @@ -496,10 +405,6 @@
157.198 xSetVisible(b);
157.199 }
157.200
157.201 - public void show() {
157.202 - setVisible(true);
157.203 - }
157.204 -
157.205 public void hide() {
157.206 setVisible(false);
157.207 }
157.208 @@ -618,8 +523,9 @@
157.209 void handleJavaMouseEvent(MouseEvent e) {
157.210 switch (e.getID()) {
157.211 case MouseEvent.MOUSE_PRESSED:
157.212 - if (target == e.getSource() && shouldFocusOnClick()
157.213 - && !target.isFocusOwner() && canBeFocusedByClick(target))
157.214 + if (target == e.getSource() &&
157.215 + !target.isFocusOwner() &&
157.216 + XKeyboardFocusManagerPeer.shouldFocusOnClick(target))
157.217 {
157.218 XWindowPeer parentXWindow = getParentTopLevel();
157.219 Window parentWindow = ((Window)parentXWindow.getTarget());
157.220 @@ -633,7 +539,7 @@
157.221 // WindowEvent wfg = new WindowEvent(parentWindow, WindowEvent.WINDOW_GAINED_FOCUS);
157.222 // parentWindow.dispatchEvent(wfg);
157.223 // }
157.224 - callRequestFocus(target, CausedFocusEvent.Cause.MOUSE_EVENT);
157.225 + XKeyboardFocusManagerPeer.requestFocusFor(target, CausedFocusEvent.Cause.MOUSE_EVENT);
157.226 }
157.227 break;
157.228 }
157.229 @@ -1418,59 +1324,21 @@
157.230 }
157.231 }
157.232
157.233 - public void restack() {
157.234 - synchronized(target.getTreeLock()) {
157.235 - // Build the list of X windows in the window corresponding to this container
157.236 - // This list is already in correct Java stacking order
157.237 - Container cont = (Container)target;
157.238 - Vector order = new Vector(cont.getComponentCount());
157.239 - HashSet set = new HashSet();
157.240 + /**
157.241 + * Lowers this component at the bottom of the above HW peer. If the above parameter
157.242 + * is null then the method places this component at the top of the Z-order.
157.243 + */
157.244 + public void setZOrder(ComponentPeer above) {
157.245 + long aboveWindow = (above != null) ? ((XComponentPeer)above).getWindow() : 0;
157.246
157.247 - addTree(order, set, cont);
157.248 -
157.249 - XToolkit.awtLock();
157.250 - try {
157.251 - // Get the current list of X window in X window. Some of the windows
157.252 - // might be only native
157.253 - XQueryTree qt = new XQueryTree(getContentWindow());
157.254 - try {
157.255 - if (qt.execute() != 0) {
157.256 - if (qt.get_nchildren() != 0) {
157.257 - long pchildren = qt.get_children();
157.258 - int j = 0; // index to insert
157.259 - for (int i = 0; i < qt.get_nchildren(); i++) {
157.260 - Long w = Long.valueOf(Native.getLong(pchildren, i));
157.261 - if (!set.contains(w)) {
157.262 - set.add(w);
157.263 - order.add(j++, w);
157.264 - }
157.265 - }
157.266 - }
157.267 - }
157.268 -
157.269 - if (order.size() != 0) {
157.270 - // Create native array of the windows
157.271 - long windows = Native.allocateLongArray(order.size());
157.272 - Native.putLong(windows, order);
157.273 -
157.274 - // Restack native window according to the new order
157.275 - XlibWrapper.XRestackWindows(XToolkit.getDisplay(), windows, order.size());
157.276 -
157.277 - XlibWrapper.unsafe.freeMemory(windows);
157.278 - }
157.279 - } finally {
157.280 - qt.dispose();
157.281 - }
157.282 - } finally {
157.283 - XToolkit.awtUnlock();
157.284 - }
157.285 + XToolkit.awtLock();
157.286 + try{
157.287 + XlibWrapper.SetZOrder(XToolkit.getDisplay(), getWindow(), aboveWindow);
157.288 + }finally{
157.289 + XToolkit.awtUnlock();
157.290 }
157.291 }
157.292
157.293 - public boolean isRestackSupported() {
157.294 - return true;
157.295 - }
157.296 -
157.297 private void addTree(Collection order, Set set, Container cont) {
157.298 for (int i = 0; i < cont.getComponentCount(); i++) {
157.299 Component comp = cont.getComponent(i);
157.300 @@ -1560,4 +1428,8 @@
157.301 }
157.302 }
157.303 }
157.304 +
157.305 + public void updateGraphicsData(GraphicsConfiguration gc) {
157.306 + initGraphicsConfiguration();
157.307 + }
157.308 }
158.1 --- a/src/solaris/classes/sun/awt/X11/XConstants.java Thu Apr 16 17:42:00 2009 +0100
158.2 +++ b/src/solaris/classes/sun/awt/X11/XConstants.java Thu Apr 16 19:10:32 2009 -0700
158.3 @@ -1,5 +1,5 @@
158.4 /*
158.5 - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
158.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
158.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
158.8 *
158.9 * This code is free software; you can redistribute it and/or modify it
158.10 @@ -684,4 +684,19 @@
158.11
158.12 public static final int LSBFirst = 0 ;
158.13 public static final int MSBFirst = 1 ;
158.14 +
158.15 + /* XKB support */
158.16 + public static final int XkbUseCoreKbd = 0x0100 ;
158.17 + public static final int XkbNewKeyboardNotify = 0;
158.18 + public static final int XkbMapNotify = 1;
158.19 + public static final int XkbStateNotify = 2;
158.20 + public static final long XkbNewKeyboardNotifyMask = (1L << 0);
158.21 + public static final long XkbMapNotifyMask = (1L << 1);
158.22 + public static final long XkbStateNotifyMask = (1L << 2);
158.23 + public static final long XkbGroupStateMask = (1L << 4);
158.24 + public static final long XkbKeyTypesMask = (1L<<0);
158.25 + public static final long XkbKeySymsMask = (1L<<1);
158.26 + public static final long XkbModifierMapMask = (1L<<2);
158.27 + public static final long XkbVirtualModsMask = (1L<<6); //server map
158.28 +
158.29 }
159.1 --- a/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Thu Apr 16 17:42:00 2009 +0100
159.2 +++ b/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Thu Apr 16 19:10:32 2009 -0700
159.3 @@ -383,7 +383,7 @@
159.4 dimensions.setInsets(getRealInsets());
159.5 insets_corrected = true;
159.6
159.7 - if (isMaximized() || isNull(correction)) {
159.8 + if (isMaximized()) {
159.9 return;
159.10 }
159.11
159.12 @@ -451,7 +451,7 @@
159.13
159.14 public Insets getInsets() {
159.15 Insets in = copy(getRealInsets());
159.16 - in.top += getMenuBarHeight() + getWarningWindowHeight();
159.17 + in.top += getMenuBarHeight();
159.18 if (insLog.isLoggable(Level.FINEST)) {
159.19 insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in});
159.20 }
159.21 @@ -802,6 +802,8 @@
159.22 }
159.23 reconfigureContentWindow(newDimensions);
159.24 updateChildrenSizes();
159.25 +
159.26 + repositionSecurityWarning();
159.27 }
159.28
159.29 private void checkShellRectSize(Rectangle shellRect) {
160.1 --- a/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java Thu Apr 16 17:42:00 2009 +0100
160.2 +++ b/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java Thu Apr 16 19:10:32 2009 -0700
160.3 @@ -184,6 +184,7 @@
160.4 fl = new FocusEvent(currentOwner, FocusEvent.FOCUS_LOST, false, lightweightChild);
160.5 }
160.6
160.7 + // TODO: do we need to wrap in sequenced?
160.8 if (fl != null) {
160.9 postEvent(XComponentPeer.wrapInSequenced(fl));
160.10 }
160.11 @@ -203,9 +204,9 @@
160.12 temporary, false, time, cause);
160.13
160.14 switch (result) {
160.15 - case XComponentPeer.SNFH_FAILURE:
160.16 + case XKeyboardFocusManagerPeer.SNFH_FAILURE:
160.17 return false;
160.18 - case XComponentPeer.SNFH_SUCCESS_PROCEED:
160.19 + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED:
160.20 // Currently we just generate focus events like we deal with lightweight instead of calling
160.21 // XSetInputFocus on native window
160.22
160.23 @@ -235,9 +236,11 @@
160.24 // NOTE: We simulate heavyweight behavior of Motif - component receives focus right
160.25 // after request, not after event. Normally, we should better listen for event
160.26 // by listeners.
160.27 +
160.28 + // TODO: consider replacing with XKeyboardFocusManagerPeer.deliverFocus
160.29 return simulateMotifRequestFocus(lightweightChild, temporary, focusedWindowChangeAllowed, time);
160.30 // Motif compatibility code
160.31 - case XComponentPeer.SNFH_SUCCESS_HANDLED:
160.32 + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
160.33 // Either lightweight or excessive requiest - all events are generated.
160.34 return true;
160.35 }
160.36 @@ -379,4 +382,9 @@
160.37
160.38 public void applyShape(Region shape) {
160.39 }
160.40 +
160.41 + public void setZOrder(ComponentPeer above) {
160.42 + }
160.43 +
160.44 + public void updateGraphicsData(GraphicsConfiguration gc) {}
160.45 }
161.1 --- a/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java Thu Apr 16 17:42:00 2009 +0100
161.2 +++ b/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java Thu Apr 16 19:10:32 2009 -0700
161.3 @@ -739,7 +739,17 @@
161.4 this.filter = filter;
161.5 }
161.6
161.7 - public void show() {
161.8 +
161.9 + public void dispose() {
161.10 + FileDialog fd = (FileDialog)fileDialog;
161.11 + if (fd != null) {
161.12 + fd.removeAll();
161.13 + }
161.14 + super.dispose();
161.15 + }
161.16 +
161.17 + // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit
161.18 + public void setVisible(boolean b){
161.19 if (fileDialog == null) {
161.20 init((FileDialog)target);
161.21 }
161.22 @@ -754,34 +764,20 @@
161.23 setFile(savedFile);
161.24 }
161.25
161.26 - super.show();
161.27 - selectionField.requestFocusInWindow();
161.28 - }
161.29 -
161.30 - public void dispose() {
161.31 - FileDialog fd = (FileDialog)fileDialog;
161.32 - if (fd != null) {
161.33 - fd.removeAll();
161.34 - }
161.35 - super.dispose();
161.36 - }
161.37 -
161.38 - // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit
161.39 - public void setVisible(boolean b){
161.40 super.setVisible(b);
161.41 if (b == true){
161.42 // See 6240074 for more information
161.43 XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
161.44 choicePeer.addXChoicePeerListener(this);
161.45 -
161.46 KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
161.47 }else{
161.48 // See 6240074 for more information
161.49 XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
161.50 choicePeer.removeXChoicePeerListener();
161.51 -
161.52 KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
161.53 }
161.54 +
161.55 + selectionField.requestFocusInWindow();
161.56 }
161.57
161.58 /*
162.1 --- a/src/solaris/classes/sun/awt/X11/XFramePeer.java Thu Apr 16 17:42:00 2009 +0100
162.2 +++ b/src/solaris/classes/sun/awt/X11/XFramePeer.java Thu Apr 16 19:10:32 2009 -0700
162.3 @@ -36,6 +36,7 @@
162.4 import java.awt.peer.FramePeer;
162.5 import java.util.logging.Level;
162.6 import java.util.logging.Logger;
162.7 +import sun.awt.AWTAccessor;
162.8
162.9 class XFramePeer extends XDecoratedPeer implements FramePeer {
162.10 private static Logger log = Logger.getLogger("sun.awt.X11.XFramePeer");
162.11 @@ -231,13 +232,19 @@
162.12 }
162.13 }
162.14
162.15 - public int getState() { return state; }
162.16 + public int getState() {
162.17 + synchronized(getStateLock()) {
162.18 + return state;
162.19 + }
162.20 + }
162.21
162.22 public void setState(int newState) {
162.23 - if (!isShowing()) {
162.24 - stateLog.finer("Frame is not showing");
162.25 - state = newState;
162.26 - return;
162.27 + synchronized(getStateLock()) {
162.28 + if (!isShowing()) {
162.29 + stateLog.finer("Frame is not showing");
162.30 + state = newState;
162.31 + return;
162.32 + }
162.33 }
162.34 changeState(newState);
162.35 }
162.36 @@ -296,6 +303,9 @@
162.37 int old_state = state;
162.38 state = newState;
162.39
162.40 + // sync target with peer
162.41 + AWTAccessor.getFrameAccessor().setExtendedState((Frame)target, state);
162.42 +
162.43 if ((changed & Frame.ICONIFIED) != 0) {
162.44 if ((state & Frame.ICONIFIED) != 0) {
162.45 stateLog.finer("Iconified");
163.1 --- a/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Thu Apr 16 17:42:00 2009 +0100
163.2 +++ b/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Thu Apr 16 19:10:32 2009 -0700
163.3 @@ -31,6 +31,7 @@
163.4 import java.awt.event.FocusEvent;
163.5
163.6 import java.awt.peer.KeyboardFocusManagerPeer;
163.7 +import java.awt.peer.ComponentPeer;
163.8
163.9 import java.lang.reflect.InvocationTargetException;
163.10 import java.lang.reflect.Method;
163.11 @@ -40,136 +41,90 @@
163.12
163.13 import sun.awt.CausedFocusEvent;
163.14 import sun.awt.SunToolkit;
163.15 +import sun.awt.KeyboardFocusManagerPeerImpl;
163.16
163.17 -public class XKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer {
163.18 +public class XKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
163.19 private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XKeyboardFocusManagerPeer");
163.20 - KeyboardFocusManager manager;
163.21 -
163.22 - XKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
163.23 - this.manager = manager;
163.24 - }
163.25
163.26 private static Object lock = new Object() {};
163.27 private static Component currentFocusOwner;
163.28 private static Window currentFocusedWindow;
163.29
163.30 - static void setCurrentNativeFocusOwner(Component comp) {
163.31 - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focus owner " + comp);
163.32 - synchronized(lock) {
163.33 + XKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
163.34 + super(manager);
163.35 + }
163.36 +
163.37 + @Override
163.38 + public void setCurrentFocusOwner(Component comp) {
163.39 + setCurrentNativeFocusOwner(comp);
163.40 + }
163.41 +
163.42 + @Override
163.43 + public Component getCurrentFocusOwner() {
163.44 + return getCurrentNativeFocusOwner();
163.45 + }
163.46 +
163.47 + @Override
163.48 + public Window getCurrentFocusedWindow() {
163.49 + return getCurrentNativeFocusedWindow();
163.50 + }
163.51 +
163.52 + public static void setCurrentNativeFocusOwner(Component comp) {
163.53 + synchronized (lock) {
163.54 currentFocusOwner = comp;
163.55 }
163.56 }
163.57
163.58 - static void setCurrentNativeFocusedWindow(Window win) {
163.59 - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focused window " + win);
163.60 - synchronized(lock) {
163.61 - currentFocusedWindow = win;
163.62 - }
163.63 - }
163.64 -
163.65 - static Component getCurrentNativeFocusOwner() {
163.66 + public static Component getCurrentNativeFocusOwner() {
163.67 synchronized(lock) {
163.68 return currentFocusOwner;
163.69 }
163.70 }
163.71
163.72 - static Window getCurrentNativeFocusedWindow() {
163.73 + public static void setCurrentNativeFocusedWindow(Window win) {
163.74 + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focused window " + win);
163.75 + XWindowPeer from = null, to = null;
163.76 +
163.77 + synchronized(lock) {
163.78 + if (currentFocusedWindow != null) {
163.79 + from = (XWindowPeer)currentFocusedWindow.getPeer();
163.80 + }
163.81 +
163.82 + currentFocusedWindow = win;
163.83 +
163.84 + if (currentFocusedWindow != null) {
163.85 + to = (XWindowPeer)currentFocusedWindow.getPeer();
163.86 + }
163.87 + }
163.88 +
163.89 + if (from != null) {
163.90 + from.updateSecurityWarningVisibility();
163.91 + }
163.92 + if (to != null) {
163.93 + to.updateSecurityWarningVisibility();
163.94 + }
163.95 + }
163.96 +
163.97 + public static Window getCurrentNativeFocusedWindow() {
163.98 synchronized(lock) {
163.99 return currentFocusedWindow;
163.100 }
163.101 }
163.102
163.103 - public Window getCurrentFocusedWindow() {
163.104 - return getCurrentNativeFocusedWindow();
163.105 - }
163.106 -
163.107 - public void setCurrentFocusOwner(Component comp) {
163.108 - setCurrentNativeFocusOwner(comp);
163.109 - }
163.110 -
163.111 - public Component getCurrentFocusOwner() {
163.112 - return getCurrentNativeFocusOwner();
163.113 - }
163.114 -
163.115 - public void clearGlobalFocusOwner(Window activeWindow) {
163.116 - if (activeWindow != null) {
163.117 - Component focusOwner = activeWindow.getFocusOwner();
163.118 - if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner);
163.119 - if (focusOwner != null) {
163.120 -// XComponentPeer nativePeer = XComponentPeer.getNativeContainer(focusOwner);
163.121 -// if (nativePeer != null) {
163.122 - FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null,
163.123 - CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER);
163.124 - XWindow.sendEvent(fl);
163.125 -// }
163.126 - }
163.127 - }
163.128 - }
163.129 -
163.130 - static boolean simulateMotifRequestFocus(Component lightweightChild, Component target, boolean temporary,
163.131 - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause)
163.132 + // TODO: do something to eliminate this forwarding
163.133 + public static boolean deliverFocus(Component lightweightChild,
163.134 + Component target,
163.135 + boolean temporary,
163.136 + boolean focusedWindowChangeAllowed,
163.137 + long time,
163.138 + CausedFocusEvent.Cause cause)
163.139 {
163.140 - if (lightweightChild == null) {
163.141 - lightweightChild = (Component)target;
163.142 - }
163.143 - Component currentOwner = XKeyboardFocusManagerPeer.getCurrentNativeFocusOwner();
163.144 - if (currentOwner != null && currentOwner.getPeer() == null) {
163.145 - currentOwner = null;
163.146 - }
163.147 - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Simulating transfer from " + currentOwner + " to " + lightweightChild);
163.148 - FocusEvent fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, false, currentOwner, cause);
163.149 - FocusEvent fl = null;
163.150 - if (currentOwner != null) {
163.151 - fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST, false, lightweightChild, cause);
163.152 - }
163.153 -
163.154 - if (fl != null) {
163.155 - XWindow.sendEvent(fl);
163.156 - }
163.157 - XWindow.sendEvent(fg);
163.158 - return true;
163.159 - }
163.160 -
163.161 - static Method shouldNativelyFocusHeavyweightMethod;
163.162 -
163.163 - static int shouldNativelyFocusHeavyweight(Component heavyweight,
163.164 - Component descendant, boolean temporary,
163.165 - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause)
163.166 - {
163.167 - if (shouldNativelyFocusHeavyweightMethod == null) {
163.168 - Class[] arg_types =
163.169 - new Class[] { Component.class,
163.170 - Component.class,
163.171 - Boolean.TYPE,
163.172 - Boolean.TYPE,
163.173 - Long.TYPE,
163.174 - CausedFocusEvent.Cause.class
163.175 - };
163.176 -
163.177 - shouldNativelyFocusHeavyweightMethod =
163.178 - SunToolkit.getMethod(KeyboardFocusManager.class,
163.179 - "shouldNativelyFocusHeavyweight",
163.180 - arg_types);
163.181 - }
163.182 - Object[] args = new Object[] { heavyweight,
163.183 - descendant,
163.184 - Boolean.valueOf(temporary),
163.185 - Boolean.valueOf(focusedWindowChangeAllowed),
163.186 - Long.valueOf(time), cause};
163.187 -
163.188 - int result = XComponentPeer.SNFH_FAILURE;
163.189 - if (shouldNativelyFocusHeavyweightMethod != null) {
163.190 - try {
163.191 - result = ((Integer) shouldNativelyFocusHeavyweightMethod.invoke(null, args)).intValue();
163.192 - }
163.193 - catch (IllegalAccessException e) {
163.194 - assert false;
163.195 - }
163.196 - catch (InvocationTargetException e) {
163.197 - assert false;
163.198 - }
163.199 - }
163.200 -
163.201 - return result;
163.202 + return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild,
163.203 + target,
163.204 + temporary,
163.205 + focusedWindowChangeAllowed,
163.206 + time,
163.207 + cause,
163.208 + getCurrentNativeFocusOwner());
163.209 }
163.210 }
164.1 --- a/src/solaris/classes/sun/awt/X11/XKeysym.java Thu Apr 16 17:42:00 2009 +0100
164.2 +++ b/src/solaris/classes/sun/awt/X11/XKeysym.java Thu Apr 16 19:10:32 2009 -0700
164.3 @@ -1,7 +1,7 @@
164.4 // This is a generated file: do not edit! Edit keysym2ucs.h if necessary.
164.5
164.6 /*
164.7 - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
164.8 + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
164.9 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
164.10 *
164.11 * This code is free software; you can redistribute it and/or modify it
164.12 @@ -89,14 +89,47 @@
164.13 Character ch = keysym2UCSHash.get(ks);
164.14 return ch == null ? (char)0 : ch.charValue();
164.15 }
164.16 + static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) {
164.17 + XToolkit.awtLock();
164.18 + try {
164.19 + return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx);
164.20 + } finally {
164.21 + XToolkit.awtUnlock();
164.22 + }
164.23 + }
164.24 + static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) {
164.25 + XToolkit.awtLock();
164.26 + try {
164.27 + int mods = ev.get_state();
164.28 + if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) {
164.29 + // I don't know all possible meanings of 'ndx' in case of XKB
164.30 + // and don't want to speculate. But this particular case
164.31 + // clearly means that caller needs a so called primary keysym.
164.32 + mods ^= XConstants.ShiftMask;
164.33 + }
164.34 + XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(),
164.35 + mods, XlibWrapper.iarg1, XlibWrapper.larg3);
164.36 + //XXX unconsumed modifiers?
164.37 + return Native.getLong(XlibWrapper.larg3);
164.38 + } finally {
164.39 + XToolkit.awtUnlock();
164.40 + }
164.41 + }
164.42 static long xkeycode2keysym(XKeyEvent ev, int ndx) {
164.43 XToolkit.awtLock();
164.44 try {
164.45 - return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx );
164.46 + if (XToolkit.canUseXKBCalls()) {
164.47 + return xkeycode2keysym_xkb(ev, ndx);
164.48 + }else{
164.49 + return xkeycode2keysym_noxkb(ev, ndx);
164.50 + }
164.51 } finally {
164.52 XToolkit.awtUnlock();
164.53 }
164.54 }
164.55 + static long xkeycode2primary_keysym(XKeyEvent ev) {
164.56 + return xkeycode2keysym(ev, 0);
164.57 + }
164.58 public static boolean isKPEvent( XKeyEvent ev )
164.59 {
164.60 // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
164.61 @@ -198,6 +231,27 @@
164.62 Keysym2JavaKeycode jkc = getJavaKeycode( ev );
164.63 return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
164.64 }
164.65 + /**
164.66 + * Return an integer java keycode apprx as it was before extending keycodes range.
164.67 + * This call would ignore for instance XKB and process whatever is on the bottom
164.68 + * of keysym stack. Result will not depend on actual locale, will differ between
164.69 + * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian)
164.70 + * but will be someway compatible with old releases.
164.71 + */
164.72 + static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) {
164.73 + long keysym = XConstants.NoSymbol;
164.74 + int ndx = 0;
164.75 + if( (ev.get_state() & XToolkit.numLockMask) != 0 &&
164.76 + isKPEvent(ev)) {
164.77 + keysym = getKeypadKeysym( ev );
164.78 + } else {
164.79 + // we only need primary-layer keysym to derive a java keycode.
164.80 + ndx = 0;
164.81 + keysym = xkeycode2keysym_noxkb(ev, ndx);
164.82 + }
164.83 + Keysym2JavaKeycode jkc = keysym2JavaKeycodeHash.get( keysym );
164.84 + return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
164.85 + }
164.86 static long javaKeycode2Keysym( int jkey ) {
164.87 Long ks = javaKeycode2KeysymHash.get( jkey );
164.88 return (ks == null ? 0 : ks.longValue());
165.1 --- a/src/solaris/classes/sun/awt/X11/XNETProtocol.java Thu Apr 16 17:42:00 2009 +0100
165.2 +++ b/src/solaris/classes/sun/awt/X11/XNETProtocol.java Thu Apr 16 19:10:32 2009 -0700
165.3 @@ -1,5 +1,5 @@
165.4 /*
165.5 - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
165.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
165.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
165.8 *
165.9 * This code is free software; you can redistribute it and/or modify it
165.10 @@ -169,6 +169,34 @@
165.11 return ((layer == LAYER_ALWAYS_ON_TOP) || (layer == LAYER_NORMAL)) && doLayerProtocol();
165.12 }
165.13
165.14 + public void requestState(XWindow window, XAtom state, boolean isAdd) {
165.15 + XClientMessageEvent req = new XClientMessageEvent();
165.16 + try {
165.17 + req.set_type((int)XConstants.ClientMessage);
165.18 + req.set_window(window.getWindow());
165.19 + req.set_message_type(XA_NET_WM_STATE.getAtom());
165.20 + req.set_format(32);
165.21 + req.set_data(0, isAdd ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE);
165.22 + req.set_data(1, state.getAtom());
165.23 + // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed
165.24 + req.set_data(2, 0);
165.25 + log.log(Level.FINE, "Setting _NET_STATE atom {0} on {1} for {2}", new Object[] {state, window, Boolean.valueOf(isAdd)});
165.26 + XToolkit.awtLock();
165.27 + try {
165.28 + XlibWrapper.XSendEvent(XToolkit.getDisplay(),
165.29 + XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()),
165.30 + false,
165.31 + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask,
165.32 + req.pData);
165.33 + }
165.34 + finally {
165.35 + XToolkit.awtUnlock();
165.36 + }
165.37 + } finally {
165.38 + req.dispose();
165.39 + }
165.40 + }
165.41 +
165.42 /**
165.43 * Helper function to set/reset one state in NET_WM_STATE
165.44 * If window is showing then it uses ClientMessage, otherwise adjusts NET_WM_STATE list
165.45 @@ -181,31 +209,7 @@
165.46 new Object[] {Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()),
165.47 Boolean.valueOf(window.isMapped()), Boolean.valueOf(window.isShowing())});
165.48 if (window.isShowing()) {
165.49 - XClientMessageEvent req = new XClientMessageEvent();
165.50 - try {
165.51 - req.set_type((int)XConstants.ClientMessage);
165.52 - req.set_window(window.getWindow());
165.53 - req.set_message_type(XA_NET_WM_STATE.getAtom());
165.54 - req.set_format(32);
165.55 - req.set_data(0, (!set) ? _NET_WM_STATE_REMOVE : _NET_WM_STATE_ADD);
165.56 - req.set_data(1, state.getAtom());
165.57 - // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed
165.58 - req.set_data(2, 0);
165.59 - log.log(Level.FINE, "Setting _NET_STATE atom {0} on {1} for {2}", new Object[] {state, window, Boolean.valueOf(set)});
165.60 - XToolkit.awtLock();
165.61 - try {
165.62 - XlibWrapper.XSendEvent(XToolkit.getDisplay(),
165.63 - XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()),
165.64 - false,
165.65 - XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask,
165.66 - req.pData);
165.67 - }
165.68 - finally {
165.69 - XToolkit.awtUnlock();
165.70 - }
165.71 - } finally {
165.72 - req.dispose();
165.73 - }
165.74 + requestState(window, state, set);
165.75 } else {
165.76 XAtomList net_wm_state = window.getNETWMState();
165.77 log.log(Level.FINE, "Current state on {0} is {1}", new Object[] {window, net_wm_state});
165.78 @@ -252,6 +256,8 @@
165.79 XAtom XA_NET_WM_WINDOW_TYPE = XAtom.get("_NET_WM_WINDOW_TYPE");
165.80 XAtom XA_NET_WM_WINDOW_TYPE_DIALOG = XAtom.get("_NET_WM_WINDOW_TYPE_DIALOG");
165.81
165.82 + XAtom XA_NET_WM_WINDOW_OPACITY = XAtom.get("_NET_WM_WINDOW_OPACITY");
165.83 +
165.84 /* For _NET_WM_STATE ClientMessage requests */
165.85 final static int _NET_WM_STATE_REMOVE =0; /* remove/unset property */
165.86 final static int _NET_WM_STATE_ADD =1; /* add/set property */
165.87 @@ -289,6 +295,12 @@
165.88 boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_STATE_MODAL);
165.89 return res;
165.90 }
165.91 +
165.92 + boolean doOpacityProtocol() {
165.93 + boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_WINDOW_OPACITY);
165.94 + return res;
165.95 + }
165.96 +
165.97 boolean isWMName(String name) {
165.98 if (!active()) {
165.99 return false;
166.1 --- a/src/solaris/classes/sun/awt/X11/XPanelPeer.java Thu Apr 16 17:42:00 2009 +0100
166.2 +++ b/src/solaris/classes/sun/awt/X11/XPanelPeer.java Thu Apr 16 19:10:32 2009 -0700
166.3 @@ -130,39 +130,6 @@
166.4 return getInsets();
166.5 }
166.6
166.7 - /*
166.8 - * This method is called from XWindowPeer.displayChanged, when
166.9 - * the window this Panel is on is moved to the new screen, or
166.10 - * display mode is changed.
166.11 - *
166.12 - * The notification is propagated to the child Canvas components.
166.13 - * Top-level windows and other Panels are notified too as their
166.14 - * peers are subclasses of XCanvasPeer.
166.15 - */
166.16 - public void displayChanged(int screenNum) {
166.17 - super.displayChanged(screenNum);
166.18 - displayChanged((Container)target, screenNum);
166.19 - }
166.20 -
166.21 - /*
166.22 - * Recursively iterates through all the HW and LW children
166.23 - * of the container and calls displayChanged() for HW peers.
166.24 - * Iteration through children peers only is not enough as the
166.25 - * displayChanged notification may not be propagated to HW
166.26 - * components inside LW containers, see 4452373 for details.
166.27 - */
166.28 - private static void displayChanged(Container target, int screenNum) {
166.29 - Component children[] = ((Container)target).getComponents();
166.30 - for (Component child : children) {
166.31 - ComponentPeer cpeer = child.getPeer();
166.32 - if (cpeer instanceof XCanvasPeer) {
166.33 - ((XCanvasPeer)cpeer).displayChanged(screenNum);
166.34 - } else if (child instanceof Container) {
166.35 - displayChanged((Container)child, screenNum);
166.36 - }
166.37 - }
166.38 - }
166.39 -
166.40 public void dispose() {
166.41 if (embedder != null) {
166.42 embedder.deinstall();
167.1 --- a/src/solaris/classes/sun/awt/X11/XToolkit.java Thu Apr 16 17:42:00 2009 +0100
167.2 +++ b/src/solaris/classes/sun/awt/X11/XToolkit.java Thu Apr 16 19:10:32 2009 -0700
167.3 @@ -1,5 +1,5 @@
167.4 /*
167.5 - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
167.6 + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
167.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
167.8 *
167.9 * This code is free software; you can redistribute it and/or modify it
167.10 @@ -54,6 +54,7 @@
167.11 import sun.font.FontManager;
167.12 import sun.misc.PerformanceLogger;
167.13 import sun.print.PrintJob2D;
167.14 +import sun.security.action.GetBooleanAction;
167.15
167.16 public final class XToolkit extends UNIXToolkit implements Runnable {
167.17 private static Logger log = Logger.getLogger("sun.awt.X11.XToolkit");
167.18 @@ -291,6 +292,7 @@
167.19 if (XlibWrapper.XSetLocaleModifiers("") == null) {
167.20 log.finer("X locale modifiers are not supported, using default");
167.21 }
167.22 + tryXKB();
167.23
167.24 AwtScreenData defaultScreen = new AwtScreenData(XToolkit.getDefaultScreenData());
167.25 awt_defaultFg = defaultScreen.get_blackpixel();
167.26 @@ -313,6 +315,7 @@
167.27 if (xs != null) {
167.28 ((XAWTXSettings)xs).dispose();
167.29 }
167.30 + freeXKB();
167.31 if (log.isLoggable(Level.FINE)) {
167.32 dumpPeers();
167.33 }
167.34 @@ -591,6 +594,9 @@
167.35 if (ev.get_type() != XConstants.NoExpose) {
167.36 eventNumber++;
167.37 }
167.38 + if (awt_UseXKB_Calls && ev.get_type() == awt_XKBBaseEventCode) {
167.39 + processXkbChanges(ev);
167.40 + }
167.41
167.42 if (XDropTargetEventProcessor.processEvent(ev) ||
167.43 XDragSourceContextPeer.processEvent(ev)) {
167.44 @@ -2093,8 +2099,12 @@
167.45
167.46 static boolean awt_ServerInquired = false;
167.47 static boolean awt_IsXsunServer = false;
167.48 - static boolean awt_XKBInquired = false;
167.49 static boolean awt_UseXKB = false;
167.50 + static boolean awt_UseXKB_Calls = false;
167.51 + static int awt_XKBBaseEventCode = 0;
167.52 + static int awt_XKBEffectiveGroup = 0; // so far, I don't use it leaving all calculations
167.53 + // to XkbTranslateKeyCode
167.54 + static long awt_XKBDescPtr = 0;
167.55 /**
167.56 Try to understand if it is Xsun server.
167.57 By now (2005) Sun is vendor of Xsun and Xorg servers; we only return true if Xsun is running.
167.58 @@ -2124,24 +2134,144 @@
167.59 awtUnlock();
167.60 }
167.61 }
167.62 - /**
167.63 - Query XKEYBOARD extension.
167.64 - */
167.65 static boolean isXKBenabled() {
167.66 awtLock();
167.67 try {
167.68 - if( awt_XKBInquired ) {
167.69 - return awt_UseXKB;
167.70 - }
167.71 - awt_XKBInquired = true;
167.72 - String name = "XKEYBOARD";
167.73 - awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3);
167.74 return awt_UseXKB;
167.75 } finally {
167.76 awtUnlock();
167.77 }
167.78 }
167.79
167.80 + /**
167.81 + Query XKEYBOARD extension.
167.82 + If possible, initialize xkb library.
167.83 + */
167.84 + static boolean tryXKB() {
167.85 + awtLock();
167.86 + try {
167.87 + String name = "XKEYBOARD";
167.88 + // First, if there is extension at all.
167.89 + awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3);
167.90 + if( awt_UseXKB ) {
167.91 + // There is a keyboard extension. Check if a client library is compatible.
167.92 + // If not, don't use xkb calls.
167.93 + // In this case we still may be Xkb-capable application.
167.94 + awt_UseXKB_Calls = XlibWrapper.XkbLibraryVersion( XlibWrapper.larg1, XlibWrapper.larg2);
167.95 + if( awt_UseXKB_Calls ) {
167.96 + awt_UseXKB_Calls = XlibWrapper.XkbQueryExtension( getDisplay(), XlibWrapper.larg1, XlibWrapper.larg2,
167.97 + XlibWrapper.larg3, XlibWrapper.larg4, XlibWrapper.larg5);
167.98 + if( awt_UseXKB_Calls ) {
167.99 + awt_XKBBaseEventCode = Native.getInt(XlibWrapper.larg2);
167.100 + XlibWrapper.XkbSelectEvents (getDisplay(),
167.101 + XConstants.XkbUseCoreKbd,
167.102 + XConstants.XkbNewKeyboardNotifyMask |
167.103 + XConstants.XkbMapNotifyMask ,//|
167.104 + //XConstants.XkbStateNotifyMask,
167.105 + XConstants.XkbNewKeyboardNotifyMask |
167.106 + XConstants.XkbMapNotifyMask );//|
167.107 + //XConstants.XkbStateNotifyMask);
167.108 +
167.109 + XlibWrapper.XkbSelectEventDetails(getDisplay(), XConstants.XkbUseCoreKbd,
167.110 + XConstants.XkbStateNotify,
167.111 + XConstants.XkbGroupStateMask,
167.112 + XConstants.XkbGroupStateMask);
167.113 + //XXX ? XkbGroupLockMask last, XkbAllStateComponentsMask before last?
167.114 + awt_XKBDescPtr = XlibWrapper.XkbGetMap(getDisplay(),
167.115 + XConstants.XkbKeyTypesMask |
167.116 + XConstants.XkbKeySymsMask |
167.117 + XConstants.XkbModifierMapMask |
167.118 + XConstants.XkbVirtualModsMask,
167.119 + XConstants.XkbUseCoreKbd);
167.120 + }
167.121 + }
167.122 + }
167.123 + return awt_UseXKB;
167.124 + } finally {
167.125 + awtUnlock();
167.126 + }
167.127 + }
167.128 + static boolean canUseXKBCalls() {
167.129 + awtLock();
167.130 + try {
167.131 + return awt_UseXKB_Calls;
167.132 + } finally {
167.133 + awtUnlock();
167.134 + }
167.135 + }
167.136 + static int getXKBEffectiveGroup() {
167.137 + awtLock();
167.138 + try {
167.139 + return awt_XKBEffectiveGroup;
167.140 + } finally {
167.141 + awtUnlock();
167.142 + }
167.143 + }
167.144 + static int getXKBBaseEventCode() {
167.145 + awtLock();
167.146 + try {
167.147 + return awt_XKBBaseEventCode;
167.148 + } finally {
167.149 + awtUnlock();
167.150 + }
167.151 + }
167.152 + static long getXKBKbdDesc() {
167.153 + awtLock();
167.154 + try {
167.155 + return awt_XKBDescPtr;
167.156 + } finally {
167.157 + awtUnlock();
167.158 + }
167.159 + }
167.160 + void freeXKB() {
167.161 + awtLock();
167.162 + try {
167.163 + if (awt_UseXKB_Calls && awt_XKBDescPtr != 0) {
167.164 + XlibWrapper.XkbFreeKeyboard(awt_XKBDescPtr, 0xFF, true);
167.165 + }
167.166 + } finally {
167.167 + awtUnlock();
167.168 + }
167.169 + }
167.170 + private void processXkbChanges(XEvent ev) {
167.171 + // mapping change --> refresh kbd map
167.172 + // state change --> get a new effective group; do I really need it
167.173 + // or that should be left for XkbTranslateKeyCode?
167.174 + XkbEvent xke = new XkbEvent( ev.getPData() );
167.175 + int xkb_type = xke.get_any().get_xkb_type();
167.176 + switch( xkb_type ) {
167.177 + case XConstants.XkbNewKeyboardNotify :
167.178 + if( awt_XKBDescPtr != 0 ) {
167.179 + freeXKB();
167.180 + }
167.181 + awt_XKBDescPtr = XlibWrapper.XkbGetMap(getDisplay(),
167.182 + XConstants.XkbKeyTypesMask |
167.183 + XConstants.XkbKeySymsMask |
167.184 + XConstants.XkbModifierMapMask |
167.185 + XConstants.XkbVirtualModsMask,
167.186 + XConstants.XkbUseCoreKbd);
167.187 + //System.out.println("XkbNewKeyboard:"+(xke.get_new_kbd()));
167.188 + break;
167.189 + case XConstants.XkbMapNotify :
167.190 + //TODO: provide a simple unit test.
167.191 + XlibWrapper.XkbGetUpdatedMap(getDisplay(),
167.192 + XConstants.XkbKeyTypesMask |
167.193 + XConstants.XkbKeySymsMask |
167.194 + XConstants.XkbModifierMapMask |
167.195 + XConstants.XkbVirtualModsMask,
167.196 + awt_XKBDescPtr);
167.197 + //System.out.println("XkbMap:"+(xke.get_map()));
167.198 + break;
167.199 + case XConstants.XkbStateNotify :
167.200 + // May use it later e.g. to obtain an effective group etc.
167.201 + //System.out.println("XkbState:"+(xke.get_state()));
167.202 + break;
167.203 + default:
167.204 + //System.out.println("XkbEvent of xkb_type "+xkb_type);
167.205 + break;
167.206 + }
167.207 + }
167.208 +
167.209 private static long eventNumber;
167.210 public static long getEventNumber() {
167.211 awtLock();
167.212 @@ -2273,4 +2403,44 @@
167.213 public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
167.214 return areExtraMouseButtonsEnabled;
167.215 }
167.216 +
167.217 + @Override
167.218 + public boolean isWindowOpacitySupported() {
167.219 + XNETProtocol net_protocol = XWM.getWM().getNETProtocol();
167.220 +
167.221 + if (net_protocol == null) {
167.222 + return false;
167.223 + }
167.224 +
167.225 + return net_protocol.doOpacityProtocol();
167.226 + }
167.227 +
167.228 + @Override
167.229 + public boolean isWindowShapingSupported() {
167.230 + return XlibUtil.isShapingSupported();
167.231 + }
167.232 +
167.233 + @Override
167.234 + public boolean isWindowTranslucencySupported() {
167.235 + //NOTE: it may not be supported. The actual check is being performed
167.236 + // at com.sun.awt.AWTUtilities(). In X11 we need to check
167.237 + // whether there's any translucency-capable GC available.
167.238 + return true;
167.239 + }
167.240 +
167.241 + @Override
167.242 + public boolean isTranslucencyCapable(GraphicsConfiguration gc) {
167.243 + if (!(gc instanceof X11GraphicsConfig)) {
167.244 + return false;
167.245 + }
167.246 + return ((X11GraphicsConfig)gc).isTranslucencyCapable();
167.247 + }
167.248 +
167.249 + /**
167.250 + * Returns the value of "sun.awt.disablegrab" property. Default
167.251 + * value is {@code false}.
167.252 + */
167.253 + public static boolean getSunAwtDisableGrab() {
167.254 + return AccessController.doPrivileged(new GetBooleanAction("sun.awt.disablegrab"));
167.255 + }
167.256 }
168.1 --- a/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java Thu Apr 16 17:42:00 2009 +0100
168.2 +++ b/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java Thu Apr 16 19:10:32 2009 -0700
168.3 @@ -38,15 +38,18 @@
168.4 import java.security.PrivilegedAction;
168.5 import java.lang.reflect.InvocationTargetException;
168.6
168.7 -public class XTrayIconPeer implements TrayIconPeer {
168.8 +public class XTrayIconPeer implements TrayIconPeer,
168.9 + InfoWindow.Balloon.LiveArguments,
168.10 + InfoWindow.Tooltip.LiveArguments
168.11 +{
168.12 private static final Logger ctrLog = Logger.getLogger("sun.awt.X11.XTrayIconPeer.centering");
168.13
168.14 TrayIcon target;
168.15 TrayIconEventProxy eventProxy;
168.16 XTrayIconEmbeddedFrame eframe;
168.17 TrayIconCanvas canvas;
168.18 - Balloon balloon;
168.19 - Tooltip tooltip;
168.20 + InfoWindow.Balloon balloon;
168.21 + InfoWindow.Tooltip tooltip;
168.22 PopupMenu popup;
168.23 String tooltipString;
168.24 boolean isTrayIconDisplayed;
168.25 @@ -255,8 +258,8 @@
168.26 eframe.setVisible(true);
168.27 updateImage();
168.28
168.29 - balloon = new Balloon(this, eframe);
168.30 - tooltip = new Tooltip(this, eframe);
168.31 + balloon = new InfoWindow.Balloon(eframe, target, this);
168.32 + tooltip = new InfoWindow.Tooltip(eframe, target, this);
168.33
168.34 addListeners();
168.35 }
168.36 @@ -300,6 +303,10 @@
168.37 tooltipString = tooltip;
168.38 }
168.39
168.40 + public String getTooltipString() {
168.41 + return tooltipString;
168.42 + }
168.43 +
168.44 public void updateImage() {
168.45 Runnable r = new Runnable() {
168.46 public void run() {
168.47 @@ -385,7 +392,7 @@
168.48 return eframe.getLocationOnScreen();
168.49 }
168.50
168.51 - private Rectangle getBounds() {
168.52 + public Rectangle getBounds() {
168.53 Point loc = getLocationOnScreen();
168.54 return new Rectangle(loc.x, loc.y, loc.x + TRAY_ICON_WIDTH, loc.y + TRAY_ICON_HEIGHT);
168.55 }
168.56 @@ -399,10 +406,14 @@
168.57 return ((XEmbeddedFramePeer)eframe.getPeer()).getWindow();
168.58 }
168.59
168.60 - boolean isDisposed() {
168.61 + public boolean isDisposed() {
168.62 return isDisposed;
168.63 }
168.64
168.65 + public String getActionCommand() {
168.66 + return target.getActionCommand();
168.67 + }
168.68 +
168.69 static class TrayIconEventProxy implements MouseListener, MouseMotionListener {
168.70 XTrayIconPeer xtiPeer;
168.71
168.72 @@ -474,8 +485,8 @@
168.73 }
168.74
168.75 static boolean isTrayIconStuffWindow(Window w) {
168.76 - return (w instanceof Tooltip) ||
168.77 - (w instanceof Balloon) ||
168.78 + return (w instanceof InfoWindow.Tooltip) ||
168.79 + (w instanceof InfoWindow.Balloon) ||
168.80 (w instanceof XTrayIconEmbeddedFrame);
168.81 }
168.82
168.83 @@ -530,7 +541,7 @@
168.84 }
168.85 }
168.86
168.87 - static class IconCanvas extends Canvas {
168.88 + public static class IconCanvas extends Canvas {
168.89 volatile Image image;
168.90 IconObserver observer;
168.91 int width, height;
168.92 @@ -608,429 +619,4 @@
168.93 }
168.94 }
168.95 }
168.96 -
168.97 - // ***************************************
168.98 - // Classes for toolitp and balloon windows
168.99 - // ***************************************
168.100 -
168.101 - static class Tooltip extends InfoWindow {
168.102 - XTrayIconPeer xtiPeer;
168.103 - Label textLabel = new Label("");
168.104 - Runnable starter = new Runnable() {
168.105 - public void run() {
168.106 - display();
168.107 - }};
168.108 -
168.109 - final static int TOOLTIP_SHOW_TIME = 10000;
168.110 - final static int TOOLTIP_START_DELAY_TIME = 1000;
168.111 - final static int TOOLTIP_MAX_LENGTH = 64;
168.112 - final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5;
168.113 - final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220);
168.114 - final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont();
168.115 -
168.116 - Tooltip(XTrayIconPeer xtiPeer, Frame parent) {
168.117 - super(parent, Color.black);
168.118 - this.xtiPeer = xtiPeer;
168.119 -
168.120 - suppressWarningString(this);
168.121 -
168.122 - setCloser(null, TOOLTIP_SHOW_TIME);
168.123 - textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR);
168.124 - textLabel.setFont(TOOLTIP_TEXT_FONT);
168.125 - add(textLabel);
168.126 - }
168.127 -
168.128 - /*
168.129 - * WARNING: this method is executed on Toolkit thread!
168.130 - */
168.131 - void display() {
168.132 - String tip = xtiPeer.tooltipString;
168.133 - if (tip == null) {
168.134 - return;
168.135 - } else if (tip.length() > TOOLTIP_MAX_LENGTH) {
168.136 - textLabel.setText(tip.substring(0, TOOLTIP_MAX_LENGTH));
168.137 - } else {
168.138 - textLabel.setText(tip);
168.139 - }
168.140 -
168.141 - // Execute on EDT to avoid deadlock (see 6280857).
168.142 - SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() {
168.143 - public void run() {
168.144 - if (xtiPeer.isDisposed()) {
168.145 - return;
168.146 - }
168.147 - Point pointer = (Point)AccessController.doPrivileged(new PrivilegedAction() {
168.148 - public Object run() {
168.149 - if (!isPointerOverTrayIcon(xtiPeer.getBounds())) {
168.150 - return null;
168.151 - }
168.152 - return MouseInfo.getPointerInfo().getLocation();
168.153 - }
168.154 - });
168.155 - if (pointer == null) {
168.156 - return;
168.157 - }
168.158 - show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT);
168.159 - }
168.160 - });
168.161 - }
168.162 -
168.163 - void enter() {
168.164 - XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME);
168.165 - }
168.166 -
168.167 - void exit() {
168.168 - XToolkit.remove(starter);
168.169 - if (isVisible()) {
168.170 - hide();
168.171 - }
168.172 - }
168.173 -
168.174 - boolean isPointerOverTrayIcon(Rectangle trayRect) {
168.175 - Point p = MouseInfo.getPointerInfo().getLocation();
168.176 - return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) ||
168.177 - p.y < trayRect.y || p.y > (trayRect.y + trayRect.height));
168.178 - }
168.179 - }
168.180 -
168.181 - static class Balloon extends InfoWindow {
168.182 - final static int BALLOON_SHOW_TIME = 10000;
168.183 - final static int BALLOON_TEXT_MAX_LENGTH = 256;
168.184 - final static int BALLOON_WORD_LINE_MAX_LENGTH = 16;
168.185 - final static int BALLOON_WORD_LINE_MAX_COUNT = 4;
168.186 - final static int BALLOON_ICON_WIDTH = 32;
168.187 - final static int BALLOON_ICON_HEIGHT = 32;
168.188 - final static int BALLOON_TRAY_ICON_INDENT = 0;
168.189 - final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255);
168.190 - final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12);
168.191 -
168.192 - XTrayIconPeer xtiPeer;
168.193 - Panel mainPanel = new Panel();
168.194 - Panel captionPanel = new Panel();
168.195 - Label captionLabel = new Label("");
168.196 - Button closeButton = new Button("X");
168.197 - Panel textPanel = new Panel();
168.198 - IconCanvas iconCanvas = new IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT);
168.199 - Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT];
168.200 - ActionPerformer ap = new ActionPerformer();
168.201 -
168.202 - Image iconImage;
168.203 - Image errorImage;
168.204 - Image warnImage;
168.205 - Image infoImage;
168.206 - boolean gtkImagesLoaded;
168.207 -
168.208 - Displayer displayer = new Displayer();
168.209 -
168.210 - Balloon(final XTrayIconPeer xtiPeer, Frame parent) {
168.211 - super(parent, new Color(90, 80 ,190));
168.212 - this.xtiPeer = xtiPeer;
168.213 -
168.214 - suppressWarningString(this);
168.215 -
168.216 - setCloser(new Runnable() {
168.217 - public void run() {
168.218 - if (textPanel != null) {
168.219 - textPanel.removeAll();
168.220 - textPanel.setSize(0, 0);
168.221 - iconCanvas.setSize(0, 0);
168.222 - XToolkit.awtLock();
168.223 - try {
168.224 - displayer.isDisplayed = false;
168.225 - XToolkit.awtLockNotifyAll();
168.226 - } finally {
168.227 - XToolkit.awtUnlock();
168.228 - }
168.229 - }
168.230 - }
168.231 - }, BALLOON_SHOW_TIME);
168.232 -
168.233 - add(mainPanel);
168.234 -
168.235 - captionLabel.setFont(BALLOON_CAPTION_FONT);
168.236 - captionLabel.addMouseListener(ap);
168.237 -
168.238 - captionPanel.setLayout(new BorderLayout());
168.239 - captionPanel.add(captionLabel, BorderLayout.WEST);
168.240 - captionPanel.add(closeButton, BorderLayout.EAST);
168.241 - captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR);
168.242 - captionPanel.addMouseListener(ap);
168.243 -
168.244 - closeButton.addActionListener(new ActionListener() {
168.245 - public void actionPerformed(ActionEvent e) {
168.246 - hide();
168.247 - }
168.248 - });
168.249 -
168.250 - mainPanel.setLayout(new BorderLayout());
168.251 - mainPanel.setBackground(Color.white);
168.252 - mainPanel.add(captionPanel, BorderLayout.NORTH);
168.253 - mainPanel.add(iconCanvas, BorderLayout.WEST);
168.254 - mainPanel.add(textPanel, BorderLayout.CENTER);
168.255 -
168.256 - iconCanvas.addMouseListener(ap);
168.257 -
168.258 - for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) {
168.259 - lineLabels[i] = new Label();
168.260 - lineLabels[i].addMouseListener(ap);
168.261 - lineLabels[i].setBackground(Color.white);
168.262 - }
168.263 -
168.264 - displayer.start();
168.265 - }
168.266 -
168.267 - void display(String caption, String text, String messageType) {
168.268 - if (!gtkImagesLoaded) {
168.269 - loadGtkImages();
168.270 - }
168.271 - displayer.display(caption, text, messageType);
168.272 - }
168.273 -
168.274 - private void _display(String caption, String text, String messageType) {
168.275 - captionLabel.setText(caption);
168.276 -
168.277 - BreakIterator iter = BreakIterator.getWordInstance();
168.278 - if (text != null) {
168.279 - iter.setText(text);
168.280 - int start = iter.first(), end;
168.281 - int nLines = 0;
168.282 -
168.283 - do {
168.284 - end = iter.next();
168.285 -
168.286 - if (end == BreakIterator.DONE ||
168.287 - text.substring(start, end).length() >= 50)
168.288 - {
168.289 - lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ?
168.290 - iter.last() : end));
168.291 - textPanel.add(lineLabels[nLines++]);
168.292 - start = end;
168.293 - }
168.294 - if (nLines == BALLOON_WORD_LINE_MAX_COUNT) {
168.295 - if (end != BreakIterator.DONE) {
168.296 - lineLabels[nLines - 1].setText(
168.297 - new String(lineLabels[nLines - 1].getText() + " ..."));
168.298 - }
168.299 - break;
168.300 - }
168.301 - } while (end != BreakIterator.DONE);
168.302 -
168.303 -
168.304 - textPanel.setLayout(new GridLayout(nLines, 1));
168.305 - }
168.306 -
168.307 - if ("ERROR".equals(messageType)) {
168.308 - iconImage = errorImage;
168.309 - } else if ("WARNING".equals(messageType)) {
168.310 - iconImage = warnImage;
168.311 - } else if ("INFO".equals(messageType)) {
168.312 - iconImage = infoImage;
168.313 - } else {
168.314 - iconImage = null;
168.315 - }
168.316 -
168.317 - if (iconImage != null) {
168.318 - Dimension tpSize = textPanel.getSize();
168.319 - iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ?
168.320 - BALLOON_ICON_HEIGHT : tpSize.height));
168.321 - iconCanvas.validate();
168.322 - }
168.323 -
168.324 - SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() {
168.325 - public void run() {
168.326 - if (xtiPeer.isDisposed()) {
168.327 - return;
168.328 - }
168.329 - Point parLoc = getParent().getLocationOnScreen();
168.330 - Dimension parSize = getParent().getSize();
168.331 - show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2),
168.332 - BALLOON_TRAY_ICON_INDENT);
168.333 - if (iconImage != null) {
168.334 - iconCanvas.updateImage(iconImage); // call it after the show(..) above
168.335 - }
168.336 - }
168.337 - });
168.338 - }
168.339 -
168.340 - public void dispose() {
168.341 - displayer.interrupt();
168.342 - super.dispose();
168.343 - }
168.344 -
168.345 - void loadGtkImages() {
168.346 - if (!gtkImagesLoaded) {
168.347 - errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
168.348 - "gtk.icon.gtk-dialog-error.6.rtl");
168.349 - warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
168.350 - "gtk.icon.gtk-dialog-warning.6.rtl");
168.351 - infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty(
168.352 - "gtk.icon.gtk-dialog-info.6.rtl");
168.353 - gtkImagesLoaded = true;
168.354 - }
168.355 - }
168.356 -
168.357 - class ActionPerformer extends MouseAdapter {
168.358 - public void mouseClicked(MouseEvent e) {
168.359 - // hide the balloon by any click
168.360 - hide();
168.361 - if (e.getButton() == MouseEvent.BUTTON1) {
168.362 - ActionEvent aev = new ActionEvent(xtiPeer.target, ActionEvent.ACTION_PERFORMED,
168.363 - xtiPeer.target.getActionCommand(),
168.364 - e.getWhen(), e.getModifiers());
168.365 - Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(aev);
168.366 - }
168.367 - }
168.368 - }
168.369 -
168.370 - class Displayer extends Thread {
168.371 - final int MAX_CONCURRENT_MSGS = 10;
168.372 -
168.373 - ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS);
168.374 - boolean isDisplayed;
168.375 -
168.376 - Displayer() {
168.377 - setDaemon(true);
168.378 - }
168.379 -
168.380 - public void run() {
168.381 - while (true) {
168.382 - Message msg = null;
168.383 - try {
168.384 - msg = (Message)messageQueue.take();
168.385 - } catch (InterruptedException e) {
168.386 - return;
168.387 - }
168.388 -
168.389 - /*
168.390 - * Wait till the previous message is displayed if any
168.391 - */
168.392 - XToolkit.awtLock();
168.393 - try {
168.394 - while (isDisplayed) {
168.395 - try {
168.396 - XToolkit.awtLockWait();
168.397 - } catch (InterruptedException e) {
168.398 - return;
168.399 - }
168.400 - }
168.401 - isDisplayed = true;
168.402 - } finally {
168.403 - XToolkit.awtUnlock();
168.404 - }
168.405 - _display(msg.caption, msg.text, msg.messageType);
168.406 - }
168.407 - }
168.408 -
168.409 - void display(String caption, String text, String messageType) {
168.410 - messageQueue.offer(new Message(caption, text, messageType));
168.411 - }
168.412 - }
168.413 -
168.414 - class Message {
168.415 - String caption, text, messageType;
168.416 -
168.417 - Message(String caption, String text, String messageType) {
168.418 - this.caption = caption;
168.419 - this.text = text;
168.420 - this.messageType = messageType;
168.421 - }
168.422 - }
168.423 - }
168.424 -
168.425 - static class InfoWindow extends Window {
168.426 - Container container;
168.427 - Closer closer;
168.428 -
168.429 - InfoWindow(Frame parent, Color borderColor) {
168.430 - super(parent);
168.431 - container = new Container() {
168.432 - public Insets getInsets() {
168.433 - return new Insets(1, 1, 1, 1);
168.434 - }
168.435 - };
168.436 - setLayout(new BorderLayout());
168.437 - setBackground(borderColor);
168.438 - add(container, BorderLayout.CENTER);
168.439 - container.setLayout(new BorderLayout());
168.440 -
168.441 - closer = new Closer();
168.442 - }
168.443 -
168.444 - public Component add(Component c) {
168.445 - container.add(c, BorderLayout.CENTER);
168.446 - return c;
168.447 - }
168.448 -
168.449 - void setCloser(Runnable action, int time) {
168.450 - closer.set(action, time);
168.451 - }
168.452 -
168.453 - // Must be executed on EDT.
168.454 - protected void show(Point corner, int indent) {
168.455 - assert SunToolkit.isDispatchThreadForAppContext(InfoWindow.this);
168.456 -
168.457 - pack();
168.458 -
168.459 - Dimension size = getSize();
168.460 - // TODO: When 6356322 is fixed we should get screen bounds in
168.461 - // this way: eframe.getGraphicsConfiguration().getBounds().
168.462 - Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
168.463 -
168.464 - if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square
168.465 - setLocation(corner.x + indent, corner.y + indent);
168.466 -
168.467 - } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square
168.468 - setLocation(corner.x - indent - size.width, corner.y + indent);
168.469 -
168.470 - } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square
168.471 - setLocation(corner.x + indent, corner.y - indent - size.height);
168.472 -
168.473 - } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square
168.474 - setLocation(corner.x - indent - size.width, corner.y - indent - size.height);
168.475 - }
168.476 -
168.477 - InfoWindow.super.show();
168.478 - InfoWindow.this.closer.schedule();
168.479 - }
168.480 -
168.481 - public void hide() {
168.482 - closer.close();
168.483 - }
168.484 -
168.485 - class Closer implements Runnable {
168.486 - Runnable action;
168.487 - int time;
168.488 -
168.489 - public void run() {
168.490 - doClose();
168.491 - }
168.492 -
168.493 - void set(Runnable action, int time) {
168.494 - this.action = action;
168.495 - this.time = time;
168.496 - }
168.497 -
168.498 - void schedule() {
168.499 - XToolkit.schedule(this, time);
168.500 - }
168.501 -
168.502 - void close() {
168.503 - XToolkit.remove(this);
168.504 - doClose();
168.505 - }
168.506 -
168.507 - // WARNING: this method may be executed on Toolkit thread.
168.508 - private void doClose() {
168.509 - SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() {
168.510 - public void run() {
168.511 - InfoWindow.super.hide();
168.512 - invalidate();
168.513 - if (action != null) {
168.514 - action.run();
168.515 - }
168.516 - }
168.517 - });
168.518 - }
168.519 - }
168.520 - }
168.521 }
169.1 --- a/src/solaris/classes/sun/awt/X11/XWM.java Thu Apr 16 17:42:00 2009 +0100
169.2 +++ b/src/solaris/classes/sun/awt/X11/XWM.java Thu Apr 16 19:10:32 2009 -0700
169.3 @@ -896,7 +896,7 @@
169.4 /*
169.5 * Set MWM decorations. Set MWM functions depending on resizability.
169.6 */
169.7 - static void setMotifDecor(XWindowPeer window, boolean resizable, int decorations, int functions) {
169.8 + static void setMotifDecor(XWindow window, boolean resizable, int decorations, int functions) {
169.9 /* Apparently some WMs don't implement MWM_*_ALL semantic correctly */
169.10 if ((decorations & MWMConstants.MWM_DECOR_ALL) != 0
169.11 && (decorations != MWMConstants.MWM_DECOR_ALL))
170.1 --- a/src/solaris/classes/sun/awt/X11/XWarningWindow.java Thu Apr 16 17:42:00 2009 +0100
170.2 +++ b/src/solaris/classes/sun/awt/X11/XWarningWindow.java Thu Apr 16 19:10:32 2009 -0700
170.3 @@ -25,16 +25,194 @@
170.4 package sun.awt.X11;
170.5
170.6 import java.awt.*;
170.7 +import java.awt.event.*;
170.8 +import java.awt.geom.Point2D;
170.9 +import java.lang.ref.WeakReference;
170.10 +import sun.java2d.SunGraphics2D;
170.11 +import sun.java2d.pipe.Region;
170.12 +import sun.awt.AWTAccessor;
170.13 +import sun.awt.SunToolkit;
170.14
170.15 class XWarningWindow extends XWindow {
170.16 - final static int defaultHeight = 27;
170.17 + private final static int showingDelay = 330;
170.18 + private final static int hidingDelay = 2000;
170.19
170.20 - Window ownerWindow;
170.21 - XWarningWindow(Window ownerWindow, long parentWindow) {
170.22 - super(ownerWindow, parentWindow);
170.23 + private final Window ownerWindow;
170.24 + private WeakReference<XWindowPeer> ownerPeer;
170.25 +
170.26 + public final Window getOwnerWindow() {
170.27 + return ownerWindow;
170.28 + }
170.29 + private long parentWindow;
170.30 +
170.31 + private final static String OWNER = "OWNER";
170.32 +
170.33 + private static XIconInfo[][] icons;
170.34 +
170.35 + private InfoWindow.Tooltip tooltip;
170.36 +
170.37 + private static synchronized XIconInfo getSecurityIconInfo(int size, int num) {
170.38 + if (icons == null) {
170.39 + icons = new XIconInfo[4][3];
170.40 + if (XlibWrapper.dataModel == 32) {
170.41 + icons[0][0] = new XIconInfo(XAWTIcon32_security_icon_bw16_png.security_icon_bw16_png);
170.42 + icons[0][1] = new XIconInfo(XAWTIcon32_security_icon_interim16_png.security_icon_interim16_png);
170.43 + icons[0][2] = new XIconInfo(XAWTIcon32_security_icon_yellow16_png.security_icon_yellow16_png);
170.44 + icons[1][0] = new XIconInfo(XAWTIcon32_security_icon_bw24_png.security_icon_bw24_png);
170.45 + icons[1][1] = new XIconInfo(XAWTIcon32_security_icon_interim24_png.security_icon_interim24_png);
170.46 + icons[1][2] = new XIconInfo(XAWTIcon32_security_icon_yellow24_png.security_icon_yellow24_png);
170.47 + icons[2][0] = new XIconInfo(XAWTIcon32_security_icon_bw32_png.security_icon_bw32_png);
170.48 + icons[2][1] = new XIconInfo(XAWTIcon32_security_icon_interim32_png.security_icon_interim32_png);
170.49 + icons[2][2] = new XIconInfo(XAWTIcon32_security_icon_yellow32_png.security_icon_yellow32_png);
170.50 + icons[3][0] = new XIconInfo(XAWTIcon32_security_icon_bw48_png.security_icon_bw48_png);
170.51 + icons[3][1] = new XIconInfo(XAWTIcon32_security_icon_interim48_png.security_icon_interim48_png);
170.52 + icons[3][2] = new XIconInfo(XAWTIcon32_security_icon_yellow48_png.security_icon_yellow48_png);
170.53 + } else {
170.54 + icons[0][0] = new XIconInfo(XAWTIcon64_security_icon_bw16_png.security_icon_bw16_png);
170.55 + icons[0][1] = new XIconInfo(XAWTIcon64_security_icon_interim16_png.security_icon_interim16_png);
170.56 + icons[0][2] = new XIconInfo(XAWTIcon64_security_icon_yellow16_png.security_icon_yellow16_png);
170.57 + icons[1][0] = new XIconInfo(XAWTIcon64_security_icon_bw24_png.security_icon_bw24_png);
170.58 + icons[1][1] = new XIconInfo(XAWTIcon64_security_icon_interim24_png.security_icon_interim24_png);
170.59 + icons[1][2] = new XIconInfo(XAWTIcon64_security_icon_yellow24_png.security_icon_yellow24_png);
170.60 + icons[2][0] = new XIconInfo(XAWTIcon64_security_icon_bw32_png.security_icon_bw32_png);
170.61 + icons[2][1] = new XIconInfo(XAWTIcon64_security_icon_interim32_png.security_icon_interim32_png);
170.62 + icons[2][2] = new XIconInfo(XAWTIcon64_security_icon_yellow32_png.security_icon_yellow32_png);
170.63 + icons[3][0] = new XIconInfo(XAWTIcon64_security_icon_bw48_png.security_icon_bw48_png);
170.64 + icons[3][1] = new XIconInfo(XAWTIcon64_security_icon_interim48_png.security_icon_interim48_png);
170.65 + icons[3][2] = new XIconInfo(XAWTIcon64_security_icon_yellow48_png.security_icon_yellow48_png);
170.66 + }
170.67 + }
170.68 + final int sizeIndex = size % icons.length;
170.69 + return icons[sizeIndex][num % icons[sizeIndex].length];
170.70 + }
170.71 +
170.72 + private volatile int currentIcon = 0;
170.73 +
170.74 + /* -1 - uninitialized yet
170.75 + * 0 - 16x16
170.76 + * 1 - 24x24
170.77 + * 2 - 32x32
170.78 + * 3 - 48x48
170.79 + */
170.80 + private volatile int currentSize = -1;
170.81 +
170.82 + /** Indicates whether the shape of the window must be updated
170.83 + */
170.84 + private volatile boolean sizeUpdated = true;
170.85 +
170.86 + private synchronized boolean updateIconSize() {
170.87 + int newSize = currentSize;
170.88 +
170.89 + if (ownerWindow != null) {
170.90 + Insets insets = ownerWindow.getInsets();
170.91 + int max = Math.max(insets.top, Math.max(insets.bottom,
170.92 + Math.max(insets.left, insets.right)));
170.93 + if (max < 24) {
170.94 + newSize = 0;
170.95 + } else if (max < 32) {
170.96 + newSize = 1;
170.97 + } else if (max < 48) {
170.98 + newSize = 2;
170.99 + } else {
170.100 + newSize = 3;
170.101 + }
170.102 + }
170.103 + if (newSize != currentSize) {
170.104 + currentSize = newSize;
170.105 + sizeUpdated = true;
170.106 + }
170.107 + return sizeUpdated;
170.108 + }
170.109 +
170.110 + private synchronized XIconInfo getSecurityIconInfo() {
170.111 + updateIconSize();
170.112 + return getSecurityIconInfo(currentSize, currentIcon);
170.113 + }
170.114 +
170.115 + XWarningWindow(final Window ownerWindow, long parentWindow, XWindowPeer ownerPeer) {
170.116 + super(new XCreateWindowParams(new Object[] {
170.117 + TARGET, ownerWindow,
170.118 + OWNER, Long.valueOf(parentWindow)
170.119 + }));
170.120 this.ownerWindow = ownerWindow;
170.121 - xSetVisible(true);
170.122 - toFront();
170.123 + this.parentWindow = parentWindow;
170.124 + this.tooltip = new InfoWindow.Tooltip(null, getTarget(),
170.125 + new InfoWindow.Tooltip.LiveArguments() {
170.126 + public boolean isDisposed() {
170.127 + return XWarningWindow.this.isDisposed();
170.128 + }
170.129 + public Rectangle getBounds() {
170.130 + return XWarningWindow.this.getBounds();
170.131 + }
170.132 + public String getTooltipString() {
170.133 + return XWarningWindow.this.ownerWindow.getWarningString();
170.134 + }
170.135 + });
170.136 + this.ownerPeer = new WeakReference<XWindowPeer>(ownerPeer);
170.137 + }
170.138 +
170.139 + private void requestNoTaskbar() {
170.140 + XNETProtocol netProtocol = XWM.getWM().getNETProtocol();
170.141 + if (netProtocol != null) {
170.142 + netProtocol.requestState(this, netProtocol.XA_NET_WM_STATE_SKIP_TASKBAR, true);
170.143 + }
170.144 + }
170.145 +
170.146 + @Override
170.147 + void postInit(XCreateWindowParams params) {
170.148 + super.postInit(params);
170.149 + XToolkit.awtLock();
170.150 + try {
170.151 + XWM.setMotifDecor(this, false, 0, 0);
170.152 + XWM.setOLDecor(this, false, 0);
170.153 +
170.154 + long parentWindow = ((Long)params.get(OWNER)).longValue();
170.155 + XlibWrapper.XSetTransientFor(XToolkit.getDisplay(),
170.156 + getWindow(), parentWindow);
170.157 +
170.158 + XWMHints hints = getWMHints();
170.159 + hints.set_flags(hints.get_flags() | (int)XUtilConstants.InputHint | (int)XUtilConstants.StateHint);
170.160 + hints.set_input(false);
170.161 + hints.set_initial_state(XUtilConstants.NormalState);
170.162 + XlibWrapper.XSetWMHints(XToolkit.getDisplay(), getWindow(), hints.pData);
170.163 +
170.164 + initWMProtocols();
170.165 + requestNoTaskbar();
170.166 + } finally {
170.167 + XToolkit.awtUnlock();
170.168 + }
170.169 + }
170.170 +
170.171 + private void updateWarningWindowBounds() {
170.172 + XWindowPeer peer = ownerPeer.get();
170.173 + if (peer != null) {
170.174 + synchronized (this) {
170.175 + if (updateIconSize()) {
170.176 + XIconInfo ico = getSecurityIconInfo();
170.177 + XToolkit.awtLock();
170.178 + try {
170.179 + XlibWrapper.SetBitmapShape(XToolkit.getDisplay(), getWindow(),
170.180 + ico.getWidth(), ico.getHeight(), ico.getIntData());
170.181 + } finally {
170.182 + XToolkit.awtUnlock();
170.183 + }
170.184 + sizeUpdated = false;
170.185 + AWTAccessor.getWindowAccessor().setSecurityWarningSize(
170.186 + ownerWindow, ico.getWidth(), ico.getHeight());
170.187 + }
170.188 + }
170.189 + peer.repositionSecurityWarning();
170.190 + }
170.191 + }
170.192 +
170.193 + /**
170.194 + * @param x,y,w,h coordinates of the untrusted window
170.195 + */
170.196 + public void reposition(int x, int y, int w, int h) {
170.197 + Point2D point = AWTAccessor.getWindowAccessor().
170.198 + calculateSecurityWarningPosition(ownerWindow,
170.199 + x, y, w, h);
170.200 + reshape((int)point.getX(), (int)point.getY(), getWidth(), getHeight());
170.201 }
170.202
170.203 protected String getWMName() {
170.204 @@ -49,33 +227,19 @@
170.205 getFont());
170.206 }
170.207 void paint(Graphics g, int x, int y, int width, int height) {
170.208 - String warningString = getWarningString();
170.209 - Rectangle bounds = getBounds();
170.210 - bounds.x = 0;
170.211 - bounds.y = 0;
170.212 - Rectangle updateRect = new Rectangle(x, y, width, height);
170.213 - if (updateRect.intersects(bounds)) {
170.214 - Rectangle updateArea = updateRect.intersection(bounds);
170.215 - g.setClip(updateArea);
170.216 - g.setColor(getBackground());
170.217 - g.fillRect(updateArea.x, updateArea.y, updateArea.width, updateArea.height);
170.218 - g.setColor(getColor());
170.219 - g.setFont(getFont());
170.220 - FontMetrics fm = g.getFontMetrics();
170.221 - int warningWidth = fm.stringWidth(warningString);
170.222 - int w_x = (bounds.width - warningWidth)/2;
170.223 - int w_y = (bounds.height + fm.getMaxAscent() - fm.getMaxDescent())/2;
170.224 - g.drawString(warningString, w_x, w_y);
170.225 - g.drawLine(bounds.x, bounds.y+bounds.height-1, bounds.x+bounds.width-1, bounds.y+bounds.height-1);
170.226 - }
170.227 + g.drawImage(getSecurityIconInfo().getImage(), 0, 0, null);
170.228 }
170.229
170.230 String getWarningString() {
170.231 return ownerWindow.getWarningString();
170.232 }
170.233
170.234 + int getWidth() {
170.235 + return getSecurityIconInfo().getWidth();
170.236 + }
170.237 +
170.238 int getHeight() {
170.239 - return defaultHeight; // should implement depending on Font
170.240 + return getSecurityIconInfo().getHeight();
170.241 }
170.242
170.243 Color getBackground() {
170.244 @@ -97,6 +261,7 @@
170.245 }
170.246 }
170.247
170.248 + @Override
170.249 public void handleExposeEvent(XEvent xev) {
170.250 super.handleExposeEvent(xev);
170.251
170.252 @@ -105,18 +270,156 @@
170.253 final int y = xe.get_y();
170.254 final int width = xe.get_width();
170.255 final int height = xe.get_height();
170.256 - EventQueue.invokeLater(new Runnable() {
170.257 - public void run() {
170.258 - Graphics g = getGraphics();
170.259 - try {
170.260 - paint(g, x, y, width, height);
170.261 - } finally {
170.262 - g.dispose();
170.263 - }
170.264 - }
170.265 - });
170.266 + SunToolkit.executeOnEventHandlerThread(target,
170.267 + new Runnable() {
170.268 + public void run() {
170.269 + Graphics g = getGraphics();
170.270 + try {
170.271 + paint(g, x, y, width, height);
170.272 + } finally {
170.273 + g.dispose();
170.274 + }
170.275 + }
170.276 + });
170.277 }
170.278 +
170.279 + @Override
170.280 protected boolean isEventDisabled(XEvent e) {
170.281 return true;
170.282 }
170.283 +
170.284 + /** Send a synthetic UnmapNotify in order to withdraw the window.
170.285 + */
170.286 + private void withdraw() {
170.287 + XEvent req = new XEvent();
170.288 + try {
170.289 + long root;
170.290 + XToolkit.awtLock();
170.291 + try {
170.292 + root = XlibWrapper.RootWindow(XToolkit.getDisplay(), getScreenNumber());
170.293 + }
170.294 + finally {
170.295 + XToolkit.awtUnlock();
170.296 + }
170.297 +
170.298 + req.set_type(XConstants.UnmapNotify);
170.299 +
170.300 + XUnmapEvent umev = req.get_xunmap();
170.301 +
170.302 + umev.set_event(root);
170.303 + umev.set_window(getWindow());
170.304 + umev.set_from_configure(false);
170.305 +
170.306 + XToolkit.awtLock();
170.307 + try {
170.308 + XlibWrapper.XSendEvent(XToolkit.getDisplay(),
170.309 + root,
170.310 + false,
170.311 + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask,
170.312 + req.pData);
170.313 + }
170.314 + finally {
170.315 + XToolkit.awtUnlock();
170.316 + }
170.317 + } finally {
170.318 + req.dispose();
170.319 + }
170.320 + }
170.321 +
170.322 + @Override
170.323 + protected void stateChanged(long time, int oldState, int newState) {
170.324 + if (newState == XUtilConstants.IconicState) {
170.325 + super.xSetVisible(false);
170.326 + withdraw();
170.327 + }
170.328 + }
170.329 +
170.330 + @Override
170.331 + protected void setMouseAbove(boolean above) {
170.332 + super.setMouseAbove(above);
170.333 + XWindowPeer p = ownerPeer.get();
170.334 + if (p != null) {
170.335 + p.updateSecurityWarningVisibility();
170.336 + }
170.337 + }
170.338 +
170.339 + @Override
170.340 + protected void enterNotify(long window) {
170.341 + super.enterNotify(window);
170.342 + if (window == getWindow()) {
170.343 + tooltip.enter();
170.344 + }
170.345 + }
170.346 +
170.347 + @Override
170.348 + protected void leaveNotify(long window) {
170.349 + super.leaveNotify(window);
170.350 + if (window == getWindow()) {
170.351 + tooltip.exit();
170.352 + }
170.353 + }
170.354 +
170.355 + @Override
170.356 + public void xSetVisible(boolean visible) {
170.357 + super.xSetVisible(visible);
170.358 +
170.359 + // The _NET_WM_STATE_SKIP_TASKBAR got reset upon hiding/showing,
170.360 + // so we request it every time whenever we change the visibility.
170.361 + requestNoTaskbar();
170.362 + }
170.363 +
170.364 + private final Runnable hidingTask = new Runnable() {
170.365 + public void run() {
170.366 + xSetVisible(false);
170.367 + }
170.368 + };
170.369 +
170.370 + private final Runnable showingTask = new Runnable() {
170.371 + public void run() {
170.372 + new Thread() {
170.373 + public void run() {
170.374 + if (!isVisible()) {
170.375 + xSetVisible(true);
170.376 + updateWarningWindowBounds();
170.377 + }
170.378 + repaint();
170.379 + if (currentIcon > 0) {
170.380 + currentIcon--;
170.381 + XToolkit.schedule(showingTask, showingDelay);
170.382 + }
170.383 + }}.start();
170.384 + }
170.385 + };
170.386 +
170.387 + public void setSecurityWarningVisible(boolean visible) {
170.388 + setSecurityWarningVisible(visible, true);
170.389 + }
170.390 +
170.391 + public void setSecurityWarningVisible(boolean visible, boolean doSchedule) {
170.392 + if (visible) {
170.393 + XToolkit.remove(hidingTask);
170.394 + XToolkit.remove(showingTask);
170.395 + if (isVisible()) {
170.396 + currentIcon = 0;
170.397 + } else {
170.398 + currentIcon = 3;
170.399 + }
170.400 + if (doSchedule) {
170.401 + XToolkit.schedule(showingTask, 1);
170.402 + } else {
170.403 + showingTask.run();
170.404 + }
170.405 + } else {
170.406 + XToolkit.remove(showingTask);
170.407 + XToolkit.remove(hidingTask);
170.408 + if (!isVisible()) {
170.409 + return;
170.410 + }
170.411 + if (doSchedule) {
170.412 + XToolkit.schedule(hidingTask, hidingDelay);
170.413 + } else {
170.414 + hidingTask.run();
170.415 + }
170.416 + }
170.417 + }
170.418 }
171.1 --- a/src/solaris/classes/sun/awt/X11/XWindow.java Thu Apr 16 17:42:00 2009 +0100
171.2 +++ b/src/solaris/classes/sun/awt/X11/XWindow.java Thu Apr 16 19:10:32 2009 -0700
171.3 @@ -1,5 +1,5 @@
171.4 /*
171.5 - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
171.6 + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
171.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
171.8 *
171.9 * This code is free software; you can redistribute it and/or modify it
171.10 @@ -68,6 +68,15 @@
171.11 int oldWidth = -1;
171.12 int oldHeight = -1;
171.13
171.14 + protected PropMwmHints mwm_hints;
171.15 + protected static XAtom wm_protocols;
171.16 + protected static XAtom wm_delete_window;
171.17 + protected static XAtom wm_take_focus;
171.18 +
171.19 + private boolean stateChanged; // Indicates whether the value on savedState is valid
171.20 + private int savedState; // Holds last known state of the top-level window
171.21 +
171.22 + XWindowAttributesData winAttr;
171.23
171.24 protected X11GraphicsConfig graphicsConfig;
171.25 protected AwtGraphicsConfigData graphicsConfigData;
171.26 @@ -119,6 +128,9 @@
171.27 private native static void initIDs();
171.28
171.29 private static Field isPostedField;
171.30 + private static Field rawCodeField;
171.31 + private static Field primaryLevelUnicodeField;
171.32 + private static Field extendedKeyCodeField;
171.33 static {
171.34 initIDs();
171.35 }
171.36 @@ -218,6 +230,20 @@
171.37 }
171.38
171.39 params.putIfNull(BACKING_STORE, XToolkit.getBackingStoreType());
171.40 +
171.41 + XToolkit.awtLock();
171.42 + try {
171.43 + if (wm_protocols == null) {
171.44 + wm_protocols = XAtom.get("WM_PROTOCOLS");
171.45 + wm_delete_window = XAtom.get("WM_DELETE_WINDOW");
171.46 + wm_take_focus = XAtom.get("WM_TAKE_FOCUS");
171.47 + }
171.48 + }
171.49 + finally {
171.50 + XToolkit.awtUnlock();
171.51 + }
171.52 + winAttr = new XWindowAttributesData();
171.53 + savedState = XUtilConstants.WithdrawnState;
171.54 }
171.55
171.56 void postInit(XCreateWindowParams params) {
171.57 @@ -832,12 +858,42 @@
171.58 public native boolean x11inputMethodLookupString(long event, long [] keysymArray);
171.59 native boolean haveCurrentX11InputMethodInstance();
171.60
171.61 + private boolean mouseAboveMe;
171.62 +
171.63 + public boolean isMouseAbove() {
171.64 + synchronized (getStateLock()) {
171.65 + return mouseAboveMe;
171.66 + }
171.67 + }
171.68 + protected void setMouseAbove(boolean above) {
171.69 + synchronized (getStateLock()) {
171.70 + mouseAboveMe = above;
171.71 + }
171.72 + }
171.73 +
171.74 + protected void enterNotify(long window) {
171.75 + if (window == getWindow()) {
171.76 + setMouseAbove(true);
171.77 + }
171.78 + }
171.79 + protected void leaveNotify(long window) {
171.80 + if (window == getWindow()) {
171.81 + setMouseAbove(false);
171.82 + }
171.83 + }
171.84 +
171.85 public void handleXCrossingEvent(XEvent xev) {
171.86 super.handleXCrossingEvent(xev);
171.87 XCrossingEvent xce = xev.get_xcrossing();
171.88
171.89 if (eventLog.isLoggable(Level.FINEST)) eventLog.finest(xce.toString());
171.90
171.91 + if (xce.get_type() == XConstants.EnterNotify) {
171.92 + enterNotify(xce.get_window());
171.93 + } else { // LeaveNotify:
171.94 + leaveNotify(xce.get_window());
171.95 + }
171.96 +
171.97 // Skip event If it was caused by a grab
171.98 // This is needed because on displays with focus-follows-mouse on MousePress X system generates
171.99 // two XCrossing events with mode != NormalNotify. First of them notifies that the mouse has left
171.100 @@ -984,7 +1040,7 @@
171.101 Parameter is a keysym basically from keysymdef.h
171.102 XXX: how about vendor keys? Is there some with Unicode value and not in the list?
171.103 */
171.104 - char keysymToUnicode( long keysym, int state ) {
171.105 + int keysymToUnicode( long keysym, int state ) {
171.106 return XKeysym.convertKeysym( keysym, state );
171.107 }
171.108 int keyEventType2Id( int xEventType ) {
171.109 @@ -994,6 +1050,13 @@
171.110 static private long xkeycodeToKeysym(XKeyEvent ev) {
171.111 return XKeysym.getKeysym( ev );
171.112 }
171.113 + private long xkeycodeToPrimaryKeysym(XKeyEvent ev) {
171.114 + return XKeysym.xkeycode2primary_keysym( ev );
171.115 + }
171.116 + static private int primaryUnicode2JavaKeycode(int uni) {
171.117 + return (uni > 0? sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(uni) : 0);
171.118 + //return (uni > 0? uni + 0x01000000 : 0);
171.119 + }
171.120 void logIncomingKeyEvent(XKeyEvent ev) {
171.121 keyEventLog.fine("--XWindow.java:handleKeyEvent:"+ev);
171.122 dumpKeysymArray(ev);
171.123 @@ -1012,7 +1075,7 @@
171.124 // un-final it if you need to override it in a subclass.
171.125 final void handleKeyPress(XKeyEvent ev) {
171.126 long keysym[] = new long[2];
171.127 - char unicodeKey = 0;
171.128 + int unicodeKey = 0;
171.129 keysym[0] = XConstants.NoSymbol;
171.130
171.131 if (keyEventLog.isLoggable(Level.FINE)) {
171.132 @@ -1057,19 +1120,36 @@
171.133 if( jkc == null ) {
171.134 jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN);
171.135 }
171.136 +
171.137 + // Take the first keysym from a keysym array associated with the XKeyevent
171.138 + // and convert it to Unicode. Then, even if a Java keycode for the keystroke
171.139 + // is undefined, we still have a guess of what has been engraved on a keytop.
171.140 + int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0);
171.141 +
171.142 if (keyEventLog.isLoggable(Level.FINE)) {
171.143 keyEventLog.fine(">>>Fire Event:"+
171.144 (ev.get_type() == XConstants.KeyPress ? "KEY_PRESSED; " : "KEY_RELEASED; ")+
171.145 "jkeycode:decimal="+jkc.getJavaKeycode()+
171.146 - ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "
171.147 + ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "+
171.148 + " legacy jkeycode: decimal="+XKeysym.getLegacyJavaKeycodeOnly(ev)+
171.149 + ", hex=0x"+Integer.toHexString(XKeysym.getLegacyJavaKeycodeOnly(ev))+"; "
171.150 );
171.151 }
171.152 +
171.153 + int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible
171.154 + int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
171.155 + primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
171.156 + jkc.getJavaKeycode();
171.157 postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED,
171.158 ev.get_time(),
171.159 - jkc.getJavaKeycode(),
171.160 + jkeyToReturn,
171.161 (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey),
171.162 jkc.getKeyLocation(),
171.163 - ev.get_state(),ev.getPData(), XKeyEvent.getSize());
171.164 + ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()),
171.165 + unicodeFromPrimaryKeysym,
171.166 + jkeyExtended);
171.167 +
171.168 +
171.169 if( unicodeKey > 0 ) {
171.170 keyEventLog.fine("fire _TYPED on "+unicodeKey);
171.171 postKeyEvent( java.awt.event.KeyEvent.KEY_TYPED,
171.172 @@ -1077,7 +1157,10 @@
171.173 java.awt.event.KeyEvent.VK_UNDEFINED,
171.174 unicodeKey,
171.175 java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN,
171.176 - ev.get_state(),ev.getPData(), XKeyEvent.getSize());
171.177 + ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)0,
171.178 + unicodeFromPrimaryKeysym,
171.179 + java.awt.event.KeyEvent.VK_UNDEFINED);
171.180 +
171.181 }
171.182
171.183
171.184 @@ -1095,7 +1178,7 @@
171.185 // un-private it if you need to call it from elsewhere
171.186 private void handleKeyRelease(XKeyEvent ev) {
171.187 long keysym[] = new long[2];
171.188 - char unicodeKey = 0;
171.189 + int unicodeKey = 0;
171.190 keysym[0] = XConstants.NoSymbol;
171.191
171.192 if (keyEventLog.isLoggable(Level.FINE)) {
171.193 @@ -1113,7 +1196,9 @@
171.194 keyEventLog.fine(">>>Fire Event:"+
171.195 (ev.get_type() == XConstants.KeyPress ? "KEY_PRESSED; " : "KEY_RELEASED; ")+
171.196 "jkeycode:decimal="+jkc.getJavaKeycode()+
171.197 - ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "
171.198 + ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "+
171.199 + " legacy jkeycode: decimal="+XKeysym.getLegacyJavaKeycodeOnly(ev)+
171.200 + ", hex=0x"+Integer.toHexString(XKeysym.getLegacyJavaKeycodeOnly(ev))+"; "
171.201 );
171.202 }
171.203 // We obtain keysym from IM and derive unicodeKey from it for KeyPress only.
171.204 @@ -1124,13 +1209,74 @@
171.205 // That's why we use the same procedure as if there was no IM instance: do-it-yourself unicode.
171.206 unicodeKey = keysymToUnicode( xkeycodeToKeysym(ev), ev.get_state() );
171.207
171.208 + // Take a first keysym from a keysym array associated with the XKeyevent
171.209 + // and convert it to Unicode. Then, even if Java keycode for the keystroke
171.210 + // is undefined, we still will have a guess of what was engraved on a keytop.
171.211 + int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0);
171.212 +
171.213 + int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible
171.214 + int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
171.215 + primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
171.216 + jkc.getJavaKeycode();
171.217 postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED,
171.218 ev.get_time(),
171.219 - jkc.getJavaKeycode(),
171.220 + jkeyToReturn,
171.221 (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey),
171.222 jkc.getKeyLocation(),
171.223 - ev.get_state(),ev.getPData(), XKeyEvent.getSize());
171.224 + ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()),
171.225 + unicodeFromPrimaryKeysym,
171.226 + jkeyExtended);
171.227
171.228 +
171.229 + }
171.230 +
171.231 + /*
171.232 + * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are
171.233 + * unreliable, since mapping changes can happen for a virtual desktop
171.234 + * switch or MacOS style shading that became quite popular under X as
171.235 + * well. Yes, it probably should not be this way, as it violates
171.236 + * ICCCM, but reality is that quite a lot of window managers abuse
171.237 + * mapping state.
171.238 + */
171.239 + int getWMState() {
171.240 + if (stateChanged) {
171.241 + stateChanged = false;
171.242 + WindowPropertyGetter getter =
171.243 + new WindowPropertyGetter(window, XWM.XA_WM_STATE, 0, 1, false,
171.244 + XWM.XA_WM_STATE);
171.245 + try {
171.246 + int status = getter.execute();
171.247 + if (status != XConstants.Success || getter.getData() == 0) {
171.248 + return savedState = XUtilConstants.WithdrawnState;
171.249 + }
171.250 +
171.251 + if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) {
171.252 + return savedState = XUtilConstants.WithdrawnState;
171.253 + }
171.254 + savedState = (int)Native.getCard32(getter.getData());
171.255 + } finally {
171.256 + getter.dispose();
171.257 + }
171.258 + }
171.259 + return savedState;
171.260 + }
171.261 +
171.262 + /**
171.263 + * Override this methods to get notifications when top-level window state changes. The state is
171.264 + * meant in terms of ICCCM: WithdrawnState, IconicState, NormalState
171.265 + */
171.266 + protected void stateChanged(long time, int oldState, int newState) {
171.267 + }
171.268 +
171.269 + @Override
171.270 + public void handlePropertyNotify(XEvent xev) {
171.271 + super.handlePropertyNotify(xev);
171.272 + XPropertyEvent ev = xev.get_xproperty();
171.273 + if (ev.get_atom() == XWM.XA_WM_STATE.getAtom()) {
171.274 + // State has changed, invalidate saved value
171.275 + stateChanged = true;
171.276 + stateChanged(ev.get_time(), savedState, getWMState());
171.277 + }
171.278 }
171.279
171.280 public void reshape(Rectangle bounds) {
171.281 @@ -1277,20 +1423,77 @@
171.282 }
171.283 }
171.284
171.285 - public void postKeyEvent(int id, long when, int keyCode, char keyChar,
171.286 - int keyLocation, int state, long event, int eventSize)
171.287 + public void postKeyEvent(int id, long when, int keyCode, int keyChar,
171.288 + int keyLocation, int state, long event, int eventSize, long rawCode,
171.289 + int unicodeFromPrimaryKeysym, int extendedKeyCode)
171.290 +
171.291 {
171.292 long jWhen = XToolkit.nowMillisUTC_offset(when);
171.293 int modifiers = getModifiers(state, 0, keyCode);
171.294 + if (rawCodeField == null) {
171.295 + rawCodeField = XToolkit.getField(KeyEvent.class, "rawCode");
171.296 + }
171.297 + if (primaryLevelUnicodeField == null) {
171.298 + primaryLevelUnicodeField = XToolkit.getField(KeyEvent.class, "primaryLevelUnicode");
171.299 + }
171.300 + if (extendedKeyCodeField == null) {
171.301 + extendedKeyCodeField = XToolkit.getField(KeyEvent.class, "extendedKeyCode");
171.302 + }
171.303 +
171.304 KeyEvent ke = new KeyEvent((Component)getEventSource(), id, jWhen,
171.305 - modifiers, keyCode, keyChar, keyLocation);
171.306 + modifiers, keyCode, (char)keyChar, keyLocation);
171.307 if (event != 0) {
171.308 byte[] data = Native.toBytes(event, eventSize);
171.309 setBData(ke, data);
171.310 }
171.311 + try {
171.312 + rawCodeField.set(ke, rawCode);
171.313 + primaryLevelUnicodeField.set(ke, (long)unicodeFromPrimaryKeysym);
171.314 + extendedKeyCodeField.set(ke, (long)extendedKeyCode);
171.315 + } catch (IllegalArgumentException e) {
171.316 + assert(false);
171.317 + } catch (IllegalAccessException e) {
171.318 + assert(false);
171.319 + }
171.320 postEventToEventQueue(ke);
171.321 }
171.322
171.323 static native int getAWTKeyCodeForKeySym(int keysym);
171.324 static native int getKeySymForAWTKeyCode(int keycode);
171.325 +
171.326 + /* These two methods are actually applicable to toplevel windows only.
171.327 + * However, the functionality is required by both the XWindowPeer and
171.328 + * XWarningWindow, both of which have the XWindow as a common ancestor.
171.329 + * See XWM.setMotifDecor() for details.
171.330 + */
171.331 + public PropMwmHints getMWMHints() {
171.332 + if (mwm_hints == null) {
171.333 + mwm_hints = new PropMwmHints();
171.334 + if (!XWM.XA_MWM_HINTS.getAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS)) {
171.335 + mwm_hints.zero();
171.336 + }
171.337 + }
171.338 + return mwm_hints;
171.339 + }
171.340 +
171.341 + public void setMWMHints(PropMwmHints hints) {
171.342 + mwm_hints = hints;
171.343 + if (hints != null) {
171.344 + XWM.XA_MWM_HINTS.setAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS);
171.345 + }
171.346 + }
171.347 +
171.348 + protected final void initWMProtocols() {
171.349 + wm_protocols.setAtomListProperty(this, getWMProtocols());
171.350 + }
171.351 +
171.352 + /**
171.353 + * Returns list of protocols which should be installed on this window.
171.354 + * Descendants can override this method to add class-specific protocols
171.355 + */
171.356 + protected XAtomList getWMProtocols() {
171.357 + // No protocols on simple window
171.358 + return new XAtomList();
171.359 + }
171.360 +
171.361 }
172.1 --- a/src/solaris/classes/sun/awt/X11/XWindowPeer.java Thu Apr 16 17:42:00 2009 +0100
172.2 +++ b/src/solaris/classes/sun/awt/X11/XWindowPeer.java Thu Apr 16 19:10:32 2009 -0700
172.3 @@ -1,5 +1,5 @@
172.4 /*
172.5 - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
172.6 + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
172.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
172.8 *
172.9 * This code is free software; you can redistribute it and/or modify it
172.10 @@ -30,6 +30,8 @@
172.11 import java.awt.event.FocusEvent;
172.12 import java.awt.event.WindowEvent;
172.13
172.14 +import java.awt.image.BufferedImage;
172.15 +
172.16 import java.awt.peer.ComponentPeer;
172.17 import java.awt.peer.WindowPeer;
172.18
172.19 @@ -42,13 +44,17 @@
172.20 import java.util.logging.Level;
172.21 import java.util.logging.Logger;
172.22
172.23 +import sun.awt.AWTAccessor;
172.24 import sun.awt.ComponentAccessor;
172.25 import sun.awt.WindowAccessor;
172.26 +import sun.awt.AWTAccessor;
172.27 import sun.awt.DisplayChangedListener;
172.28 import sun.awt.SunToolkit;
172.29 import sun.awt.X11GraphicsDevice;
172.30 import sun.awt.X11GraphicsEnvironment;
172.31
172.32 +import sun.java2d.pipe.Region;
172.33 +
172.34 class XWindowPeer extends XPanelPeer implements WindowPeer,
172.35 DisplayChangedListener {
172.36
172.37 @@ -61,16 +67,11 @@
172.38 // should be synchronized on awtLock
172.39 private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>();
172.40
172.41 - static XAtom wm_protocols;
172.42 - static XAtom wm_delete_window;
172.43 - static XAtom wm_take_focus;
172.44
172.45 - XWindowAttributesData winAttr;
172.46 private boolean cachedFocusableWindow;
172.47 XWarningWindow warningWindow;
172.48
172.49 private boolean alwaysOnTop;
172.50 - PropMwmHints mwm_hints;
172.51 private boolean locationByPlatform;
172.52
172.53 Dialog modalBlocker;
172.54 @@ -87,8 +88,6 @@
172.55 private boolean grab = false; // Whether to do a grab during showing
172.56
172.57 private boolean isMapped = false; // Is this window mapped or not
172.58 - private boolean stateChanged; // Indicates whether the value on savedState is valid
172.59 - private int savedState; // Holds last known state of the top-level window
172.60 private boolean mustControlStackPosition = false; // Am override-redirect not on top
172.61 private XEventDispatcher rootPropertyEventDispatcher = null;
172.62
172.63 @@ -135,25 +134,18 @@
172.64 super.preInit(params);
172.65 params.putIfNull(BIT_GRAVITY, Integer.valueOf(XConstants.NorthWestGravity));
172.66
172.67 - savedState = XUtilConstants.WithdrawnState;
172.68 + long eventMask = 0;
172.69 + if (params.containsKey(EVENT_MASK)) {
172.70 + eventMask = ((Long)params.get(EVENT_MASK));
172.71 + }
172.72 + eventMask |= XConstants.VisibilityChangeMask;
172.73 + params.put(EVENT_MASK, eventMask);
172.74 +
172.75 XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE");
172.76
172.77 - winAttr = new XWindowAttributesData();
172.78
172.79 params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect()));
172.80
172.81 - SunToolkit.awtLock();
172.82 - try {
172.83 - windows.add(this);
172.84 - if (wm_protocols == null) {
172.85 - wm_protocols = XAtom.get("WM_PROTOCOLS");
172.86 - wm_delete_window = XAtom.get("WM_DELETE_WINDOW");
172.87 - wm_take_focus = XAtom.get("WM_TAKE_FOCUS");
172.88 - }
172.89 - }
172.90 - finally {
172.91 - SunToolkit.awtUnlock();
172.92 - }
172.93 cachedFocusableWindow = isFocusableWindow();
172.94
172.95 Font f = target.getFont();
172.96 @@ -186,20 +178,6 @@
172.97 params.put(BOUNDS, constrainBounds(bounds.x, bounds.y, bounds.width, bounds.height));
172.98 }
172.99
172.100 - private void initWMProtocols() {
172.101 - wm_protocols.setAtomListProperty(this, getWMProtocols());
172.102 - }
172.103 -
172.104 - /**
172.105 - * Returns list of protocols which should be installed on this window.
172.106 - * Descendants can override this method to add class-specific protocols
172.107 - */
172.108 - protected XAtomList getWMProtocols() {
172.109 - // No protocols on simple window
172.110 - return new XAtomList();
172.111 - }
172.112 -
172.113 -
172.114 protected String getWMName() {
172.115 String name = target.getName();
172.116 if (name == null || name.trim().equals("")) {
172.117 @@ -253,13 +231,17 @@
172.118 // accessSystemTray permission allows to display TrayIcon, TrayIcon tooltip
172.119 // and TrayIcon balloon windows without a warning window.
172.120 if (!WindowAccessor.isTrayIconWindow((Window)target)) {
172.121 - warningWindow = new XWarningWindow((Window)target, getWindow());
172.122 + warningWindow = new XWarningWindow((Window)target, getWindow(), this);
172.123 }
172.124 }
172.125
172.126 setSaveUnder(true);
172.127
172.128 updateIconImages();
172.129 +
172.130 + updateShape();
172.131 + updateOpacity();
172.132 + // no need in updateOpaque() as it is no-op
172.133 }
172.134
172.135 public void updateIconImages() {
172.136 @@ -417,6 +399,22 @@
172.137 return defaultIconInfo;
172.138 }
172.139
172.140 + private void updateShape() {
172.141 + // Shape shape = ((Window)target).getShape();
172.142 + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
172.143 + if (shape != null) {
172.144 + applyShape(Region.getInstance(shape, null));
172.145 + }
172.146 + }
172.147 +
172.148 + private void updateOpacity() {
172.149 + // float opacity = ((Window)target).getOpacity();
172.150 + float opacity = AWTAccessor.getWindowAccessor().getOpacity((Window)target);
172.151 + if (opacity < 1.0f) {
172.152 + setOpacity(opacity);
172.153 + }
172.154 + }
172.155 +
172.156 public void updateMinimumSize() {
172.157 //This function only saves minimumSize value in XWindowPeer
172.158 //Setting WMSizeHints is implemented in XDecoratedPeer
172.159 @@ -513,10 +511,15 @@
172.160 }
172.161
172.162
172.163 - if (!bounds.getSize().equals(oldBounds.getSize())) {
172.164 + boolean isResized = !bounds.getSize().equals(oldBounds.getSize());
172.165 + boolean isMoved = !bounds.getLocation().equals(oldBounds.getLocation());
172.166 + if (isMoved || isResized) {
172.167 + repositionSecurityWarning();
172.168 + }
172.169 + if (isResized) {
172.170 postEventToEventQueue(new ComponentEvent(getEventSource(), ComponentEvent.COMPONENT_RESIZED));
172.171 }
172.172 - if (!bounds.getLocation().equals(oldBounds.getLocation())) {
172.173 + if (isMoved) {
172.174 postEventToEventQueue(new ComponentEvent(getEventSource(), ComponentEvent.COMPONENT_MOVED));
172.175 }
172.176 } finally {
172.177 @@ -539,7 +542,7 @@
172.178 }
172.179
172.180 public Insets getInsets() {
172.181 - return new Insets(getWarningWindowHeight(), 0, 0, 0);
172.182 + return new Insets(0, 0, 0, 0);
172.183 }
172.184
172.185 // NOTE: This method may be called by privileged threads.
172.186 @@ -686,6 +689,7 @@
172.187 int curScreenNum = ((X11GraphicsDevice)getGraphicsConfiguration().getDevice()).getScreen();
172.188 int newScreenNum = 0;
172.189 GraphicsDevice gds[] = XToolkit.localEnv.getScreenDevices();
172.190 + GraphicsConfiguration newGC = null;
172.191 Rectangle screenBounds;
172.192
172.193 for (int i = 0; i < gds.length; i++) {
172.194 @@ -701,11 +705,13 @@
172.195 if (intAmt == area) {
172.196 // Completely on this screen - done!
172.197 newScreenNum = i;
172.198 + newGC = gds[i].getDefaultConfiguration();
172.199 break;
172.200 }
172.201 if (intAmt > largestAmt) {
172.202 largestAmt = intAmt;
172.203 newScreenNum = i;
172.204 + newGC = gds[i].getDefaultConfiguration();
172.205 }
172.206 }
172.207 }
172.208 @@ -713,28 +719,20 @@
172.209 if (log.isLoggable(Level.FINEST)) {
172.210 log.finest("XWindowPeer: Moved to a new screen");
172.211 }
172.212 - draggedToNewScreen(newScreenNum);
172.213 + executeDisplayChangedOnEDT(newGC);
172.214 }
172.215 }
172.216
172.217 - /* Xinerama
172.218 - * called to update our GC when dragged onto another screen
172.219 - */
172.220 - public void draggedToNewScreen(int screenNum) {
172.221 - executeDisplayChangedOnEDT(screenNum);
172.222 - }
172.223 -
172.224 /**
172.225 * Helper method that executes the displayChanged(screen) method on
172.226 * the event dispatch thread. This method is used in the Xinerama case
172.227 * and after display mode change events.
172.228 */
172.229 - private void executeDisplayChangedOnEDT(final int screenNum) {
172.230 + private void executeDisplayChangedOnEDT(final GraphicsConfiguration gc) {
172.231 Runnable dc = new Runnable() {
172.232 public void run() {
172.233 - // Updates this window's GC and notifies all the children.
172.234 - // See XPanelPeer/XCanvasPeer.displayChanged(int) for details.
172.235 - displayChanged(screenNum);
172.236 + AWTAccessor.getComponentAccessor().
172.237 + setGraphicsConfiguration((Component)target, gc);
172.238 }
172.239 };
172.240 SunToolkit.executeOnEventHandlerThread((Component)target, dc);
172.241 @@ -745,9 +743,7 @@
172.242 * X11GraphicsDevice when the display mode has been changed.
172.243 */
172.244 public void displayChanged() {
172.245 - GraphicsConfiguration gc = getGraphicsConfiguration();
172.246 - int curScreenNum = ((X11GraphicsDevice)gc.getDevice()).getScreen();
172.247 - executeDisplayChangedOnEDT(curScreenNum);
172.248 + executeDisplayChangedOnEDT(getGraphicsConfiguration());
172.249 }
172.250
172.251 /**
172.252 @@ -761,6 +757,7 @@
172.253 * Overridden to check if we need to update our GraphicsDevice/Config
172.254 * Added for 4934052.
172.255 */
172.256 + @Override
172.257 public void handleConfigureNotifyEvent(XEvent xev) {
172.258 // TODO: We create an XConfigureEvent every time we override
172.259 // handleConfigureNotify() - too many!
172.260 @@ -774,8 +771,7 @@
172.261 // there could be a race condition in which a ComponentListener could
172.262 // see the old screen.
172.263 super.handleConfigureNotifyEvent(xev);
172.264 - // for 5085647: no applet warning window visible
172.265 - updateChildrenSizes();
172.266 + repositionSecurityWarning();
172.267 }
172.268
172.269 final void requestXFocus(long time) {
172.270 @@ -1053,6 +1049,9 @@
172.271 }
172.272 updateFocusability();
172.273 promoteDefaultPosition();
172.274 + if (!vis && warningWindow != null) {
172.275 + warningWindow.setSecurityWarningVisible(false, false);
172.276 + }
172.277 super.setVisible(vis);
172.278 if (!vis && !isWithdrawn()) {
172.279 // ICCCM, 4.1.4. Changing Window State:
172.280 @@ -1082,6 +1081,7 @@
172.281 if (isOverrideRedirect() && vis) {
172.282 updateChildrenSizes();
172.283 }
172.284 + repositionSecurityWarning();
172.285 }
172.286
172.287 protected void suppressWmTakeFocus(boolean doSuppress) {
172.288 @@ -1099,21 +1099,64 @@
172.289 return 0;
172.290 }
172.291
172.292 - // The height of area used to display Applet's warning about securit
172.293 - int getWarningWindowHeight() {
172.294 + // Called when shell changes its size and requires children windows
172.295 + // to update their sizes appropriately
172.296 + void updateChildrenSizes() {
172.297 + }
172.298 +
172.299 + public void repositionSecurityWarning() {
172.300 + // NOTE: On KWin if the window/border snapping option is enabled,
172.301 + // the Java window may be swinging while it's being moved.
172.302 + // This doesn't make the application unusable though looks quite ugly.
172.303 + // Probobly we need to find some hint to assign to our Security
172.304 + // Warning window in order to exclude it from the snapping option.
172.305 + // We are not currently aware of existance of such a property.
172.306 if (warningWindow != null) {
172.307 - return warningWindow.getHeight();
172.308 - } else {
172.309 - return 0;
172.310 + // We can't use the coordinates stored in the XBaseWindow since
172.311 + // they are zeros for decorated frames.
172.312 + int x = ComponentAccessor.getX(target);
172.313 + int y = ComponentAccessor.getY(target);
172.314 + int width = ComponentAccessor.getWidth(target);
172.315 + int height = ComponentAccessor.getHeight(target);
172.316 + warningWindow.reposition(x, y, width, height);
172.317 }
172.318 }
172.319
172.320 - // Called when shell changes its size and requires children windows
172.321 - // to update their sizes appropriately
172.322 - void updateChildrenSizes() {
172.323 - if (warningWindow != null) {
172.324 - warningWindow.reshape(0, getMenuBarHeight(), getSize().width, warningWindow.getHeight());
172.325 + @Override
172.326 + protected void setMouseAbove(boolean above) {
172.327 + super.setMouseAbove(above);
172.328 + updateSecurityWarningVisibility();
172.329 + }
172.330 +
172.331 + public void updateSecurityWarningVisibility() {
172.332 + if (warningWindow == null) {
172.333 + return;
172.334 }
172.335 +
172.336 + boolean show = false;
172.337 +
172.338 + int state = getWMState();
172.339 +
172.340 + if (!isVisible()) {
172.341 + return; // The warning window should already be hidden.
172.342 + }
172.343 +
172.344 + // getWMState() always returns 0 (Withdrawn) for simple windows. Hence
172.345 + // we ignore the state for such windows.
172.346 + if (isVisible() && (state == XUtilConstants.NormalState || isSimpleWindow())) {
172.347 + if (XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow() ==
172.348 + getTarget())
172.349 + {
172.350 + show = true;
172.351 + }
172.352 +
172.353 + if (isMouseAbove() || warningWindow.isMouseAbove())
172.354 + {
172.355 + show = true;
172.356 + }
172.357 + }
172.358 +
172.359 + warningWindow.setSecurityWarningVisible(show);
172.360 }
172.361
172.362 boolean isOverrideRedirect() {
172.363 @@ -1165,16 +1208,7 @@
172.364 // if (ve.get_state() == XlibWrapper.VisibilityUnobscured) {
172.365 // // raiseInputMethodWindow
172.366 // }
172.367 - }
172.368 -
172.369 - public void handlePropertyNotify(XEvent xev) {
172.370 - super.handlePropertyNotify(xev);
172.371 - XPropertyEvent ev = xev.get_xproperty();
172.372 - if (ev.get_atom() == XWM.XA_WM_STATE.getAtom()) {
172.373 - // State has changed, invalidate saved value
172.374 - stateChanged = true;
172.375 - stateChanged(ev.get_time(), savedState, getWMState());
172.376 - }
172.377 + repositionSecurityWarning();
172.378 }
172.379
172.380 void handleRootPropertyNotify(XEvent xev) {
172.381 @@ -1275,6 +1309,7 @@
172.382 * Override this methods to get notifications when top-level window state changes. The state is
172.383 * meant in terms of ICCCM: WithdrawnState, IconicState, NormalState
172.384 */
172.385 + @Override
172.386 protected void stateChanged(long time, int oldState, int newState) {
172.387 // Fix for 6401700, 6412803
172.388 // If this window is modal blocked, it is put into the transient_for
172.389 @@ -1288,38 +1323,8 @@
172.390 for (ToplevelStateListener topLevelListenerTmp : toplevelStateListeners) {
172.391 topLevelListenerTmp.stateChangedICCCM(oldState, newState);
172.392 }
172.393 - }
172.394
172.395 -
172.396 - /*
172.397 - * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are
172.398 - * unreliable, since mapping changes can happen for a virtual desktop
172.399 - * switch or MacOS style shading that became quite popular under X as
172.400 - * well. Yes, it probably should not be this way, as it violates
172.401 - * ICCCM, but reality is that quite a lot of window managers abuse
172.402 - * mapping state.
172.403 - */
172.404 - int getWMState() {
172.405 - if (stateChanged) {
172.406 - stateChanged = false;
172.407 - WindowPropertyGetter getter =
172.408 - new WindowPropertyGetter(window, XWM.XA_WM_STATE, 0, 1, false,
172.409 - XWM.XA_WM_STATE);
172.410 - try {
172.411 - int status = getter.execute();
172.412 - if (status != XConstants.Success || getter.getData() == 0) {
172.413 - return savedState = XUtilConstants.WithdrawnState;
172.414 - }
172.415 -
172.416 - if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) {
172.417 - return savedState = XUtilConstants.WithdrawnState;
172.418 - }
172.419 - savedState = (int)Native.getCard32(getter.getData());
172.420 - } finally {
172.421 - getter.dispose();
172.422 - }
172.423 - }
172.424 - return savedState;
172.425 + updateSecurityWarningVisibility();
172.426 }
172.427
172.428 boolean isWithdrawn() {
172.429 @@ -2064,4 +2069,44 @@
172.430 }
172.431 super.handleButtonPressRelease(xev);
172.432 }
172.433 +
172.434 + public void print(Graphics g) {
172.435 + // We assume we print the whole frame,
172.436 + // so we expect no clip was set previously
172.437 + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
172.438 + if (shape != null) {
172.439 + g.setClip(shape);
172.440 + }
172.441 + super.print(g);
172.442 + }
172.443 +
172.444 + @Override
172.445 + public void setOpacity(float opacity) {
172.446 + final long maxOpacity = 0xffffffffl;
172.447 + long iOpacity = (long)(opacity * maxOpacity);
172.448 + if (iOpacity < 0) {
172.449 + iOpacity = 0;
172.450 + }
172.451 + if (iOpacity > maxOpacity) {
172.452 + iOpacity = maxOpacity;
172.453 + }
172.454 +
172.455 + XAtom netWmWindowOpacityAtom = XAtom.get("_NET_WM_WINDOW_OPACITY");
172.456 +
172.457 + if (iOpacity == maxOpacity) {
172.458 + netWmWindowOpacityAtom.DeleteProperty(getWindow());
172.459 + } else {
172.460 + netWmWindowOpacityAtom.setCard32Property(getWindow(), iOpacity);
172.461 + }
172.462 + }
172.463 +
172.464 + @Override
172.465 + public void setOpaque(boolean isOpaque) {
172.466 + // no-op
172.467 + }
172.468 +
172.469 + @Override
172.470 + public void updateWindow(BufferedImage backBuffer) {
172.471 + // no-op
172.472 + }
172.473 }
173.1 --- a/src/solaris/classes/sun/awt/X11/XlibWrapper.java Thu Apr 16 17:42:00 2009 +0100
173.2 +++ b/src/solaris/classes/sun/awt/X11/XlibWrapper.java Thu Apr 16 19:10:32 2009 -0700
173.3 @@ -1,5 +1,5 @@
173.4 /*
173.5 - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
173.6 + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
173.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
173.8 *
173.9 * This code is free software; you can redistribute it and/or modify it
173.10 @@ -156,6 +156,8 @@
173.11
173.12 static native void XLowerWindow(long display, long window);
173.13 static native void XRestackWindows(long display, long windows, int length);
173.14 + static native void XConfigureWindow(long display, long window,
173.15 + long value_mask, long values);
173.16 static native void XSetInputFocus(long display, long window);
173.17 static native void XSetInputFocus2(long display, long window, long time);
173.18 static native long XGetInputFocus(long display);
173.19 @@ -490,6 +492,21 @@
173.20
173.21 static native int XKeysymToKeycode(long display, long keysym);
173.22
173.23 + // xkb-related
173.24 + static native int XkbGetEffectiveGroup(long display);
173.25 + static native long XkbKeycodeToKeysym(long display, int keycode, int group, int level);
173.26 + static native void XkbSelectEvents(long display, long device, long bits_to_change, long values_for_bits);
173.27 + static native void XkbSelectEventDetails(long display, long device, long event_type,
173.28 + long bits_to_change, long values_for_bits);
173.29 + static native boolean XkbQueryExtension(long display, long opcode_rtrn, long event_rtrn,
173.30 + long error_rtrn, long major_in_out, long minor_in_out);
173.31 + static native boolean XkbLibraryVersion(long lib_major_in_out, long lib_minor_in_out);
173.32 + static native long XkbGetMap(long display, long which, long device_spec);
173.33 + static native long XkbGetUpdatedMap(long display, long which, long xkb);
173.34 + static native void XkbFreeKeyboard(long xkb, long which, boolean free_all);
173.35 + static native boolean XkbTranslateKeyCode(long xkb, int keycode, long mods, long mods_rtrn, long keysym_rtrn);
173.36 +
173.37 +
173.38 static native void XConvertCase(long keysym,
173.39 long keysym_lowercase,
173.40 long keysym_uppercase);
173.41 @@ -533,6 +550,13 @@
173.42 static native void SetRectangularShape(long display, long window,
173.43 int lox, int loy, int hix, int hiy,
173.44 sun.java2d.pipe.Region region);
173.45 + /** Each int in the bitmap array is one pixel with a 32-bit color:
173.46 + * R, G, B, and Alpha.
173.47 + */
173.48 + static native void SetBitmapShape(long display, long window,
173.49 + int width, int height, int[] bitmap);
173.50 +
173.51 + static native void SetZOrder(long display, long window, long above);
173.52
173.53 /* Global memory area used for X lib parameter passing */
173.54
173.55 @@ -608,6 +632,15 @@
173.56 }
173.57 return buf.toString();
173.58 }
173.59 + static String getEventToString( int type ) {
173.60 + if( (type >= 0) && (type < eventToString.length)) {
173.61 + return eventToString[type];
173.62 + }else if( type == XToolkit.getXKBBaseEventCode() ) {
173.63 + //XXX TODO various xkb types
173.64 + return "XkbEvent";
173.65 + }
173.66 + return eventToString[0];
173.67 + }
173.68
173.69 private static boolean getBuildInternal() {
173.70 String javaVersion = XToolkit.getSystemProperty("java.version");
174.1 --- a/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Thu Apr 16 17:42:00 2009 +0100
174.2 +++ b/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Thu Apr 16 19:10:32 2009 -0700
174.3 @@ -1,5 +1,5 @@
174.4 /*
174.5 - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
174.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
174.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
174.8 *
174.9 * This code is free software; you can redistribute it and/or modify it
174.10 @@ -859,14 +859,14 @@
174.11 pw.println("\n\tlong pData;");
174.12 pw.println("\n\tpublic long getPData() { return pData; }");
174.13
174.14 - pw.println("\n\n\t" + stp.getJavaClassName() + "(long addr) {");
174.15 + pw.println("\n\n\tpublic " + stp.getJavaClassName() + "(long addr) {");
174.16 if (generateLog) {
174.17 pw.println("\t\tlog.finest(\"Creating\");");
174.18 }
174.19 pw.println("\t\tpData=addr;");
174.20 pw.println("\t\tshould_free_memory = false;");
174.21 pw.println("\t}");
174.22 - pw.println("\n\n\t" + stp.getJavaClassName() + "() {");
174.23 + pw.println("\n\n\tpublic " + stp.getJavaClassName() + "() {");
174.24 if (generateLog) {
174.25 pw.println("\t\tlog.finest(\"Creating\");");
174.26 }
174.27 @@ -1138,6 +1138,7 @@
174.28 pw.println("/* This file is an automatically generated file, please do not edit this file, modify the XlibParser.java file instead !*/\n" );
174.29 pw.println("#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/Xos.h>\n#include <X11/Xatom.h>\n#include <stdio.h>\n");
174.30 pw.println("#include <X11/extensions/Xdbe.h>");
174.31 + pw.println("#include <X11/XKBlib.h>");
174.32 pw.println("#include \"awt_p.h\"");
174.33 pw.println("#include \"color.h\"");
174.34 pw.println("#include \"colordata.h\"");
175.1 --- a/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386 Thu Apr 16 17:42:00 2009 +0100
175.2 +++ b/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386 Thu Apr 16 19:10:32 2009 -0700
175.3 @@ -16,10 +16,38 @@
175.4 XIMStringConversionCallbackStruct.factor 10
175.5 XIMStringConversionCallbackStruct.text 16
175.6 XIMStringConversionCallbackStruct 24
175.7 +XkbNewKeyboardNotifyEvent.type 0
175.8 +XkbNewKeyboardNotifyEvent.serial 8
175.9 +XkbNewKeyboardNotifyEvent.send_event 16
175.10 +XkbNewKeyboardNotifyEvent.display 24
175.11 +XkbNewKeyboardNotifyEvent.time 32
175.12 +XkbNewKeyboardNotifyEvent.xkb_type 40
175.13 +XkbNewKeyboardNotifyEvent.device 44
175.14 +XkbNewKeyboardNotifyEvent.old_device 48
175.15 +XkbNewKeyboardNotifyEvent.min_key_code 52
175.16 +XkbNewKeyboardNotifyEvent.max_key_code 56
175.17 +XkbNewKeyboardNotifyEvent.old_min_key_code 60
175.18 +XkbNewKeyboardNotifyEvent.old_max_key_code 64
175.19 +XkbNewKeyboardNotifyEvent.changed 68
175.20 +XkbNewKeyboardNotifyEvent.req_major 72
175.21 +XkbNewKeyboardNotifyEvent.req_minor 73
175.22 +XkbNewKeyboardNotifyEvent 80
175.23 XTimeCoord.time 0
175.24 XTimeCoord.x 8
175.25 XTimeCoord.y 10
175.26 XTimeCoord 16
175.27 +XkbCompatMapNotifyEvent.type 0
175.28 +XkbCompatMapNotifyEvent.serial 8
175.29 +XkbCompatMapNotifyEvent.send_event 16
175.30 +XkbCompatMapNotifyEvent.display 24
175.31 +XkbCompatMapNotifyEvent.time 32
175.32 +XkbCompatMapNotifyEvent.xkb_type 40
175.33 +XkbCompatMapNotifyEvent.device 44
175.34 +XkbCompatMapNotifyEvent.changed_groups 48
175.35 +XkbCompatMapNotifyEvent.first_si 52
175.36 +XkbCompatMapNotifyEvent.num_si 56
175.37 +XkbCompatMapNotifyEvent.num_total_si 60
175.38 +XkbCompatMapNotifyEvent 64
175.39 XIMStatusDrawCallbackStruct.type 0
175.40 XIMStatusDrawCallbackStruct.data 8
175.41 XIMStatusDrawCallbackStruct 16
175.42 @@ -289,6 +317,22 @@
175.43 XVisualInfo.colormap_size 56
175.44 XVisualInfo.bits_per_rgb 60
175.45 XVisualInfo 64
175.46 +XkbControlsNotifyEvent.type 0
175.47 +XkbControlsNotifyEvent.serial 8
175.48 +XkbControlsNotifyEvent.send_event 16
175.49 +XkbControlsNotifyEvent.display 24
175.50 +XkbControlsNotifyEvent.time 32
175.51 +XkbControlsNotifyEvent.xkb_type 40
175.52 +XkbControlsNotifyEvent.device 44
175.53 +XkbControlsNotifyEvent.changed_ctrls 48
175.54 +XkbControlsNotifyEvent.enabled_ctrls 52
175.55 +XkbControlsNotifyEvent.enabled_ctrl_changes 56
175.56 +XkbControlsNotifyEvent.num_groups 60
175.57 +XkbControlsNotifyEvent.keycode 64
175.58 +XkbControlsNotifyEvent.event_type 65
175.59 +XkbControlsNotifyEvent.req_major 66
175.60 +XkbControlsNotifyEvent.req_minor 67
175.61 +XkbControlsNotifyEvent 72
175.62 PropMwmHints.flags 0
175.63 PropMwmHints.functions 8
175.64 PropMwmHints.decorations 16
175.65 @@ -310,8 +354,26 @@
175.66 XAnyEvent.display 24
175.67 XAnyEvent.window 32
175.68 XAnyEvent 40
175.69 +XkbIndicatorNotifyEvent.type 0
175.70 +XkbIndicatorNotifyEvent.serial 8
175.71 +XkbIndicatorNotifyEvent.send_event 16
175.72 +XkbIndicatorNotifyEvent.display 24
175.73 +XkbIndicatorNotifyEvent.time 32
175.74 +XkbIndicatorNotifyEvent.xkb_type 40
175.75 +XkbIndicatorNotifyEvent.device 44
175.76 +XkbIndicatorNotifyEvent.changed 48
175.77 +XkbIndicatorNotifyEvent.state 52
175.78 +XkbIndicatorNotifyEvent 56
175.79 XIMPreeditStateNotifyCallbackStruct.state 0
175.80 XIMPreeditStateNotifyCallbackStruct 8
175.81 +XkbAnyEvent.type 0
175.82 +XkbAnyEvent.serial 8
175.83 +XkbAnyEvent.send_event 16
175.84 +XkbAnyEvent.display 24
175.85 +XkbAnyEvent.time 32
175.86 +XkbAnyEvent.xkb_type 40
175.87 +XkbAnyEvent.device 44
175.88 +XkbAnyEvent 48
175.89 XMotionEvent.type 0
175.90 XMotionEvent.serial 8
175.91 XMotionEvent.send_event 16
175.92 @@ -334,6 +396,23 @@
175.93 XIMStyles.count_styles 0
175.94 XIMStyles.supported_styles 8
175.95 XIMStyles 16
175.96 +XkbExtensionDeviceNotifyEvent.type 0
175.97 +XkbExtensionDeviceNotifyEvent.serial 8
175.98 +XkbExtensionDeviceNotifyEvent.send_event 16
175.99 +XkbExtensionDeviceNotifyEvent.display 24
175.100 +XkbExtensionDeviceNotifyEvent.time 32
175.101 +XkbExtensionDeviceNotifyEvent.xkb_type 40
175.102 +XkbExtensionDeviceNotifyEvent.device 44
175.103 +XkbExtensionDeviceNotifyEvent.reason 48
175.104 +XkbExtensionDeviceNotifyEvent.supported 52
175.105 +XkbExtensionDeviceNotifyEvent.unsupported 56
175.106 +XkbExtensionDeviceNotifyEvent.first_btn 60
175.107 +XkbExtensionDeviceNotifyEvent.num_btns 64
175.108 +XkbExtensionDeviceNotifyEvent.leds_defined 68
175.109 +XkbExtensionDeviceNotifyEvent.led_state 72
175.110 +XkbExtensionDeviceNotifyEvent.led_class 76
175.111 +XkbExtensionDeviceNotifyEvent.led_id 80
175.112 +XkbExtensionDeviceNotifyEvent 88
175.113 XwcTextItem.chars 0
175.114 XwcTextItem.nchars 8
175.115 XwcTextItem.delta 12
175.116 @@ -419,6 +498,20 @@
175.117 XKeyEvent.keycode 84
175.118 XKeyEvent.same_screen 88
175.119 XKeyEvent 96
175.120 +XkbActionMessageEvent.type 0
175.121 +XkbActionMessageEvent.serial 8
175.122 +XkbActionMessageEvent.send_event 16
175.123 +XkbActionMessageEvent.display 24
175.124 +XkbActionMessageEvent.time 32
175.125 +XkbActionMessageEvent.xkb_type 40
175.126 +XkbActionMessageEvent.device 44
175.127 +XkbActionMessageEvent.keycode 48
175.128 +XkbActionMessageEvent.press 52
175.129 +XkbActionMessageEvent.key_event_follows 56
175.130 +XkbActionMessageEvent.group 60
175.131 +XkbActionMessageEvent.mods 64
175.132 +XkbActionMessageEvent.message 68
175.133 +XkbActionMessageEvent 80
175.134 XdbeSwapInfo.swap_window 0
175.135 XdbeSwapInfo.swap_action 8
175.136 XdbeSwapInfo 16
175.137 @@ -458,6 +551,18 @@
175.138 XOMOrientation.num_orientation 0
175.139 XOMOrientation.orientation 8
175.140 XOMOrientation 16
175.141 +XkbAccessXNotifyEvent.type 0
175.142 +XkbAccessXNotifyEvent.serial 8
175.143 +XkbAccessXNotifyEvent.send_event 16
175.144 +XkbAccessXNotifyEvent.display 24
175.145 +XkbAccessXNotifyEvent.time 32
175.146 +XkbAccessXNotifyEvent.xkb_type 40
175.147 +XkbAccessXNotifyEvent.device 44
175.148 +XkbAccessXNotifyEvent.detail 48
175.149 +XkbAccessXNotifyEvent.keycode 52
175.150 +XkbAccessXNotifyEvent.sk_delay 56
175.151 +XkbAccessXNotifyEvent.debounce_delay 60
175.152 +XkbAccessXNotifyEvent 64
175.153 XWindowAttributes.x 0
175.154 XWindowAttributes.y 4
175.155 XWindowAttributes.width 8
175.156 @@ -528,6 +633,33 @@
175.157 awtImageData.clrdata 16
175.158 awtImageData.convert 48
175.159 awtImageData 560
175.160 +XkbStateNotifyEvent.type 0
175.161 +XkbStateNotifyEvent.serial 8
175.162 +XkbStateNotifyEvent.send_event 16
175.163 +XkbStateNotifyEvent.display 24
175.164 +XkbStateNotifyEvent.time 32
175.165 +XkbStateNotifyEvent.xkb_type 40
175.166 +XkbStateNotifyEvent.device 44
175.167 +XkbStateNotifyEvent.changed 48
175.168 +XkbStateNotifyEvent.group 52
175.169 +XkbStateNotifyEvent.base_group 56
175.170 +XkbStateNotifyEvent.latched_group 60
175.171 +XkbStateNotifyEvent.locked_group 64
175.172 +XkbStateNotifyEvent.mods 68
175.173 +XkbStateNotifyEvent.base_mods 72
175.174 +XkbStateNotifyEvent.latched_mods 76
175.175 +XkbStateNotifyEvent.locked_mods 80
175.176 +XkbStateNotifyEvent.compat_state 84
175.177 +XkbStateNotifyEvent.grab_mods 88
175.178 +XkbStateNotifyEvent.compat_grab_mods 89
175.179 +XkbStateNotifyEvent.lookup_mods 90
175.180 +XkbStateNotifyEvent.compat_lookup_mods 91
175.181 +XkbStateNotifyEvent.ptr_buttons 92
175.182 +XkbStateNotifyEvent.keycode 96
175.183 +XkbStateNotifyEvent.event_type 97
175.184 +XkbStateNotifyEvent.req_major 98
175.185 +XkbStateNotifyEvent.req_minor 99
175.186 +XkbStateNotifyEvent 104
175.187 XExposeEvent.type 0
175.188 XExposeEvent.serial 8
175.189 XExposeEvent.send_event 16
175.190 @@ -539,6 +671,33 @@
175.191 XExposeEvent.height 52
175.192 XExposeEvent.count 56
175.193 XExposeEvent 64
175.194 +XkbMapNotifyEvent.type 0
175.195 +XkbMapNotifyEvent.serial 8
175.196 +XkbMapNotifyEvent.send_event 16
175.197 +XkbMapNotifyEvent.display 24
175.198 +XkbMapNotifyEvent.time 32
175.199 +XkbMapNotifyEvent.xkb_type 40
175.200 +XkbMapNotifyEvent.device 44
175.201 +XkbMapNotifyEvent.changed 48
175.202 +XkbMapNotifyEvent.flags 52
175.203 +XkbMapNotifyEvent.first_type 56
175.204 +XkbMapNotifyEvent.num_types 60
175.205 +XkbMapNotifyEvent.min_key_code 64
175.206 +XkbMapNotifyEvent.max_key_code 65
175.207 +XkbMapNotifyEvent.first_key_sym 66
175.208 +XkbMapNotifyEvent.first_key_act 67
175.209 +XkbMapNotifyEvent.first_key_behavior 68
175.210 +XkbMapNotifyEvent.first_key_explicit 69
175.211 +XkbMapNotifyEvent.first_modmap_key 70
175.212 +XkbMapNotifyEvent.first_vmodmap_key 71
175.213 +XkbMapNotifyEvent.num_key_syms 72
175.214 +XkbMapNotifyEvent.num_key_acts 76
175.215 +XkbMapNotifyEvent.num_key_behaviors 80
175.216 +XkbMapNotifyEvent.num_key_explicit 84
175.217 +XkbMapNotifyEvent.num_modmap_keys 88
175.218 +XkbMapNotifyEvent.num_vmodmap_keys 92
175.219 +XkbMapNotifyEvent.vmods 96
175.220 +XkbMapNotifyEvent 104
175.221 XGCValues.function 0
175.222 XGCValues.plane_mask 8
175.223 XGCValues.foreground 16
175.224 @@ -583,6 +742,22 @@
175.225 XMapEvent.window 40
175.226 XMapEvent.override_redirect 48
175.227 XMapEvent 56
175.228 +XkbBellNotifyEvent.type 0
175.229 +XkbBellNotifyEvent.serial 8
175.230 +XkbBellNotifyEvent.send_event 16
175.231 +XkbBellNotifyEvent.display 24
175.232 +XkbBellNotifyEvent.time 32
175.233 +XkbBellNotifyEvent.xkb_type 40
175.234 +XkbBellNotifyEvent.device 44
175.235 +XkbBellNotifyEvent.percent 48
175.236 +XkbBellNotifyEvent.pitch 52
175.237 +XkbBellNotifyEvent.duration 56
175.238 +XkbBellNotifyEvent.bell_class 60
175.239 +XkbBellNotifyEvent.bell_id 64
175.240 +XkbBellNotifyEvent.name 72
175.241 +XkbBellNotifyEvent.window 80
175.242 +XkbBellNotifyEvent.event_only 88
175.243 +XkbBellNotifyEvent 96
175.244 XIMStringConversionText.length 0
175.245 XIMStringConversionText.feedback 8
175.246 XIMStringConversionText.encoding_is_wchar 16
175.247 @@ -596,6 +771,21 @@
175.248 XKeyboardState.global_auto_repeat 24
175.249 XKeyboardState.auto_repeats 28
175.250 XKeyboardState 64
175.251 +XkbEvent.type 0
175.252 +XkbEvent.any 0
175.253 +XkbEvent.new_kbd 0
175.254 +XkbEvent.map 0
175.255 +XkbEvent.state 0
175.256 +XkbEvent.ctrls 0
175.257 +XkbEvent.indicators 0
175.258 +XkbEvent.names 0
175.259 +XkbEvent.compat 0
175.260 +XkbEvent.bell 0
175.261 +XkbEvent.message 0
175.262 +XkbEvent.accessx 0
175.263 +XkbEvent.device 0
175.264 +XkbEvent.core 0
175.265 +XkbEvent 192
175.266 XPoint.x 0
175.267 XPoint.y 2
175.268 XPoint 4
175.269 @@ -633,6 +823,26 @@
175.270 XRectangle.width 4
175.271 XRectangle.height 6
175.272 XRectangle 8
175.273 +XkbNamesNotifyEvent.type 0
175.274 +XkbNamesNotifyEvent.serial 8
175.275 +XkbNamesNotifyEvent.send_event 16
175.276 +XkbNamesNotifyEvent.display 24
175.277 +XkbNamesNotifyEvent.time 32
175.278 +XkbNamesNotifyEvent.xkb_type 40
175.279 +XkbNamesNotifyEvent.device 44
175.280 +XkbNamesNotifyEvent.changed 48
175.281 +XkbNamesNotifyEvent.first_type 52
175.282 +XkbNamesNotifyEvent.num_types 56
175.283 +XkbNamesNotifyEvent.first_lvl 60
175.284 +XkbNamesNotifyEvent.num_lvls 64
175.285 +XkbNamesNotifyEvent.num_aliases 68
175.286 +XkbNamesNotifyEvent.num_radio_groups 72
175.287 +XkbNamesNotifyEvent.changed_vmods 76
175.288 +XkbNamesNotifyEvent.changed_groups 80
175.289 +XkbNamesNotifyEvent.changed_indicators 84
175.290 +XkbNamesNotifyEvent.first_key 88
175.291 +XkbNamesNotifyEvent.num_keys 92
175.292 +XkbNamesNotifyEvent 96
175.293 XCreateWindowEvent.type 0
175.294 XCreateWindowEvent.serial 8
175.295 XCreateWindowEvent.send_event 16
175.296 @@ -774,7 +984,8 @@
175.297 AwtGraphicsConfigData.pixelStride 136
175.298 AwtGraphicsConfigData.color_data 144
175.299 AwtGraphicsConfigData.glxInfo 152
175.300 -AwtGraphicsConfigData 160
175.301 +AwtGraphicsConfigData.isTranslucencySupported 160
175.302 +AwtGraphicsConfigData 168
175.303 XColor.pixel 0
175.304 XColor.red 8
175.305 XColor.green 10
176.1 --- a/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt Thu Apr 16 17:42:00 2009 +0100
176.2 +++ b/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt Thu Apr 16 19:10:32 2009 -0700
176.3 @@ -119,7 +119,7 @@
176.4 length short
176.5 feedback pointer
176.6 encoding_is_wchar Bool
176.7 - string pointer
176.8 + string pointer
176.9 XKeymapEvent
176.10 type int
176.11 serial long
176.12 @@ -574,7 +574,7 @@
176.13 f.get_pixel pointer
176.14 f.put_pixel pointer
176.15 f.sub_image pointer
176.16 - f.add_pixel pointer
176.17 + f.add_pixel pointer
176.18 XIMValuesList
176.19 count_values short
176.20 supported_values pointer
176.21 @@ -728,7 +728,7 @@
176.22 awt_icmLUT pointer int
176.23 awt_icmLUT2Colors pointer byte
176.24 img_grays pointer byte
176.25 - img_clr_tbl pointer byte
176.26 + img_clr_tbl pointer byte
176.27 img_oda_red pointer byte
176.28 img_oda_green pointer byte
176.29 img_oda_blue pointer byte
176.30 @@ -750,6 +750,7 @@
176.31 pixelStride int
176.32 color_data pointer ColorData
176.33 glxInfo pointer
176.34 + isTranslucencySupported int
176.35
176.36 AwtScreenData
176.37 numConfigs int
176.38 @@ -797,3 +798,227 @@
176.39 xerror struct XErrorEvent
176.40 xkeymap struct XKeymapEvent
176.41 pad array long 24
176.42 +
176.43 +XkbAnyEvent
176.44 + type int
176.45 + serial ulong
176.46 + send_event Bool
176.47 + display long
176.48 + time ulong
176.49 + xkb_type int
176.50 + device int
176.51 +
176.52 +XkbNewKeyboardNotifyEvent
176.53 + type int
176.54 + serial ulong
176.55 + send_event Bool
176.56 + display long
176.57 + time ulong
176.58 + xkb_type int
176.59 + device int
176.60 + old_device int
176.61 + min_key_code int
176.62 + max_key_code int
176.63 + old_min_key_code int
176.64 + old_max_key_code int
176.65 + changed int
176.66 + req_major byte
176.67 + req_minor byte
176.68 +
176.69 +XkbMapNotifyEvent
176.70 + type int
176.71 + serial ulong
176.72 + send_event Bool
176.73 + display long
176.74 + time ulong
176.75 + xkb_type int
176.76 + device int
176.77 + changed int
176.78 + flags int
176.79 + first_type int
176.80 + num_types int
176.81 + min_key_code int
176.82 + max_key_code int
176.83 + first_key_sym int
176.84 + first_key_act int
176.85 + first_key_behavior int
176.86 + first_key_explicit int
176.87 + first_modmap_key int
176.88 + first_vmodmap_key int
176.89 + num_key_syms int
176.90 + num_key_acts int
176.91 + num_key_behaviors int
176.92 + num_key_explicit int
176.93 + num_modmap_keys int
176.94 + num_vmodmap_keys int
176.95 + vmods int
176.96 +
176.97 +XkbStateNotifyEvent
176.98 + type int
176.99 + serial ulong
176.100 + send_event Bool
176.101 + display long
176.102 + time ulong
176.103 + xkb_type int
176.104 + device int
176.105 + changed int
176.106 + group int
176.107 + base_group int
176.108 + latched_group int
176.109 + locked_group int
176.110 + mods int
176.111 + base_mods int
176.112 + latched_mods int
176.113 + locked_mods int
176.114 + compat_state int
176.115 + grab_mods byte
176.116 + compat_grab_mods byte
176.117 + lookup_mods byte
176.118 + compat_lookup_mods byte
176.119 + ptr_buttons int
176.120 + keycode int
176.121 + event_type byte
176.122 + req_major byte
176.123 + req_minor byte
176.124 +
176.125 +XkbControlsNotifyEvent
176.126 + type int
176.127 + serial ulong
176.128 + send_event Bool
176.129 + display long
176.130 + time ulong
176.131 + xkb_type int
176.132 + device int
176.133 + changed_ctrls int
176.134 + enabled_ctrls int
176.135 + enabled_ctrl_changes int
176.136 + num_groups int
176.137 + keycode int
176.138 + event_type byte
176.139 + req_major byte
176.140 + req_minor byte
176.141 +
176.142 +XkbIndicatorNotifyEvent
176.143 + type int
176.144 + serial ulong
176.145 + send_event Bool
176.146 + display long
176.147 + time ulong
176.148 + xkb_type int
176.149 + device int
176.150 + changed int
176.151 + state int
176.152 +
176.153 +XkbNamesNotifyEvent
176.154 + type int
176.155 + serial ulong
176.156 + send_event Bool
176.157 + display long
176.158 + time ulong
176.159 + xkb_type int
176.160 + device int
176.161 + changed int
176.162 + first_type int
176.163 + num_types int
176.164 + first_lvl int
176.165 + num_lvls int
176.166 + num_aliases int
176.167 + num_radio_groups int
176.168 + changed_vmods int
176.169 + changed_groups int
176.170 + changed_indicators int
176.171 + first_key int
176.172 + num_keys int
176.173 +
176.174 +
176.175 +XkbCompatMapNotifyEvent
176.176 + type int
176.177 + serial ulong
176.178 + send_event Bool
176.179 + display long
176.180 + time ulong
176.181 + xkb_type int
176.182 + device int
176.183 + changed_groups int
176.184 + first_si int
176.185 + num_si int
176.186 + num_total_si int
176.187 +
176.188 +XkbBellNotifyEvent
176.189 + type int
176.190 + serial ulong
176.191 + send_event Bool
176.192 + display long
176.193 + time ulong
176.194 + xkb_type int
176.195 + device int
176.196 + percent int
176.197 + pitch int
176.198 + duration int
176.199 + bell_class int
176.200 + bell_id int
176.201 + name Atom
176.202 + window long
176.203 + event_only Bool
176.204 +
176.205 +XkbActionMessageEvent
176.206 + type int
176.207 + serial ulong
176.208 + send_event Bool
176.209 + display long
176.210 + time ulong
176.211 + xkb_type int
176.212 + device int
176.213 + keycode int
176.214 + press Bool
176.215 + key_event_follows Bool
176.216 + group int
176.217 + mods int
176.218 + message array byte 7 //XkbActionMessageLength+1
176.219 +
176.220 +XkbAccessXNotifyEvent
176.221 + type int
176.222 + serial ulong
176.223 + send_event Bool
176.224 + display long
176.225 + time ulong
176.226 + xkb_type int
176.227 + device int
176.228 + detail int
176.229 + keycode int
176.230 + sk_delay int
176.231 + debounce_delay int
176.232 +
176.233 +XkbExtensionDeviceNotifyEvent
176.234 + type int
176.235 + serial ulong
176.236 + send_event Bool
176.237 + display long
176.238 + time ulong
176.239 + xkb_type int
176.240 + device int
176.241 + reason int
176.242 + supported int
176.243 + unsupported int
176.244 + first_btn int
176.245 + num_btns int
176.246 + leds_defined int
176.247 + led_state int
176.248 + led_class int
176.249 + led_id int
176.250 +
176.251 +XkbEvent
176.252 + type int
176.253 + any struct XkbAnyEvent
176.254 + new_kbd struct XkbNewKeyboardNotifyEvent
176.255 + map struct XkbMapNotifyEvent
176.256 + state struct XkbStateNotifyEvent
176.257 + ctrls struct XkbControlsNotifyEvent
176.258 + indicators struct XkbIndicatorNotifyEvent
176.259 + names struct XkbNamesNotifyEvent
176.260 + compat struct XkbCompatMapNotifyEvent
176.261 + bell struct XkbBellNotifyEvent
176.262 + message struct XkbActionMessageEvent
176.263 + accessx struct XkbAccessXNotifyEvent
176.264 + device struct XkbExtensionDeviceNotifyEvent
176.265 + core struct XEvent
177.1 --- a/src/solaris/classes/sun/awt/X11/keysym2ucs.h Thu Apr 16 17:42:00 2009 +0100
177.2 +++ b/src/solaris/classes/sun/awt/X11/keysym2ucs.h Thu Apr 16 19:10:32 2009 -0700
177.3 @@ -1,5 +1,5 @@
177.4 /*
177.5 - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
177.6 + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
177.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
177.8 *
177.9 * This code is free software; you can redistribute it and/or modify it
177.10 @@ -39,7 +39,7 @@
177.11 */
177.12
177.13 tojava /*
177.14 -tojava * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
177.15 +tojava * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
177.16 tojava * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
177.17 tojava *
177.18 tojava * This code is free software; you can redistribute it and/or modify it
177.19 @@ -127,14 +127,47 @@
177.20 tojava Character ch = keysym2UCSHash.get(ks);
177.21 tojava return ch == null ? (char)0 : ch.charValue();
177.22 tojava }
177.23 +tojava static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) {
177.24 +tojava XToolkit.awtLock();
177.25 +tojava try {
177.26 +tojava return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx);
177.27 +tojava } finally {
177.28 +tojava XToolkit.awtUnlock();
177.29 +tojava }
177.30 +tojava }
177.31 +tojava static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) {
177.32 +tojava XToolkit.awtLock();
177.33 +tojava try {
177.34 +tojava int mods = ev.get_state();
177.35 +tojava if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) {
177.36 +tojava // I don't know all possible meanings of 'ndx' in case of XKB
177.37 +tojava // and don't want to speculate. But this particular case
177.38 +tojava // clearly means that caller needs a so called primary keysym.
177.39 +tojava mods ^= XConstants.ShiftMask;
177.40 +tojava }
177.41 +tojava XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(),
177.42 +tojava mods, XlibWrapper.iarg1, XlibWrapper.larg3);
177.43 +tojava //XXX unconsumed modifiers?
177.44 +tojava return Native.getLong(XlibWrapper.larg3);
177.45 +tojava } finally {
177.46 +tojava XToolkit.awtUnlock();
177.47 +tojava }
177.48 +tojava }
177.49 tojava static long xkeycode2keysym(XKeyEvent ev, int ndx) {
177.50 tojava XToolkit.awtLock();
177.51 tojava try {
177.52 -tojava return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx );
177.53 +tojava if (XToolkit.canUseXKBCalls()) {
177.54 +tojava return xkeycode2keysym_xkb(ev, ndx);
177.55 +tojava }else{
177.56 +tojava return xkeycode2keysym_noxkb(ev, ndx);
177.57 +tojava }
177.58 tojava } finally {
177.59 tojava XToolkit.awtUnlock();
177.60 tojava }
177.61 tojava }
177.62 +tojava static long xkeycode2primary_keysym(XKeyEvent ev) {
177.63 +tojava return xkeycode2keysym(ev, 0);
177.64 +tojava }
177.65 tojava public static boolean isKPEvent( XKeyEvent ev )
177.66 tojava {
177.67 tojava // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event.
177.68 @@ -236,6 +269,27 @@
177.69 tojava Keysym2JavaKeycode jkc = getJavaKeycode( ev );
177.70 tojava return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
177.71 tojava }
177.72 +tojava /**
177.73 +tojava * Return an integer java keycode apprx as it was before extending keycodes range.
177.74 +tojava * This call would ignore for instance XKB and process whatever is on the bottom
177.75 +tojava * of keysym stack. Result will not depend on actual locale, will differ between
177.76 +tojava * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian)
177.77 +tojava * but will be someway compatible with old releases.
177.78 +tojava */
177.79 +tojava static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) {
177.80 +tojava long keysym = XConstants.NoSymbol;
177.81 +tojava int ndx = 0;
177.82 +tojava if( (ev.get_state() & XToolkit.numLockMask) != 0 &&
177.83 +tojava isKPEvent(ev)) {
177.84 +tojava keysym = getKeypadKeysym( ev );
177.85 +tojava } else {
177.86 +tojava // we only need primary-layer keysym to derive a java keycode.
177.87 +tojava ndx = 0;
177.88 +tojava keysym = xkeycode2keysym_noxkb(ev, ndx);
177.89 +tojava }
177.90 +tojava Keysym2JavaKeycode jkc = keysym2JavaKeycodeHash.get( keysym );
177.91 +tojava return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode();
177.92 +tojava }
177.93 tojava static long javaKeycode2Keysym( int jkey ) {
177.94 tojava Long ks = javaKeycode2KeysymHash.get( jkey );
177.95 tojava return (ks == null ? 0 : ks.longValue());
178.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw16.png has changed
179.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw24.png has changed
180.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw32.png has changed
181.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-bw48.png has changed
182.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim16.png has changed
183.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim24.png has changed
184.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim32.png has changed
185.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-interim48.png has changed
186.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow16.png has changed
187.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow24.png has changed
188.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow32.png has changed
189.1 Binary file src/solaris/classes/sun/awt/X11/security-icon-yellow48.png has changed
190.1 --- a/src/solaris/classes/sun/awt/X11GraphicsConfig.java Thu Apr 16 17:42:00 2009 +0100
190.2 +++ b/src/solaris/classes/sun/awt/X11GraphicsConfig.java Thu Apr 16 19:10:32 2009 -0700
190.3 @@ -1,5 +1,5 @@
190.4 /*
190.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
190.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
190.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
190.8 *
190.9 * This code is free software; you can redistribute it and/or modify it
190.10 @@ -450,4 +450,13 @@
190.11 return 0x00; // UNDEFINED
190.12 }
190.13 }
190.14 +
190.15 + /*
190.16 + @Override
190.17 + */
190.18 + public boolean isTranslucencyCapable() {
190.19 + return isTranslucencyCapable(getAData());
190.20 + }
190.21 +
190.22 + private native boolean isTranslucencyCapable(long x11ConfigData);
190.23 }
191.1 --- a/src/solaris/classes/sun/awt/motif/MToolkit.java Thu Apr 16 17:42:00 2009 +0100
191.2 +++ b/src/solaris/classes/sun/awt/motif/MToolkit.java Thu Apr 16 19:10:32 2009 -0700
191.3 @@ -336,6 +336,10 @@
191.4 return null;
191.5 }
191.6
191.7 + public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
191.8 + return null;
191.9 + }
191.10 +
191.11 //public MEmbeddedFramePeer createEmbeddedFrame(MEmbeddedFrame target)
191.12 //{
191.13 //MEmbeddedFramePeer peer = new MEmbeddedFramePeer(target);
192.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
192.2 +++ b/src/solaris/classes/sun/net/NetHooks.java Thu Apr 16 19:10:32 2009 -0700
192.3 @@ -0,0 +1,122 @@
192.4 +/*
192.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
192.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
192.7 + *
192.8 + * This code is free software; you can redistribute it and/or modify it
192.9 + * under the terms of the GNU General Public License version 2 only, as
192.10 + * published by the Free Software Foundation. Sun designates this
192.11 + * particular file as subject to the "Classpath" exception as provided
192.12 + * by Sun in the LICENSE file that accompanied this code.
192.13 + *
192.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
192.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
192.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
192.17 + * version 2 for more details (a copy is included in the LICENSE file that
192.18 + * accompanied this code).
192.19 + *
192.20 + * You should have received a copy of the GNU General Public License version
192.21 + * 2 along with this work; if not, write to the Free Software Foundation,
192.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
192.23 + *
192.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
192.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
192.26 + * have any questions.
192.27 + */
192.28 +
192.29 +package sun.net;
192.30 +
192.31 +import java.net.InetAddress;
192.32 +import java.io.FileDescriptor;
192.33 +import java.io.IOException;
192.34 +import java.security.AccessController;
192.35 +import java.security.PrivilegedAction;
192.36 +import sun.security.action.GetPropertyAction;
192.37 +
192.38 +/**
192.39 + * Defines static methods to be invoked prior to binding or connecting TCP sockets.
192.40 + */
192.41 +
192.42 +public final class NetHooks {
192.43 +
192.44 + /**
192.45 + * A provider with hooks to allow sockets be converted prior to binding or
192.46 + * connecting a TCP socket.
192.47 + *
192.48 + * <p> Concrete implementations of this class should define a zero-argument
192.49 + * constructor and implement the abstract methods specified below.
192.50 + */
192.51 + public static abstract class Provider {
192.52 + /**
192.53 + * Initializes a new instance of this class.
192.54 + */
192.55 + protected Provider() {}
192.56 +
192.57 + /**
192.58 + * Invoked prior to binding a TCP socket.
192.59 + */
192.60 + public abstract void implBeforeTcpBind(FileDescriptor fdObj,
192.61 + InetAddress address,
192.62 + int port)
192.63 + throws IOException;
192.64 +
192.65 + /**
192.66 + * Invoked prior to connecting an unbound TCP socket.
192.67 + */
192.68 + public abstract void implBeforeTcpConnect(FileDescriptor fdObj,
192.69 + InetAddress address,
192.70 + int port)
192.71 + throws IOException;
192.72 + }
192.73 +
192.74 + /**
192.75 + * For now, we load the SDP provider on Solaris. In the future this may
192.76 + * be changed to use the ServiceLoader facility to allow the deployment of
192.77 + * other providers.
192.78 + */
192.79 + private static Provider loadProvider(final String cn) {
192.80 + return AccessController
192.81 + .doPrivileged(new PrivilegedAction<Provider>() {
192.82 + @Override public Provider run() {
192.83 + Class<Provider> c;
192.84 + try {
192.85 + c = (Class<Provider>)Class.forName(cn, true, null);
192.86 + } catch (ClassNotFoundException x) {
192.87 + throw new AssertionError(x);
192.88 + }
192.89 + try {
192.90 + return c.newInstance();
192.91 + } catch (IllegalAccessException x) {
192.92 + throw new AssertionError(x);
192.93 + } catch (InstantiationException x) {
192.94 + throw new AssertionError(x);
192.95 + }
192.96 + }});
192.97 + }
192.98 + private static final Provider provider = AccessController
192.99 + .doPrivileged(new GetPropertyAction("os.name")).equals("SunOS") ?
192.100 + loadProvider("sun.net.spi.SdpProvider") : null;
192.101 +
192.102 + /**
192.103 + * Invoke prior to binding a TCP socket.
192.104 + */
192.105 + public static void beforeTcpBind(FileDescriptor fdObj,
192.106 + InetAddress address,
192.107 + int port)
192.108 + throws IOException
192.109 + {
192.110 + if (provider != null)
192.111 + provider.implBeforeTcpBind(fdObj, address, port);
192.112 + }
192.113 +
192.114 + /**
192.115 + * Invoke prior to connecting an unbound TCP socket.
192.116 + */
192.117 + public static void beforeTcpConnect(FileDescriptor fdObj,
192.118 + InetAddress address,
192.119 + int port)
192.120 + throws IOException
192.121 + {
192.122 + if (provider != null)
192.123 + provider.implBeforeTcpConnect(fdObj, address, port);
192.124 + }
192.125 +}
193.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
193.2 +++ b/src/solaris/classes/sun/net/spi/SdpProvider.java Thu Apr 16 19:10:32 2009 -0700
193.3 @@ -0,0 +1,339 @@
193.4 +/*
193.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
193.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
193.7 + *
193.8 + * This code is free software; you can redistribute it and/or modify it
193.9 + * under the terms of the GNU General Public License version 2 only, as
193.10 + * published by the Free Software Foundation. Sun designates this
193.11 + * particular file as subject to the "Classpath" exception as provided
193.12 + * by Sun in the LICENSE file that accompanied this code.
193.13 + *
193.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
193.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
193.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
193.17 + * version 2 for more details (a copy is included in the LICENSE file that
193.18 + * accompanied this code).
193.19 + *
193.20 + * You should have received a copy of the GNU General Public License version
193.21 + * 2 along with this work; if not, write to the Free Software Foundation,
193.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
193.23 + *
193.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
193.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
193.26 + * have any questions.
193.27 + */
193.28 +
193.29 +package sun.net.spi;
193.30 +
193.31 +import sun.net.NetHooks;
193.32 +import java.net.InetAddress;
193.33 +import java.net.Inet4Address;
193.34 +import java.net.UnknownHostException;
193.35 +import java.util.*;
193.36 +import java.io.File;
193.37 +import java.io.FileDescriptor;
193.38 +import java.io.IOException;
193.39 +import java.io.PrintStream;
193.40 +
193.41 +import sun.misc.SharedSecrets;
193.42 +import sun.misc.JavaIOFileDescriptorAccess;
193.43 +
193.44 +/**
193.45 + * A NetHooks provider that converts sockets from the TCP to SDP protocol prior
193.46 + * to binding or connecting.
193.47 + */
193.48 +
193.49 +public class SdpProvider extends NetHooks.Provider {
193.50 + private static final JavaIOFileDescriptorAccess fdAccess =
193.51 + SharedSecrets.getJavaIOFileDescriptorAccess();
193.52 +
193.53 + // maximum port
193.54 + private static final int MAX_PORT = 65535;
193.55 +
193.56 + // indicates if SDP is enabled and the rules for when the protocol is used
193.57 + private final boolean enabled;
193.58 + private final List<Rule> rules;
193.59 +
193.60 + // logging for debug purposes
193.61 + private PrintStream log;
193.62 +
193.63 + public SdpProvider() {
193.64 + // if this property is not defined then there is nothing to do.
193.65 + String file = System.getProperty("com.sun.sdp.conf");
193.66 + if (file == null) {
193.67 + this.enabled = false;
193.68 + this.rules = null;
193.69 + return;
193.70 + }
193.71 +
193.72 + // load configuration file
193.73 + List<Rule> list = null;
193.74 + if (file != null) {
193.75 + try {
193.76 + list = loadRulesFromFile(file);
193.77 + } catch (IOException e) {
193.78 + fail("Error reading %s: %s", file, e.getMessage());
193.79 + }
193.80 + }
193.81 +
193.82 + // check if debugging is enabled
193.83 + PrintStream out = null;
193.84 + String logfile = System.getProperty("com.sun.sdp.debug");
193.85 + if (logfile != null) {
193.86 + out = System.out;
193.87 + if (logfile.length() > 0) {
193.88 + try {
193.89 + out = new PrintStream(logfile);
193.90 + } catch (IOException ignore) { }
193.91 + }
193.92 + }
193.93 +
193.94 + this.enabled = !list.isEmpty();
193.95 + this.rules = list;
193.96 + this.log = out;
193.97 + }
193.98 +
193.99 + // supported actions
193.100 + private static enum Action {
193.101 + BIND,
193.102 + CONNECT;
193.103 + }
193.104 +
193.105 + // a rule for matching a bind or connect request
193.106 + private static interface Rule {
193.107 + boolean match(Action action, InetAddress address, int port);
193.108 + }
193.109 +
193.110 + // rule to match port[-end]
193.111 + private static class PortRangeRule implements Rule {
193.112 + private final Action action;
193.113 + private final int portStart;
193.114 + private final int portEnd;
193.115 + PortRangeRule(Action action, int portStart, int portEnd) {
193.116 + this.action = action;
193.117 + this.portStart = portStart;
193.118 + this.portEnd = portEnd;
193.119 + }
193.120 + Action action() {
193.121 + return action;
193.122 + }
193.123 + @Override
193.124 + public boolean match(Action action, InetAddress address, int port) {
193.125 + return (action == this.action &&
193.126 + port >= this.portStart &&
193.127 + port <= this.portEnd);
193.128 + }
193.129 + }
193.130 +
193.131 + // rule to match address[/prefix] port[-end]
193.132 + private static class AddressPortRangeRule extends PortRangeRule {
193.133 + private final byte[] addressAsBytes;
193.134 + private final int prefixByteCount;
193.135 + private final byte mask;
193.136 + AddressPortRangeRule(Action action, InetAddress address,
193.137 + int prefix, int port, int end)
193.138 + {
193.139 + super(action, port, end);
193.140 + this.addressAsBytes = address.getAddress();
193.141 + this.prefixByteCount = prefix >> 3;
193.142 + this.mask = (byte)(0xff << (8 - (prefix % 8)));
193.143 + }
193.144 + @Override
193.145 + public boolean match(Action action, InetAddress address, int port) {
193.146 + if (action != action())
193.147 + return false;
193.148 + byte[] candidate = address.getAddress();
193.149 + // same address type?
193.150 + if (candidate.length != addressAsBytes.length)
193.151 + return false;
193.152 + // check bytes
193.153 + for (int i=0; i<prefixByteCount; i++) {
193.154 + if (candidate[i] != addressAsBytes[i])
193.155 + return false;
193.156 + }
193.157 + // check remaining bits
193.158 + if ((prefixByteCount < addressAsBytes.length) &&
193.159 + ((candidate[prefixByteCount] & mask) !=
193.160 + (addressAsBytes[prefixByteCount] & mask)))
193.161 + return false;
193.162 + return super.match(action, address, port);
193.163 + }
193.164 + }
193.165 +
193.166 + // parses port:[-end]
193.167 + private static int[] parsePortRange(String s) {
193.168 + int pos = s.indexOf('-');
193.169 + try {
193.170 + int[] result = new int[2];
193.171 + if (pos < 0) {
193.172 + boolean all = s.equals("*");
193.173 + result[0] = all ? 0 : Integer.parseInt(s);
193.174 + result[1] = all ? MAX_PORT : result[0];
193.175 + } else {
193.176 + String low = s.substring(0, pos);
193.177 + if (low.length() == 0) low = "*";
193.178 + String high = s.substring(pos+1);
193.179 + if (high.length() == 0) high = "*";
193.180 + result[0] = low.equals("*") ? 0 : Integer.parseInt(low);
193.181 + result[1] = high.equals("*") ? MAX_PORT : Integer.parseInt(high);
193.182 + }
193.183 + return result;
193.184 + } catch (NumberFormatException e) {
193.185 + return new int[0];
193.186 + }
193.187 + }
193.188 +
193.189 + private static void fail(String msg, Object... args) {
193.190 + Formatter f = new Formatter();
193.191 + f.format(msg, args);
193.192 + throw new RuntimeException(f.out().toString());
193.193 + }
193.194 +
193.195 + // loads rules from the given file
193.196 + // Each non-blank/non-comment line must have the format:
193.197 + // ("bind" | "connect") 1*LWSP-char (hostname | ipaddress["/" prefix])
193.198 + // 1*LWSP-char ("*" | port) [ "-" ("*" | port) ]
193.199 + private static List<Rule> loadRulesFromFile(String file)
193.200 + throws IOException
193.201 + {
193.202 + Scanner scanner = new Scanner(new File(file));
193.203 + try {
193.204 + List<Rule> result = new ArrayList<Rule>();
193.205 + while (scanner.hasNextLine()) {
193.206 + String line = scanner.nextLine().trim();
193.207 +
193.208 + // skip blank lines and comments
193.209 + if (line.length() == 0 || line.charAt(0) == '#')
193.210 + continue;
193.211 +
193.212 + // must have 3 fields
193.213 + String[] s = line.split("\\s+");
193.214 + if (s.length != 3) {
193.215 + fail("Malformed line '%s'", line);
193.216 + continue;
193.217 + }
193.218 +
193.219 + // first field is the action ("bind" or "connect")
193.220 + Action action = null;
193.221 + for (Action a: Action.values()) {
193.222 + if (s[0].equalsIgnoreCase(a.name())) {
193.223 + action = a;
193.224 + break;
193.225 + }
193.226 + }
193.227 + if (action == null) {
193.228 + fail("Action '%s' not recognized", s[0]);
193.229 + continue;
193.230 + }
193.231 +
193.232 + // * port[-end]
193.233 + int[] ports = parsePortRange(s[2]);
193.234 + if (ports.length == 0) {
193.235 + fail("Malformed port range '%s'", s[2]);
193.236 + continue;
193.237 + }
193.238 +
193.239 + // match all addresses
193.240 + if (s[1].equals("*")) {
193.241 + result.add(new PortRangeRule(action, ports[0], ports[1]));
193.242 + continue;
193.243 + }
193.244 +
193.245 + // hostname | ipaddress[/prefix]
193.246 + int pos = s[1].indexOf('/');
193.247 + try {
193.248 + if (pos < 0) {
193.249 + // hostname or ipaddress (no prefix)
193.250 + InetAddress[] addresses = InetAddress.getAllByName(s[1]);
193.251 + for (InetAddress address: addresses) {
193.252 + int prefix =
193.253 + (address instanceof Inet4Address) ? 32 : 128;
193.254 + result.add(new AddressPortRangeRule(action, address,
193.255 + prefix, ports[0], ports[1]));
193.256 + }
193.257 + } else {
193.258 + // ipaddress/prefix
193.259 + InetAddress address = InetAddress
193.260 + .getByName(s[1].substring(0, pos));
193.261 + int prefix = -1;
193.262 + try {
193.263 + prefix = Integer.parseInt(s[1].substring(pos+1));
193.264 + if (address instanceof Inet4Address) {
193.265 + // must be 1-31
193.266 + if (prefix < 0 || prefix > 32) prefix = -1;
193.267 + } else {
193.268 + // must be 1-128
193.269 + if (prefix < 0 || prefix > 128) prefix = -1;
193.270 + }
193.271 + } catch (NumberFormatException e) {
193.272 + }
193.273 +
193.274 + if (prefix > 0) {
193.275 + result.add(new AddressPortRangeRule(action,
193.276 + address, prefix, ports[0], ports[1]));
193.277 + } else {
193.278 + fail("Malformed prefix '%s'", s[1]);
193.279 + continue;
193.280 + }
193.281 + }
193.282 + } catch (UnknownHostException uhe) {
193.283 + fail("Unknown host or malformed IP address '%s'", s[1]);
193.284 + continue;
193.285 + }
193.286 + }
193.287 + return result;
193.288 + } finally {
193.289 + scanner.close();
193.290 + }
193.291 + }
193.292 +
193.293 + // converts unbound TCP socket to a SDP socket if it matches the rules
193.294 + private void convertTcpToSdpIfMatch(FileDescriptor fdObj,
193.295 + Action action,
193.296 + InetAddress address,
193.297 + int port)
193.298 + throws IOException
193.299 + {
193.300 + boolean matched = false;
193.301 + for (Rule rule: rules) {
193.302 + if (rule.match(action, address, port)) {
193.303 + int fd = fdAccess.get(fdObj);
193.304 + convert(fd);
193.305 + matched = true;
193.306 + break;
193.307 + }
193.308 + }
193.309 + if (log != null) {
193.310 + String addr = (address instanceof Inet4Address) ?
193.311 + address.getHostAddress() : "[" + address.getHostAddress() + "]";
193.312 + if (matched) {
193.313 + log.format("%s to %s:%d (socket converted to SDP protocol)\n", action, addr, port);
193.314 + } else {
193.315 + log.format("%s to %s:%d (no match)\n", action, addr, port);
193.316 + }
193.317 + }
193.318 + }
193.319 +
193.320 + @Override
193.321 + public void implBeforeTcpBind(FileDescriptor fdObj,
193.322 + InetAddress address,
193.323 + int port)
193.324 + throws IOException
193.325 + {
193.326 + if (enabled)
193.327 + convertTcpToSdpIfMatch(fdObj, Action.BIND, address, port);
193.328 + }
193.329 +
193.330 + @Override
193.331 + public void implBeforeTcpConnect(FileDescriptor fdObj,
193.332 + InetAddress address,
193.333 + int port)
193.334 + throws IOException
193.335 + {
193.336 + if (enabled)
193.337 + convertTcpToSdpIfMatch(fdObj, Action.CONNECT, address, port);
193.338 + }
193.339 +
193.340 + // -- native methods --
193.341 + private static native void convert(int fd) throws IOException;
193.342 +}
194.1 --- a/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Thu Apr 16 17:42:00 2009 +0100
194.2 +++ b/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Thu Apr 16 19:10:32 2009 -0700
194.3 @@ -76,20 +76,19 @@
194.4 // Base address of the native pollArray
194.5 private long pollArrayAddress;
194.6
194.7 + // Array of pollfd structs used for driver updates
194.8 + private AllocatedNativeObject updatePollArray;
194.9 +
194.10 // Maximum number of POLL_FD structs to update at once
194.11 - private int MAX_UPDATE_SIZE = 10000;
194.12 + private int MAX_UPDATE_SIZE = Math.min(OPEN_MAX, 10000);
194.13
194.14 DevPollArrayWrapper() {
194.15 int allocationSize = NUM_POLLFDS * SIZE_POLLFD;
194.16 pollArray = new AllocatedNativeObject(allocationSize, true);
194.17 pollArrayAddress = pollArray.address();
194.18 + allocationSize = MAX_UPDATE_SIZE * SIZE_POLLFD;
194.19 + updatePollArray = new AllocatedNativeObject(allocationSize, true);
194.20 wfd = init();
194.21 -
194.22 - for (int i=0; i<NUM_POLLFDS; i++) {
194.23 - putDescriptor(i, 0);
194.24 - putEventOps(i, 0);
194.25 - putReventOps(i, 0);
194.26 - }
194.27 }
194.28
194.29 // Machinery for remembering fd registration changes
194.30 @@ -129,21 +128,11 @@
194.31 register(wfd, fd0, POLLIN);
194.32 }
194.33
194.34 - void putEventOps(int i, int event) {
194.35 - int offset = SIZE_POLLFD * i + EVENT_OFFSET;
194.36 - pollArray.putShort(offset, (short)event);
194.37 - }
194.38 -
194.39 void putReventOps(int i, int revent) {
194.40 int offset = SIZE_POLLFD * i + REVENT_OFFSET;
194.41 pollArray.putShort(offset, (short)revent);
194.42 }
194.43
194.44 - void putDescriptor(int i, int fd) {
194.45 - int offset = SIZE_POLLFD * i + FD_OFFSET;
194.46 - pollArray.putInt(offset, fd);
194.47 - }
194.48 -
194.49 int getEventOps(int i) {
194.50 int offset = SIZE_POLLFD * i + EVENT_OFFSET;
194.51 return pollArray.getShort(offset);
194.52 @@ -174,9 +163,10 @@
194.53 void closeDevPollFD() throws IOException {
194.54 FileDispatcherImpl.closeIntFD(wfd);
194.55 pollArray.free();
194.56 + updatePollArray.free();
194.57 }
194.58
194.59 - int poll(long timeout) {
194.60 + int poll(long timeout) throws IOException {
194.61 updateRegistrations();
194.62 updated = poll0(pollArrayAddress, NUM_POLLFDS, timeout, wfd);
194.63 for (int i=0; i<updated; i++) {
194.64 @@ -189,60 +179,34 @@
194.65 return updated;
194.66 }
194.67
194.68 - void updateRegistrations() {
194.69 - // take snapshot of the updateList size to see if there are
194.70 - // any registrations to update
194.71 - int updateSize;
194.72 + void updateRegistrations() throws IOException {
194.73 + // Populate pollfd array with updated masks
194.74 synchronized (updateList) {
194.75 - updateSize = updateList.size();
194.76 - }
194.77 - if (updateSize > 0) {
194.78 - // Construct a pollfd array with updated masks; we may overallocate
194.79 - // by some amount because if the events are already POLLREMOVE
194.80 - // then the second pollfd of that pair will not be needed. The
194.81 - // number of entries is limited to a reasonable number to avoid
194.82 - // allocating a lot of memory.
194.83 - int maxUpdates = Math.min(updateSize * 2, MAX_UPDATE_SIZE);
194.84 - int allocationSize = maxUpdates * SIZE_POLLFD;
194.85 - AllocatedNativeObject updatePollArray =
194.86 - new AllocatedNativeObject(allocationSize, true);
194.87 + while (updateList.size() > 0) {
194.88 + // We have to insert a dummy node in between each
194.89 + // real update to use POLLREMOVE on the fd first because
194.90 + // otherwise the changes are simply OR'd together
194.91 + int index = 0;
194.92 + Updator u = null;
194.93 + while ((u = updateList.poll()) != null) {
194.94 + // First add pollfd struct to clear out this fd
194.95 + putPollFD(updatePollArray, index, u.fd, POLLREMOVE);
194.96 + index++;
194.97 + // Now add pollfd to update this fd, if necessary
194.98 + if (u.mask != POLLREMOVE) {
194.99 + putPollFD(updatePollArray, index, u.fd, (short)u.mask);
194.100 + index++;
194.101 + }
194.102
194.103 - try {
194.104 - synchronized (updateList) {
194.105 - while (updateList.size() > 0) {
194.106 - // We have to insert a dummy node in between each
194.107 - // real update to use POLLREMOVE on the fd first because
194.108 - // otherwise the changes are simply OR'd together
194.109 - int index = 0;
194.110 - Updator u = null;
194.111 - while ((u = updateList.poll()) != null) {
194.112 - // First add pollfd struct to clear out this fd
194.113 - putPollFD(updatePollArray, index, u.fd, POLLREMOVE);
194.114 - index++;
194.115 - // Now add pollfd to update this fd, if necessary
194.116 - if (u.mask != POLLREMOVE) {
194.117 - putPollFD(updatePollArray, index, u.fd,
194.118 - (short)u.mask);
194.119 - index++;
194.120 - }
194.121 -
194.122 - // Check against the max allocation size; these are
194.123 - // all we will process. Valid index ranges from 0 to
194.124 - // (maxUpdates - 1) and we can use up to 2 per loop
194.125 - if (index > maxUpdates - 2)
194.126 - break;
194.127 - }
194.128 - // Register the changes with /dev/poll
194.129 - registerMultiple(wfd, updatePollArray.address(), index);
194.130 - }
194.131 + // Check against the max update size; these are
194.132 + // all we will process. Valid index ranges from 0 to
194.133 + // (MAX_UPDATE_SIZE - 1) and we can use up to 2 per loop
194.134 + if (index > MAX_UPDATE_SIZE - 2)
194.135 + break;
194.136 }
194.137 - } finally {
194.138 - // Free the native array
194.139 - updatePollArray.free();
194.140 - // BUG: If an exception was thrown then the selector now believes
194.141 - // that the last set of changes was updated but it probably
194.142 - // was not. This should not be a likely occurrence.
194.143 - }
194.144 + // Register the changes with /dev/poll
194.145 + registerMultiple(wfd, updatePollArray.address(), index);
194.146 + }
194.147 }
194.148 }
194.149
194.150 @@ -275,7 +239,8 @@
194.151
194.152 private native int init();
194.153 private native void register(int wfd, int fd, int mask);
194.154 - private native void registerMultiple(int wfd, long address, int len);
194.155 + private native void registerMultiple(int wfd, long address, int len)
194.156 + throws IOException;
194.157 private native int poll0(long pollAddress, int numfds, long timeout,
194.158 int wfd);
194.159 private static native void interrupt(int fd);
195.1 --- a/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java Thu Apr 16 17:42:00 2009 +0100
195.2 +++ b/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java Thu Apr 16 19:10:32 2009 -0700
195.3 @@ -78,8 +78,8 @@
195.4 // Base address of the native pollArray
195.5 private final long pollArrayAddress;
195.6
195.7 - // Set of "idle" file descriptors
195.8 - private final HashSet<Integer> idleSet;
195.9 + // Set of "idle" channels
195.10 + private final HashSet<SelChImpl> idleSet;
195.11
195.12 EPollArrayWrapper() {
195.13 // creates the epoll file descriptor
195.14 @@ -96,19 +96,22 @@
195.15 }
195.16
195.17 // create idle set
195.18 - idleSet = new HashSet<Integer>();
195.19 + idleSet = new HashSet<SelChImpl>();
195.20 }
195.21
195.22 // Used to update file description registrations
195.23 private static class Updator {
195.24 + SelChImpl channel;
195.25 int opcode;
195.26 - int fd;
195.27 int events;
195.28 - Updator(int opcode, int fd, int events) {
195.29 + Updator(SelChImpl channel, int opcode, int events) {
195.30 + this.channel = channel;
195.31 this.opcode = opcode;
195.32 - this.fd = fd;
195.33 this.events = events;
195.34 }
195.35 + Updator(SelChImpl channel, int opcode) {
195.36 + this(channel, opcode, 0);
195.37 + }
195.38 }
195.39
195.40 private LinkedList<Updator> updateList = new LinkedList<Updator>();
195.41 @@ -163,60 +166,54 @@
195.42 }
195.43
195.44 /**
195.45 - * Update the events for a given file descriptor.
195.46 + * Update the events for a given channel.
195.47 */
195.48 - void setInterest(int fd, int mask) {
195.49 + void setInterest(SelChImpl channel, int mask) {
195.50 synchronized (updateList) {
195.51 -
195.52 - // if the interest events are 0 then add to idle set, and delete
195.53 - // from epoll if registered (or pending)
195.54 - if (mask == 0) {
195.55 - if (idleSet.add(fd)) {
195.56 - updateList.add(new Updator(EPOLL_CTL_DEL, fd, 0));
195.57 - }
195.58 - return;
195.59 - }
195.60 -
195.61 - // if file descriptor is idle then add to epoll
195.62 - if (!idleSet.isEmpty() && idleSet.remove(fd)) {
195.63 - updateList.add(new Updator(EPOLL_CTL_ADD, fd, mask));
195.64 - return;
195.65 - }
195.66 -
195.67 // if the previous pending operation is to add this file descriptor
195.68 // to epoll then update its event set
195.69 if (updateList.size() > 0) {
195.70 Updator last = updateList.getLast();
195.71 - if (last.fd == fd && last.opcode == EPOLL_CTL_ADD) {
195.72 + if (last.channel == channel && last.opcode == EPOLL_CTL_ADD) {
195.73 last.events = mask;
195.74 return;
195.75 }
195.76 }
195.77
195.78 // update existing registration
195.79 - updateList.add(new Updator(EPOLL_CTL_MOD, fd, mask));
195.80 + updateList.add(new Updator(channel, EPOLL_CTL_MOD, mask));
195.81 }
195.82 }
195.83
195.84 /**
195.85 - * Add a new file descriptor to epoll
195.86 + * Add a channel's file descriptor to epoll
195.87 */
195.88 - void add(int fd) {
195.89 + void add(SelChImpl channel) {
195.90 synchronized (updateList) {
195.91 - updateList.add(new Updator(EPOLL_CTL_ADD, fd, 0));
195.92 + updateList.add(new Updator(channel, EPOLL_CTL_ADD));
195.93 }
195.94 }
195.95
195.96 /**
195.97 - * Remove a file descriptor from epoll
195.98 + * Remove a channel's file descriptor from epoll
195.99 */
195.100 - void release(int fd) {
195.101 + void release(SelChImpl channel) {
195.102 synchronized (updateList) {
195.103 - // if file descriptor is idle then remove from idle set, otherwise
195.104 - // delete from epoll
195.105 - if (!idleSet.remove(fd)) {
195.106 - updateList.add(new Updator(EPOLL_CTL_DEL, fd, 0));
195.107 + // flush any pending updates
195.108 + int i = 0;
195.109 + while (i < updateList.size()) {
195.110 + if (updateList.get(i).channel == channel) {
195.111 + updateList.remove(i);
195.112 + } else {
195.113 + i++;
195.114 + }
195.115 }
195.116 +
195.117 + // remove from the idle set (if present)
195.118 + idleSet.remove(channel);
195.119 +
195.120 + // remove from epoll (if registered)
195.121 + epollCtl(epfd, EPOLL_CTL_DEL, channel.getFDVal(), 0);
195.122 }
195.123 }
195.124
195.125 @@ -248,7 +245,26 @@
195.126 synchronized (updateList) {
195.127 Updator u = null;
195.128 while ((u = updateList.poll()) != null) {
195.129 - epollCtl(epfd, u.opcode, u.fd, u.events);
195.130 + SelChImpl ch = u.channel;
195.131 + if (!ch.isOpen())
195.132 + continue;
195.133 +
195.134 + // if the events are 0 then file descriptor is put into "idle
195.135 + // set" to prevent it being polled
195.136 + if (u.events == 0) {
195.137 + boolean added = idleSet.add(u.channel);
195.138 + // if added to idle set then remove from epoll if registered
195.139 + if (added && (u.opcode == EPOLL_CTL_MOD))
195.140 + epollCtl(epfd, EPOLL_CTL_DEL, ch.getFDVal(), 0);
195.141 + } else {
195.142 + // events are specified. If file descriptor was in idle set
195.143 + // it must be re-registered (by converting opcode to ADD)
195.144 + boolean idle = false;
195.145 + if (!idleSet.isEmpty())
195.146 + idle = idleSet.remove(u.channel);
195.147 + int opcode = (idle) ? EPOLL_CTL_ADD : u.opcode;
195.148 + epollCtl(epfd, opcode, ch.getFDVal(), u.events);
195.149 + }
195.150 }
195.151 }
195.152 }
196.1 --- a/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java Thu Apr 16 17:42:00 2009 +0100
196.2 +++ b/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java Thu Apr 16 19:10:32 2009 -0700
196.3 @@ -139,7 +139,6 @@
196.4 FileDispatcherImpl.closeIntFD(fd0);
196.5 FileDispatcherImpl.closeIntFD(fd1);
196.6
196.7 - pollWrapper.release(fd0);
196.8 pollWrapper.closeEPollFD();
196.9 // it is possible
196.10 selectedKeys = null;
196.11 @@ -162,17 +161,18 @@
196.12 protected void implRegister(SelectionKeyImpl ski) {
196.13 if (closed)
196.14 throw new ClosedSelectorException();
196.15 - int fd = IOUtil.fdVal(ski.channel.getFD());
196.16 - fdToKey.put(Integer.valueOf(fd), ski);
196.17 - pollWrapper.add(fd);
196.18 + SelChImpl ch = ski.channel;
196.19 + fdToKey.put(Integer.valueOf(ch.getFDVal()), ski);
196.20 + pollWrapper.add(ch);
196.21 keys.add(ski);
196.22 }
196.23
196.24 protected void implDereg(SelectionKeyImpl ski) throws IOException {
196.25 assert (ski.getIndex() >= 0);
196.26 - int fd = ski.channel.getFDVal();
196.27 + SelChImpl ch = ski.channel;
196.28 + int fd = ch.getFDVal();
196.29 fdToKey.remove(Integer.valueOf(fd));
196.30 - pollWrapper.release(fd);
196.31 + pollWrapper.release(ch);
196.32 ski.setIndex(-1);
196.33 keys.remove(ski);
196.34 selectedKeys.remove(ski);
196.35 @@ -185,8 +185,7 @@
196.36 void putEventOps(SelectionKeyImpl sk, int ops) {
196.37 if (closed)
196.38 throw new ClosedSelectorException();
196.39 - int fd = IOUtil.fdVal(sk.channel.getFD());
196.40 - pollWrapper.setInterest(fd, ops);
196.41 + pollWrapper.setInterest(sk.channel, ops);
196.42 }
196.43
196.44 public Selector wakeup() {
197.1 --- a/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Thu Apr 16 17:42:00 2009 +0100
197.2 +++ b/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Thu Apr 16 19:10:32 2009 -0700
197.3 @@ -32,6 +32,7 @@
197.4 import java.io.IOException;
197.5 import java.io.FileDescriptor;
197.6 import java.security.AccessController;
197.7 +import sun.net.NetHooks;
197.8 import sun.security.action.GetPropertyAction;
197.9
197.10 /**
197.11 @@ -305,6 +306,7 @@
197.12 sm.checkConnect(isa.getAddress().getHostAddress(), isa.getPort());
197.13
197.14 // check and set state
197.15 + boolean notifyBeforeTcpConnect;
197.16 synchronized (stateLock) {
197.17 if (state == ST_CONNECTED)
197.18 throw new AlreadyConnectedException();
197.19 @@ -312,12 +314,16 @@
197.20 throw new ConnectionPendingException();
197.21 state = ST_PENDING;
197.22 pendingRemote = remote;
197.23 + notifyBeforeTcpConnect = (localAddress == null);
197.24 }
197.25
197.26 AbstractFuture<Void,A> result = null;
197.27 Throwable e = null;
197.28 try {
197.29 begin();
197.30 + // notify hook if unbound
197.31 + if (notifyBeforeTcpConnect)
197.32 + NetHooks.beforeTcpConnect(fd, isa.getAddress(), isa.getPort());
197.33 int n = Net.connect(fd, isa.getAddress(), isa.getPort());
197.34 if (n == IOStatus.UNAVAILABLE) {
197.35 // connection could not be established immediately
198.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
198.2 +++ b/src/solaris/lib/sdp/sdp.conf.template Thu Apr 16 19:10:32 2009 -0700
198.3 @@ -0,0 +1,30 @@
198.4 +#
198.5 +# Configuration file to enable InfiniBand Sockets Direct Protocol.
198.6 +#
198.7 +# Each line that does not start with a comment (#) is a rule to indicate when
198.8 +# the SDP transport protocol should be used. The format of a rule is as follows:
198.9 +# ("bind"|"connect") 1*LWSP-char (hostname|ipaddress["/"prefix]) 1*LWSP-char ("*"|port)["-"("*"|port)]
198.10 +#
198.11 +# A "bind" rule indicates that the SDP protocol transport should be used when
198.12 +# a TCP socket binds to an address/port that matches the rule. A "connect" rule
198.13 +# indicates that the SDP protocol transport should be used when an unbound
198.14 +# TCP socket attempts to connect to an address/port that matches the rule.
198.15 +# Addresses may be specified as hostnames or literal Internet Protocol (IP)
198.16 +# addresses. When a literal IP address is used then a prefix length may be used
198.17 +# to indicate the number of bits for matching (useful when a block of addresses
198.18 +# or subnet is allocated to the InfiniBand fabric).
198.19 +
198.20 +# Use SDP for all sockets that bind to specific local addresses
198.21 +#bind 192.168.1.1 *
198.22 +#bind fe80::21b:24ff:fe3d:7896 *
198.23 +
198.24 +# Use SDP for all sockets that bind to the wildcard address in a port range
198.25 +#bind 0.0.0.0 5000-5999
198.26 +#bind ::0 5000-5999
198.27 +
198.28 +# Use SDP when connecting to all application services on 192.168.1.*
198.29 +#connect 192.168.1.0/24 1024-*
198.30 +
198.31 +# Use SDP when connecting to the http server or MySQL database on hpccluster.
198.32 +#connect hpccluster.foo.com 80
198.33 +#connect hpccluster.foo.com 3306
199.1 --- a/src/solaris/native/sun/awt/awt_Component.h Thu Apr 16 17:42:00 2009 +0100
199.2 +++ b/src/solaris/native/sun/awt/awt_Component.h Thu Apr 16 19:10:32 2009 -0700
199.3 @@ -41,7 +41,6 @@
199.4 jfieldID appContext;
199.5 jmethodID getParent;
199.6 jmethodID getLocationOnScreen;
199.7 - jmethodID resetGCMID;
199.8 };
199.9
199.10 /* field and method IDs for Container */
199.11 @@ -65,7 +64,3 @@
199.12 extern void processTree(Widget from, Widget to, Boolean action);
199.13 #endif // HEADLESS
199.14
199.15 -/* fieldIDs for Canvas fields that may be accessed from C */
199.16 -struct CanvasIDs {
199.17 - jmethodID setGCFromPeerMID;
199.18 -};
200.1 --- a/src/solaris/native/sun/awt/awt_GraphicsEnv.c Thu Apr 16 17:42:00 2009 +0100
200.2 +++ b/src/solaris/native/sun/awt/awt_GraphicsEnv.c Thu Apr 16 19:10:32 2009 -0700
200.3 @@ -1,5 +1,5 @@
200.4 /*
200.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
200.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
200.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
200.8 *
200.9 * This code is free software; you can redistribute it and/or modify it
200.10 @@ -354,6 +354,48 @@
200.11 return NULL;
200.12 }
200.13
200.14 +/* Note: until we include the <X11/extensions/Xrender.h> explicitly
200.15 + * we have to define a couple of things ourselves.
200.16 + */
200.17 +typedef unsigned long PictFormat;
200.18 +#define PictTypeIndexed 0
200.19 +#define PictTypeDirect 1
200.20 +
200.21 +typedef struct {
200.22 + short red;
200.23 + short redMask;
200.24 + short green;
200.25 + short greenMask;
200.26 + short blue;
200.27 + short blueMask;
200.28 + short alpha;
200.29 + short alphaMask;
200.30 +} XRenderDirectFormat;
200.31 +
200.32 +typedef struct {
200.33 + PictFormat id;
200.34 + int type;
200.35 + int depth;
200.36 + XRenderDirectFormat direct;
200.37 + Colormap colormap;
200.38 +} XRenderPictFormat;
200.39 +
200.40 +#define PictFormatID (1 << 0)
200.41 +#define PictFormatType (1 << 1)
200.42 +#define PictFormatDepth (1 << 2)
200.43 +#define PictFormatRed (1 << 3)
200.44 +#define PictFormatRedMask (1 << 4)
200.45 +#define PictFormatGreen (1 << 5)
200.46 +#define PictFormatGreenMask (1 << 6)
200.47 +#define PictFormatBlue (1 << 7)
200.48 +#define PictFormatBlueMask (1 << 8)
200.49 +#define PictFormatAlpha (1 << 9)
200.50 +#define PictFormatAlphaMask (1 << 10)
200.51 +#define PictFormatColormap (1 << 11)
200.52 +
200.53 +typedef XRenderPictFormat *
200.54 +XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual);
200.55 +
200.56 static void
200.57 getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) {
200.58
200.59 @@ -367,6 +409,9 @@
200.60 int ind;
200.61 char errmsg[128];
200.62 int xinawareScreen;
200.63 + void* xrenderLibHandle = NULL;
200.64 + XRenderFindVisualFormatFunc *XRenderFindVisualFormat = NULL;
200.65 + int major_opcode, first_event, first_error;
200.66
200.67 if (usingXinerama) {
200.68 xinawareScreen = 0;
200.69 @@ -449,6 +494,26 @@
200.70 graphicsConfigs[0] = defaultConfig;
200.71 nConfig = 1; /* reserve index 0 for default config */
200.72
200.73 + // Only use the RENDER extension if it is available on the X server
200.74 + if (XQueryExtension(awt_display, "RENDER",
200.75 + &major_opcode, &first_event, &first_error))
200.76 + {
200.77 + xrenderLibHandle = dlopen("libXrender.so.1", RTLD_LAZY | RTLD_GLOBAL);
200.78 +
200.79 +#ifndef __linux__ /* SOLARIS */
200.80 + if (xrenderLibHandle == NULL) {
200.81 + xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1",
200.82 + RTLD_LAZY | RTLD_GLOBAL);
200.83 + }
200.84 +#endif
200.85 +
200.86 + if (xrenderLibHandle != NULL) {
200.87 + XRenderFindVisualFormat =
200.88 + (XRenderFindVisualFormatFunc*)dlsym(xrenderLibHandle,
200.89 + "XRenderFindVisualFormat");
200.90 + }
200.91 + }
200.92 +
200.93 for (i = 0; i < nTrue; i++) {
200.94 if (XVisualIDFromVisual(pVITrue[i].visual) ==
200.95 XVisualIDFromVisual(defaultConfig->awt_visInfo.visual) ||
200.96 @@ -462,6 +527,21 @@
200.97 graphicsConfigs [ind]->awt_depth = pVITrue [i].depth;
200.98 memcpy (&graphicsConfigs [ind]->awt_visInfo, &pVITrue [i],
200.99 sizeof (XVisualInfo));
200.100 + if (XRenderFindVisualFormat != NULL) {
200.101 + XRenderPictFormat *format = XRenderFindVisualFormat (awt_display,
200.102 + pVITrue [i].visual);
200.103 + if (format &&
200.104 + format->type == PictTypeDirect &&
200.105 + format->direct.alphaMask)
200.106 + {
200.107 + graphicsConfigs [ind]->isTranslucencySupported = 1;
200.108 + }
200.109 + }
200.110 + }
200.111 +
200.112 + if (xrenderLibHandle != NULL) {
200.113 + dlclose(xrenderLibHandle);
200.114 + xrenderLibHandle = NULL;
200.115 }
200.116
200.117 for (i = 0; i < n8p; i++) {
200.118 @@ -1506,6 +1586,26 @@
200.119 }
200.120
200.121 /*
200.122 + * Class: sun_awt_X11GraphicsConfig
200.123 + * Method: isTranslucencyCapable
200.124 + * Signature: (J)V
200.125 + */
200.126 +JNIEXPORT jboolean JNICALL
200.127 +Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable
200.128 + (JNIEnv *env, jobject this, jlong configData)
200.129 +{
200.130 +#ifdef HEADLESS
200.131 + return JNI_FALSE;
200.132 +#else
200.133 + AwtGraphicsConfigDataPtr aData = (AwtGraphicsConfigDataPtr)jlong_to_ptr(configData);
200.134 + if (aData == NULL) {
200.135 + return JNI_FALSE;
200.136 + }
200.137 + return (jboolean)aData->isTranslucencySupported;
200.138 +#endif
200.139 +}
200.140 +
200.141 +/*
200.142 * Class: sun_awt_X11GraphicsDevice
200.143 * Method: isDBESupported
200.144 * Signature: ()Z
201.1 --- a/src/solaris/native/sun/awt/awt_Window.h Thu Apr 16 17:42:00 2009 +0100
201.2 +++ b/src/solaris/native/sun/awt/awt_Window.h Thu Apr 16 19:10:32 2009 -0700
201.3 @@ -28,7 +28,6 @@
201.4 /* fieldIDs for Window fields that may be accessed from C */
201.5 struct WindowIDs {
201.6 jfieldID warningString;
201.7 - jmethodID resetGCMID;
201.8 jfieldID locationByPlatform;
201.9 jfieldID isAutoRequestFocus;
201.10 };
202.1 --- a/src/solaris/native/sun/awt/awt_p.h Thu Apr 16 17:42:00 2009 +0100
202.2 +++ b/src/solaris/native/sun/awt/awt_p.h Thu Apr 16 19:10:32 2009 -0700
202.3 @@ -1,5 +1,5 @@
202.4 /*
202.5 - * Copyright 1995-2005 Sun Microsystems, Inc. All Rights Reserved.
202.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
202.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
202.8 *
202.9 * This code is free software; you can redistribute it and/or modify it
202.10 @@ -135,6 +135,7 @@
202.11 int pixelStride; /* Used in X11SurfaceData.c */
202.12 ColorData *color_data;
202.13 struct _GLXGraphicsConfigInfo *glxInfo;
202.14 + int isTranslucencySupported; /* Uses Xrender to find this out. */
202.15 } AwtGraphicsConfigData;
202.16
202.17 typedef AwtGraphicsConfigData* AwtGraphicsConfigDataPtr;
203.1 --- a/src/solaris/native/sun/awt/gtk2_interface.c Thu Apr 16 17:42:00 2009 +0100
203.2 +++ b/src/solaris/native/sun/awt/gtk2_interface.c Thu Apr 16 19:10:32 2009 -0700
203.3 @@ -93,6 +93,7 @@
203.4 /* Static buffer for conversion from java.lang.String to UTF-8 */
203.5 static char convertionBuffer[CONV_BUFFER_SIZE];
203.6
203.7 +static gboolean new_combo = TRUE;
203.8 const char ENV_PREFIX[] = "GTK_MODULES=";
203.9
203.10 /*******************/
203.11 @@ -608,6 +609,7 @@
203.12 dlsym(gtk2_libhandle, "gtk_combo_box_entry_new");
203.13 if (fp_gtk_combo_box_entry_new == NULL) {
203.14 fp_gtk_combo_box_entry_new = dl_symbol("gtk_combo_new");
203.15 + new_combo = FALSE;
203.16 }
203.17
203.18 fp_gtk_separator_tool_item_new =
203.19 @@ -1423,17 +1425,13 @@
203.20 */
203.21 GtkWidget *combo = (*fp_gtk_combo_box_entry_new)();
203.22
203.23 - if (widget_type == COMBO_BOX_TEXT_FIELD)
203.24 - (*fp_gtk_container_add)((GtkContainer *)combo, result);
203.25 - else
203.26 - {
203.27 + if (new_combo && widget_type == COMBO_BOX_ARROW_BUTTON) {
203.28 (*fp_gtk_widget_set_parent)(result, combo);
203.29 ((GtkBin*)combo)->child = result;
203.30 + } else {
203.31 + (*fp_gtk_container_add)((GtkContainer *)combo, result);
203.32 }
203.33 -
203.34 (*fp_gtk_container_add)((GtkContainer *)gtk2_fixed, combo);
203.35 - (*fp_gtk_widget_realize)(result);
203.36 - return result;
203.37 }
203.38 else if (widget_type != TOOL_TIP &&
203.39 widget_type != INTERNAL_FRAME &&
204.1 --- a/src/solaris/native/sun/awt/utility/rect.h Thu Apr 16 17:42:00 2009 +0100
204.2 +++ b/src/solaris/native/sun/awt/utility/rect.h Thu Apr 16 19:10:32 2009 -0700
204.3 @@ -43,4 +43,15 @@
204.4
204.5 #define RECT_INC_HEIGHT(r) (r).height++
204.6
204.7 +#if defined(__cplusplus)
204.8 +extern "C" {
204.9 +#endif
204.10 +
204.11 +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height,
204.12 + unsigned char * buf, RECT_T * outBuf);
204.13 +
204.14 +#if defined(__cplusplus)
204.15 +}
204.16 +#endif
204.17 +
204.18 #endif // _AWT_RECT_H
205.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
205.2 +++ b/src/solaris/native/sun/net/spi/SdpProvider.c Thu Apr 16 19:10:32 2009 -0700
205.3 @@ -0,0 +1,74 @@
205.4 +/*
205.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
205.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
205.7 + *
205.8 + * This code is free software; you can redistribute it and/or modify it
205.9 + * under the terms of the GNU General Public License version 2 only, as
205.10 + * published by the Free Software Foundation. Sun designates this
205.11 + * particular file as subject to the "Classpath" exception as provided
205.12 + * by Sun in the LICENSE file that accompanied this code.
205.13 + *
205.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
205.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
205.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
205.17 + * version 2 for more details (a copy is included in the LICENSE file that
205.18 + * accompanied this code).
205.19 + *
205.20 + * You should have received a copy of the GNU General Public License version
205.21 + * 2 along with this work; if not, write to the Free Software Foundation,
205.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
205.23 + *
205.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
205.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
205.26 + * have any questions.
205.27 + */
205.28 +
205.29 +#include <sys/types.h>
205.30 +#include <sys/socket.h>
205.31 +
205.32 +#if defined(__solaris__) && !defined(PROTO_SDP)
205.33 +#define PROTO_SDP 257
205.34 +#endif
205.35 +
205.36 +#include "jni.h"
205.37 +#include "jni_util.h"
205.38 +#include "net_util.h"
205.39 +
205.40 +#define RESTARTABLE(_cmd, _result) do { \
205.41 + do { \
205.42 + _result = _cmd; \
205.43 + } while((_result == -1) && (errno == EINTR)); \
205.44 +} while(0)
205.45 +
205.46 +JNIEXPORT void JNICALL
205.47 +Java_sun_net_spi_SdpProvider_convert(JNIEnv *env, jclass cls, jint fd)
205.48 +{
205.49 +#ifdef PROTO_SDP
205.50 + int domain = ipv6_available() ? AF_INET6 : AF_INET;
205.51 + int s = socket(domain, SOCK_STREAM, PROTO_SDP);
205.52 + if (s < 0) {
205.53 + JNU_ThrowIOExceptionWithLastError(env, "socket");
205.54 + } else {
205.55 + int arg, len, res;
205.56 + struct linger linger;
205.57 +
205.58 + /* copy socket options that are relevant to SDP */
205.59 + len = sizeof(arg);
205.60 + if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, &len) == 0)
205.61 + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, len);
205.62 + len = sizeof(arg);
205.63 + if (getsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, &len) == 0)
205.64 + setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, len);
205.65 + len = sizeof(linger);
205.66 + if (getsockopt(fd, SOL_SOCKET, SO_LINGER, (void*)&linger, &len) == 0)
205.67 + setsockopt(s, SOL_SOCKET, SO_LINGER, (char*)&linger, len);
205.68 +
205.69 + RESTARTABLE(dup2(s, fd), res);
205.70 + if (res < 0)
205.71 + JNU_ThrowIOExceptionWithLastError(env, "dup2");
205.72 + RESTARTABLE(close(s), res);
205.73 + }
205.74 +#else
205.75 + JNU_ThrowInternalError(env, "should not reach here");
205.76 +#endif
205.77 +}
206.1 --- a/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c Thu Apr 16 17:42:00 2009 +0100
206.2 +++ b/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c Thu Apr 16 19:10:32 2009 -0700
206.3 @@ -28,6 +28,7 @@
206.4 #include "jvm.h"
206.5 #include "jlong.h"
206.6 #include "sun_nio_ch_DevPollArrayWrapper.h"
206.7 +#include "java_lang_Integer.h"
206.8 #include <sys/poll.h>
206.9 #include <sys/resource.h>
206.10 #include <unistd.h>
206.11 @@ -192,7 +193,11 @@
206.12 JNU_ThrowIOExceptionWithLastError(env,
206.13 "getrlimit failed");
206.14 }
206.15 - return (jint)rlp.rlim_max;
206.16 + if (rlp.rlim_max < 0 || rlp.rlim_max > java_lang_Integer_MAX_VALUE) {
206.17 + return java_lang_Integer_MAX_VALUE;
206.18 + } else {
206.19 + return (jint)rlp.rlim_max;
206.20 + }
206.21 }
206.22
206.23 JNIEXPORT void JNICALL
207.1 --- a/src/solaris/native/sun/nio/ch/FileChannelImpl.c Thu Apr 16 17:42:00 2009 +0100
207.2 +++ b/src/solaris/native/sun/nio/ch/FileChannelImpl.c Thu Apr 16 19:10:32 2009 -0700
207.3 @@ -231,6 +231,8 @@
207.4 if (result < 0) {
207.5 if (errno == EAGAIN)
207.6 return IOS_UNAVAILABLE;
207.7 + if (errno == EOPNOTSUPP)
207.8 + return IOS_UNSUPPORTED_CASE;
207.9 if ((errno == EINVAL) && ((ssize_t)count >= 0))
207.10 return IOS_UNSUPPORTED_CASE;
207.11 if (errno == EINTR)
208.1 --- a/src/solaris/native/sun/xawt/XToolkit.c Thu Apr 16 17:42:00 2009 +0100
208.2 +++ b/src/solaris/native/sun/xawt/XToolkit.c Thu Apr 16 19:10:32 2009 -0700
208.3 @@ -182,9 +182,6 @@
208.4 (*env)->GetMethodID(env, cls, "getLocationOnScreen_NoTreeLock",
208.5 "()Ljava/awt/Point;");
208.6
208.7 - componentIDs.resetGCMID =
208.8 - (*env)->GetMethodID(env, cls, "resetGC", "()V");
208.9 -
208.10 keyclass = (*env)->FindClass(env, "java/awt/event/KeyEvent");
208.11 DASSERT (keyclass != NULL);
208.12
208.13 @@ -197,9 +194,6 @@
208.14 "Lsun/awt/AppContext;");
208.15
208.16 (*env)->DeleteLocalRef(env, keyclass);
208.17 -
208.18 - DASSERT(componentIDs.resetGCMID);
208.19 -
208.20 }
208.21
208.22
209.1 --- a/src/solaris/native/sun/xawt/XlibWrapper.c Thu Apr 16 17:42:00 2009 +0100
209.2 +++ b/src/solaris/native/sun/xawt/XlibWrapper.c Thu Apr 16 19:10:32 2009 -0700
209.3 @@ -1,5 +1,5 @@
209.4 /*
209.5 - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved.
209.6 + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
209.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
209.8 *
209.9 * This code is free software; you can redistribute it and/or modify it
209.10 @@ -42,7 +42,9 @@
209.11 #include <jvm.h>
209.12
209.13 #include <Region.h>
209.14 +#include "utility/rect.h"
209.15
209.16 +#include <X11/XKBlib.h>
209.17 #if defined(DEBUG) || defined(INTERNAL_BUILD)
209.18 static jmethodID lockIsHeldMID = NULL;
209.19
209.20 @@ -305,6 +307,20 @@
209.21
209.22 /*
209.23 * Class: XlibWrapper
209.24 + * Method: XConfigureWindow
209.25 + * Signature: (JJJJ)V
209.26 + */
209.27 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConfigureWindow
209.28 +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong value_mask,
209.29 + jlong values)
209.30 +{
209.31 + AWT_CHECK_HAVE_LOCK();
209.32 + XConfigureWindow((Display*)jlong_to_ptr(display), (Window)window,
209.33 + (unsigned int)value_mask, (XWindowChanges*)jlong_to_ptr(values));
209.34 +}
209.35 +
209.36 +/*
209.37 + * Class: XlibWrapper
209.38 * Method: XSetInputFocus
209.39 * Signature: (JJ)V
209.40 */
209.41 @@ -434,6 +450,79 @@
209.42 XSelectInput((Display *) jlong_to_ptr(display), (Window) window, mask);
209.43 }
209.44
209.45 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEvents
209.46 +(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong bits_to_change, jlong values_for_bits)
209.47 +{
209.48 + AWT_CHECK_HAVE_LOCK();
209.49 + XkbSelectEvents((Display *) jlong_to_ptr(display), (unsigned int)device,
209.50 + (unsigned long)bits_to_change,
209.51 + (unsigned long)values_for_bits);
209.52 +}
209.53 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails
209.54 +(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type, jlong bits_to_change, jlong values_for_bits)
209.55 +{
209.56 + AWT_CHECK_HAVE_LOCK();
209.57 + XkbSelectEventDetails((Display *) jlong_to_ptr(display), (unsigned int)device,
209.58 + (unsigned int) event_type,
209.59 + (unsigned long)bits_to_change,
209.60 + (unsigned long)values_for_bits);
209.61 +}
209.62 +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension
209.63 +(JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn,
209.64 + jlong error_rtrn, jlong major_in_out, jlong minor_in_out)
209.65 +{
209.66 + AWT_CHECK_HAVE_LOCK();
209.67 + return XkbQueryExtension( (Display *) jlong_to_ptr(display),
209.68 + (int *) jlong_to_ptr(opcode_rtrn),
209.69 + (int *) jlong_to_ptr(event_rtrn),
209.70 + (int *) jlong_to_ptr(error_rtrn),
209.71 + (int *) jlong_to_ptr(major_in_out),
209.72 + (int *) jlong_to_ptr(minor_in_out));
209.73 +}
209.74 +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion
209.75 +(JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out)
209.76 +{
209.77 + AWT_CHECK_HAVE_LOCK();
209.78 + *((int *)lib_major_in_out) = XkbMajorVersion;
209.79 + *((int *)lib_minor_in_out) = XkbMinorVersion;
209.80 + return XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out), (int *)jlong_to_ptr(lib_minor_in_out));
209.81 +}
209.82 +
209.83 +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap
209.84 +(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec)
209.85 +{
209.86 + AWT_CHECK_HAVE_LOCK();
209.87 + return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display),
209.88 + (unsigned int) which,
209.89 + (unsigned int) device_spec);
209.90 +}
209.91 +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap
209.92 +(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb)
209.93 +{
209.94 + AWT_CHECK_HAVE_LOCK();
209.95 + return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display),
209.96 + (unsigned int) which,
209.97 + (XkbDescPtr) jlong_to_ptr(xkb));
209.98 +}
209.99 +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard
209.100 +(JNIEnv *env, jclass clazz, jlong xkb, jlong which, jboolean free_all)
209.101 +{
209.102 + AWT_CHECK_HAVE_LOCK();
209.103 + XkbFreeKeyboard(jlong_to_ptr(xkb), (unsigned int)which, free_all);
209.104 +}
209.105 +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode
209.106 +(JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn)
209.107 +{
209.108 + Bool b;
209.109 + b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods,
209.110 + (unsigned int *)jlong_to_ptr(mods_rtrn),
209.111 + (KeySym *)jlong_to_ptr(keysym_rtrn));
209.112 + //printf("native, input: keycode:0x%0X; mods:0x%0X\n", keycode, mods);
209.113 + //printf("native, output: keysym:0x%0X; mods:0x%0X\n", *(unsigned int *)jlong_to_ptr(keysym_rtrn), *(unsigned int *)jlong_to_ptr(mods_rtrn));
209.114 + return b;
209.115 +}
209.116 +
209.117 +
209.118 /*
209.119 * Class: sun_awt_X11_XlibWrapper
209.120 * Method: XNextEvent
209.121 @@ -1658,6 +1747,39 @@
209.122 }
209.123
209.124 JNIEXPORT jint JNICALL
209.125 +Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz,
209.126 + jlong display) {
209.127 + XkbStateRec sr;
209.128 + AWT_CHECK_HAVE_LOCK();
209.129 + memset(&sr, 0, sizeof(XkbStateRec));
209.130 + XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr);
209.131 +// printf("-------------------------------------VVVV\n");
209.132 +// printf(" group:0x%0X\n",sr.group);
209.133 +// printf(" base_group:0x%0X\n",sr.base_group);
209.134 +// printf(" latched_group:0x%0X\n",sr.latched_group);
209.135 +// printf(" locked_group:0x%0X\n",sr.locked_group);
209.136 +// printf(" mods:0x%0X\n",sr.mods);
209.137 +// printf(" base_mods:0x%0X\n",sr.base_mods);
209.138 +// printf(" latched_mods:0x%0X\n",sr.latched_mods);
209.139 +// printf(" locked_mods:0x%0X\n",sr.locked_mods);
209.140 +// printf(" compat_state:0x%0X\n",sr.compat_state);
209.141 +// printf(" grab_mods:0x%0X\n",sr.grab_mods);
209.142 +// printf(" compat_grab_mods:0x%0X\n",sr.compat_grab_mods);
209.143 +// printf(" lookup_mods:0x%0X\n",sr.lookup_mods);
209.144 +// printf(" compat_lookup_mods:0x%0X\n",sr.compat_lookup_mods);
209.145 +// printf(" ptr_buttons:0x%0X\n",sr.ptr_buttons);
209.146 +// printf("-------------------------------------^^^^\n");
209.147 + return (jint)(sr.group);
209.148 +}
209.149 +JNIEXPORT jlong JNICALL
209.150 +Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz,
209.151 + jlong display, jint keycode,
209.152 + jint group, jint level) {
209.153 + AWT_CHECK_HAVE_LOCK();
209.154 + return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level);
209.155 +}
209.156 +
209.157 +JNIEXPORT jint JNICALL
209.158 Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz,
209.159 jlong display, jlong keysym) {
209.160 AWT_CHECK_HAVE_LOCK();
209.161 @@ -1945,3 +2067,77 @@
209.162 ShapeBounding, 0, 0, None, ShapeSet);
209.163 }
209.164 }
209.165 +
209.166 +/*
209.167 + * Class: XlibWrapper
209.168 + * Method: SetZOrder
209.169 + */
209.170 +
209.171 +JNIEXPORT void JNICALL
209.172 +Java_sun_awt_X11_XlibWrapper_SetZOrder
209.173 +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong above)
209.174 +{
209.175 + AWT_CHECK_HAVE_LOCK();
209.176 +
209.177 + XWindowChanges wc;
209.178 + wc.sibling = (Window)jlong_to_ptr(above);
209.179 +
209.180 + unsigned int value_mask = CWStackMode;
209.181 +
209.182 + if (above == 0) {
209.183 + wc.stack_mode = Above;
209.184 + } else {
209.185 + wc.stack_mode = Below;
209.186 + value_mask |= CWSibling;
209.187 + }
209.188 +
209.189 + XConfigureWindow((Display *)jlong_to_ptr(display),
209.190 + (Window)jlong_to_ptr(window),
209.191 + value_mask, &wc );
209.192 +}
209.193 +
209.194 +/*
209.195 + * Class: XlibWrapper
209.196 + * Method: SetBitmapShape
209.197 + */
209.198 +JNIEXPORT void JNICALL
209.199 +Java_sun_awt_X11_XlibWrapper_SetBitmapShape
209.200 +(JNIEnv *env, jclass clazz, jlong display, jlong window,
209.201 + jint width, jint height, jintArray bitmap)
209.202 +{
209.203 + jsize len;
209.204 + jint *values;
209.205 + jboolean isCopy = JNI_FALSE;
209.206 + size_t worstBufferSize = (size_t)((width / 2 + 1) * height);
209.207 + RECT_T * pRect;
209.208 +
209.209 + AWT_CHECK_HAVE_LOCK();
209.210 +
209.211 + len = (*env)->GetArrayLength(env, bitmap);
209.212 + if (len == 0 || len < width * height) {
209.213 + return;
209.214 + }
209.215 +
209.216 + values = (*env)->GetIntArrayElements(env, bitmap, &isCopy);
209.217 + if (JNU_IsNull(env, values)) {
209.218 + return;
209.219 + }
209.220 +
209.221 + pRect = (RECT_T *)malloc(worstBufferSize * sizeof(RECT_T));
209.222 +
209.223 + /* Note: the values[0] and values[1] are supposed to contain the width
209.224 + * and height (see XIconInfo.getIntData() for details). So, we do +2.
209.225 + */
209.226 + int numrects = BitmapToYXBandedRectangles(32, (int)width, (int)height,
209.227 + (unsigned char *)(values + 2), pRect);
209.228 +
209.229 + XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
209.230 + ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded);
209.231 + XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window),
209.232 + ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded);
209.233 +
209.234 + free(pRect);
209.235 +
209.236 + (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT);
209.237 +}
209.238 +
210.1 --- a/src/windows/classes/sun/awt/Win32GraphicsConfig.java Thu Apr 16 17:42:00 2009 +0100
210.2 +++ b/src/windows/classes/sun/awt/Win32GraphicsConfig.java Thu Apr 16 19:10:32 2009 -0700
210.3 @@ -1,5 +1,5 @@
210.4 /*
210.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
210.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
210.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
210.8 *
210.9 * This code is free software; you can redistribute it and/or modify it
210.10 @@ -331,4 +331,12 @@
210.11 }
210.12 // the rest of the flip actions are not supported
210.13 }
210.14 +
210.15 + /*
210.16 + @Override
210.17 + */
210.18 + public boolean isTranslucencyCapable() {
210.19 + //XXX: worth checking if 8-bit? Anyway, it doesn't hurt.
210.20 + return true;
210.21 + }
210.22 }
211.1 --- a/src/windows/classes/sun/awt/Win32GraphicsDevice.java Thu Apr 16 17:42:00 2009 +0100
211.2 +++ b/src/windows/classes/sun/awt/Win32GraphicsDevice.java Thu Apr 16 19:10:32 2009 -0700
211.3 @@ -380,7 +380,6 @@
211.4
211.5 // fix for 4868278
211.6 peer.updateGC();
211.7 - peer.resetTargetGC();
211.8 }
211.9 }
211.10
212.1 --- a/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java Thu Apr 16 17:42:00 2009 +0100
212.2 +++ b/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java Thu Apr 16 19:10:32 2009 -0700
212.3 @@ -1,5 +1,5 @@
212.4 /*
212.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
212.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
212.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
212.8 *
212.9 * This code is free software; you can redistribute it and/or modify it
212.10 @@ -398,4 +398,11 @@
212.11 public boolean isDisplayLocal() {
212.12 return true;
212.13 }
212.14 +
212.15 + /**
212.16 + * Used to find out if the OS is Windows Vista or later.
212.17 + *
212.18 + * @return {@code true} if the OS is Vista or later, {@code false} otherwise
212.19 + */
212.20 + public static native boolean isVistaOS();
212.21 }
213.1 --- a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Apr 16 17:42:00 2009 +0100
213.2 +++ b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Apr 16 19:10:32 2009 -0700
213.3 @@ -32,6 +32,7 @@
213.4 import java.io.FileNotFoundException;
213.5 import java.io.IOException;
213.6 import java.util.*;
213.7 +import java.util.concurrent.*;
213.8 import javax.swing.SwingConstants;
213.9
213.10 // NOTE: This class supersedes Win32ShellFolder, which was removed from
213.11 @@ -184,15 +185,20 @@
213.12 boolean disposed;
213.13 public void dispose() {
213.14 if (disposed) return;
213.15 - if (relativePIDL != 0) {
213.16 - releasePIDL(relativePIDL);
213.17 - }
213.18 - if (absolutePIDL != 0) {
213.19 - releasePIDL(absolutePIDL);
213.20 - }
213.21 - if (pIShellFolder != 0) {
213.22 - releaseIShellFolder(pIShellFolder);
213.23 - }
213.24 + ShellFolder.getInvoker().invoke(new Callable<Void>() {
213.25 + public Void call() throws Exception {
213.26 + if (relativePIDL != 0) {
213.27 + releasePIDL(relativePIDL);
213.28 + }
213.29 + if (absolutePIDL != 0) {
213.30 + releasePIDL(absolutePIDL);
213.31 + }
213.32 + if (pIShellFolder != 0) {
213.33 + releaseIShellFolder(pIShellFolder);
213.34 + }
213.35 + return null;
213.36 + }
213.37 + });
213.38 disposed = true;
213.39 }
213.40 }
213.41 @@ -218,50 +224,59 @@
213.42 */
213.43 private boolean isPersonal;
213.44
213.45 + private static String composePathForCsidl(int csidl) throws IOException {
213.46 + String path = getFileSystemPath(csidl);
213.47 + return path == null
213.48 + ? ("ShellFolder: 0x" + Integer.toHexString(csidl))
213.49 + : path;
213.50 + }
213.51
213.52 /**
213.53 * Create a system special shell folder, such as the
213.54 * desktop or Network Neighborhood.
213.55 */
213.56 - Win32ShellFolder2(int csidl) throws IOException {
213.57 + Win32ShellFolder2(final int csidl) throws IOException {
213.58 // Desktop is parent of DRIVES and NETWORK, not necessarily
213.59 // other special shell folders.
213.60 - super(null,
213.61 - (getFileSystemPath(csidl) == null)
213.62 - ? ("ShellFolder: 0x"+Integer.toHexString(csidl)) : getFileSystemPath(csidl));
213.63 - if (csidl == DESKTOP) {
213.64 - initDesktop();
213.65 - } else {
213.66 - initSpecial(getDesktop().getIShellFolder(), csidl);
213.67 - // At this point, the native method initSpecial() has set our relativePIDL
213.68 - // relative to the Desktop, which may not be our immediate parent. We need
213.69 - // to traverse this ID list and break it into a chain of shell folders from
213.70 - // the top, with each one having an immediate parent and a relativePIDL
213.71 - // relative to that parent.
213.72 - long pIDL = disposer.relativePIDL;
213.73 - parent = getDesktop();
213.74 - while (pIDL != 0) {
213.75 - // Get a child pidl relative to 'parent'
213.76 - long childPIDL = copyFirstPIDLEntry(pIDL);
213.77 - if (childPIDL != 0) {
213.78 - // Get a handle to the the rest of the ID list
213.79 - // i,e, parent's grandchilren and down
213.80 - pIDL = getNextPIDLEntry(pIDL);
213.81 - if (pIDL != 0) {
213.82 - // Now we know that parent isn't immediate to 'this' because it
213.83 - // has a continued ID list. Create a shell folder for this child
213.84 - // pidl and make it the new 'parent'.
213.85 - parent = new Win32ShellFolder2((Win32ShellFolder2)parent, childPIDL);
213.86 - } else {
213.87 - // No grandchildren means we have arrived at the parent of 'this',
213.88 - // and childPIDL is directly relative to parent.
213.89 - disposer.relativePIDL = childPIDL;
213.90 + super(null, composePathForCsidl(csidl));
213.91 + ShellFolder.getInvoker().invoke(new Callable<Void>() {
213.92 + public Void call() throws Exception {
213.93 + if (csidl == DESKTOP) {
213.94 + initDesktop();
213.95 + } else {
213.96 + initSpecial(getDesktop().getIShellFolder(), csidl);
213.97 + // At this point, the native method initSpecial() has set our relativePIDL
213.98 + // relative to the Desktop, which may not be our immediate parent. We need
213.99 + // to traverse this ID list and break it into a chain of shell folders from
213.100 + // the top, with each one having an immediate parent and a relativePIDL
213.101 + // relative to that parent.
213.102 + long pIDL = disposer.relativePIDL;
213.103 + parent = getDesktop();
213.104 + while (pIDL != 0) {
213.105 + // Get a child pidl relative to 'parent'
213.106 + long childPIDL = copyFirstPIDLEntry(pIDL);
213.107 + if (childPIDL != 0) {
213.108 + // Get a handle to the the rest of the ID list
213.109 + // i,e, parent's grandchilren and down
213.110 + pIDL = getNextPIDLEntry(pIDL);
213.111 + if (pIDL != 0) {
213.112 + // Now we know that parent isn't immediate to 'this' because it
213.113 + // has a continued ID list. Create a shell folder for this child
213.114 + // pidl and make it the new 'parent'.
213.115 + parent = new Win32ShellFolder2((Win32ShellFolder2) parent, childPIDL);
213.116 + } else {
213.117 + // No grandchildren means we have arrived at the parent of 'this',
213.118 + // and childPIDL is directly relative to parent.
213.119 + disposer.relativePIDL = childPIDL;
213.120 + }
213.121 + } else {
213.122 + break;
213.123 + }
213.124 }
213.125 - } else {
213.126 - break;
213.127 }
213.128 + return null;
213.129 }
213.130 - }
213.131 + });
213.132
213.133 sun.java2d.Disposer.addRecord(this, disposer);
213.134 }
213.135 @@ -281,17 +296,26 @@
213.136 /**
213.137 * Creates a shell folder with a parent and relative PIDL
213.138 */
213.139 - Win32ShellFolder2(Win32ShellFolder2 parent, long relativePIDL) {
213.140 - super(parent, getFileSystemPath(parent.getIShellFolder(), relativePIDL));
213.141 + Win32ShellFolder2(final Win32ShellFolder2 parent, final long relativePIDL) {
213.142 + super(parent,
213.143 + ShellFolder.getInvoker().invoke(new Callable<String>() {
213.144 + public String call() throws Exception {
213.145 + return getFileSystemPath(parent.getIShellFolder(), relativePIDL);
213.146 + }
213.147 + })
213.148 + );
213.149 this.disposer.relativePIDL = relativePIDL;
213.150 getAbsolutePath();
213.151 sun.java2d.Disposer.addRecord(this, disposer);
213.152 }
213.153
213.154 // Initializes the desktop shell folder
213.155 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.156 private native void initDesktop();
213.157 +
213.158 // Initializes a special, non-file system shell folder
213.159 // from one of the above constants
213.160 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.161 private native void initSpecial(long desktopIShellFolder, int csidl);
213.162
213.163 /** Marks this folder as being the My Documents (Personal) folder */
213.164 @@ -311,26 +335,30 @@
213.165 * drive (normally "C:\").
213.166 */
213.167 protected Object writeReplace() throws java.io.ObjectStreamException {
213.168 - if (isFileSystem()) {
213.169 - return new File(getPath());
213.170 - } else {
213.171 - Win32ShellFolder2 drives = Win32ShellFolderManager2.getDrives();
213.172 - if (drives != null) {
213.173 - File[] driveRoots = drives.listFiles();
213.174 - if (driveRoots != null) {
213.175 - for (int i = 0; i < driveRoots.length; i++) {
213.176 - if (driveRoots[i] instanceof Win32ShellFolder2) {
213.177 - Win32ShellFolder2 sf = (Win32ShellFolder2)driveRoots[i];
213.178 - if (sf.isFileSystem() && !sf.hasAttribute(ATTRIB_REMOVABLE)) {
213.179 - return new File(sf.getPath());
213.180 + return ShellFolder.getInvoker().invoke(new Callable<File>() {
213.181 + public File call() throws Exception {
213.182 + if (isFileSystem()) {
213.183 + return new File(getPath());
213.184 + } else {
213.185 + Win32ShellFolder2 drives = Win32ShellFolderManager2.getDrives();
213.186 + if (drives != null) {
213.187 + File[] driveRoots = drives.listFiles();
213.188 + if (driveRoots != null) {
213.189 + for (int i = 0; i < driveRoots.length; i++) {
213.190 + if (driveRoots[i] instanceof Win32ShellFolder2) {
213.191 + Win32ShellFolder2 sf = (Win32ShellFolder2) driveRoots[i];
213.192 + if (sf.isFileSystem() && !sf.hasAttribute(ATTRIB_REMOVABLE)) {
213.193 + return new File(sf.getPath());
213.194 + }
213.195 + }
213.196 }
213.197 }
213.198 }
213.199 + // Ouch, we have no hard drives. Return something "valid" anyway.
213.200 + return new File("C:\\");
213.201 }
213.202 }
213.203 - // Ouch, we have no hard drives. Return something "valid" anyway.
213.204 - return new File("C:\\");
213.205 - }
213.206 + });
213.207 }
213.208
213.209
213.210 @@ -364,6 +392,7 @@
213.211 static native void releasePIDL(long pIDL);
213.212
213.213 // Release an IShellFolder object
213.214 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.215 private static native void releaseIShellFolder(long pIShellFolder);
213.216
213.217 /**
213.218 @@ -371,18 +400,28 @@
213.219 */
213.220 public long getIShellFolder() {
213.221 if (disposer.pIShellFolder == 0) {
213.222 - assert(isDirectory());
213.223 - assert(parent != null);
213.224 - long parentIShellFolder = getParentIShellFolder();
213.225 - if (parentIShellFolder == 0) {
213.226 - throw new InternalError("Parent IShellFolder was null for " + getAbsolutePath());
213.227 - }
213.228 - // We are a directory with a parent and a relative PIDL.
213.229 - // We want to bind to the parent so we get an IShellFolder instance associated with us.
213.230 - disposer.pIShellFolder = bindToObject(parentIShellFolder, disposer.relativePIDL);
213.231 - if (disposer.pIShellFolder == 0) {
213.232 - throw new InternalError("Unable to bind " + getAbsolutePath() + " to parent");
213.233 - }
213.234 + disposer.pIShellFolder =
213.235 + ShellFolder.getInvoker().invoke(new Callable<Long>() {
213.236 + public Long call() throws Exception {
213.237 + assert(isDirectory());
213.238 + assert(parent != null);
213.239 + long parentIShellFolder = getParentIShellFolder();
213.240 + if (parentIShellFolder == 0) {
213.241 + throw new InternalError("Parent IShellFolder was null for "
213.242 + + getAbsolutePath());
213.243 + }
213.244 + // We are a directory with a parent and a relative PIDL.
213.245 + // We want to bind to the parent so we get an
213.246 + // IShellFolder instance associated with us.
213.247 + long pIShellFolder = bindToObject(parentIShellFolder,
213.248 + disposer.relativePIDL);
213.249 + if (pIShellFolder == 0) {
213.250 + throw new InternalError("Unable to bind "
213.251 + + getAbsolutePath() + " to parent");
213.252 + }
213.253 + return pIShellFolder;
213.254 + }
213.255 + });
213.256 }
213.257 return disposer.pIShellFolder;
213.258 }
213.259 @@ -472,24 +511,42 @@
213.260 return false;
213.261 }
213.262
213.263 - private static boolean pidlsEqual(long pIShellFolder, long pidl1, long pidl2) {
213.264 - return (compareIDs(pIShellFolder, pidl1, pidl2) == 0);
213.265 + private static boolean pidlsEqual(final long pIShellFolder, final long pidl1, final long pidl2) {
213.266 + return ShellFolder.getInvoker().invoke(new Callable<Boolean>() {
213.267 + public Boolean call() throws Exception {
213.268 + return (compareIDs(pIShellFolder, pidl1, pidl2) == 0);
213.269 + }
213.270 + });
213.271 }
213.272 +
213.273 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.274 private static native int compareIDs(long pParentIShellFolder, long pidl1, long pidl2);
213.275
213.276 + private Boolean cachedIsFileSystem;
213.277 +
213.278 /**
213.279 * @return Whether this is a file system shell folder
213.280 */
213.281 - public boolean isFileSystem() {
213.282 - return hasAttribute(ATTRIB_FILESYSTEM);
213.283 + public synchronized boolean isFileSystem() {
213.284 + if (cachedIsFileSystem == null) {
213.285 + cachedIsFileSystem = hasAttribute(ATTRIB_FILESYSTEM);
213.286 + }
213.287 +
213.288 + return cachedIsFileSystem;
213.289 }
213.290
213.291 /**
213.292 * Return whether the given attribute flag is set for this object
213.293 */
213.294 - public boolean hasAttribute(int attribute) {
213.295 - // Caching at this point doesn't seem to be cost efficient
213.296 - return (getAttributes0(getParentIShellFolder(), getRelativePIDL(), attribute) & attribute) != 0;
213.297 + public boolean hasAttribute(final int attribute) {
213.298 + return ShellFolder.getInvoker().invoke(new Callable<Boolean>() {
213.299 + public Boolean call() throws Exception {
213.300 + // Caching at this point doesn't seem to be cost efficient
213.301 + return (getAttributes0(getParentIShellFolder(),
213.302 + getRelativePIDL(), attribute)
213.303 + & attribute) != 0;
213.304 + }
213.305 + });
213.306 }
213.307
213.308 /**
213.309 @@ -498,26 +555,42 @@
213.310 * Could plausibly be used for attribute caching but have to be
213.311 * very careful not to touch network drives and file system roots
213.312 * with a full attrsMask
213.313 + * NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.314 */
213.315 +
213.316 private static native int getAttributes0(long pParentIShellFolder, long pIDL, int attrsMask);
213.317
213.318 // Return the path to the underlying file system object
213.319 - private static String getFileSystemPath(long parentIShellFolder, long relativePIDL) {
213.320 - int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER;
213.321 - if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() &&
213.322 - getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) {
213.323 + private static String getFileSystemPath(final long parentIShellFolder, final long relativePIDL) {
213.324 + return ShellFolder.getInvoker().invoke(new Callable<String>() {
213.325 + public String call() throws Exception {
213.326 + int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER;
213.327 + if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() &&
213.328 + getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) {
213.329
213.330 - String s =
213.331 - getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(),
213.332 - getLinkLocation(parentIShellFolder, relativePIDL, false));
213.333 - if (s != null && s.startsWith("\\\\")) {
213.334 - return s;
213.335 + String s =
213.336 + getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(),
213.337 + getLinkLocation(parentIShellFolder, relativePIDL, false));
213.338 + if (s != null && s.startsWith("\\\\")) {
213.339 + return s;
213.340 + }
213.341 + }
213.342 + return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING);
213.343 }
213.344 - }
213.345 - return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_NORMAL | SHGDN_FORPARSING);
213.346 + });
213.347 }
213.348 +
213.349 // Needs to be accessible to Win32ShellFolderManager2
213.350 - static native String getFileSystemPath(int csidl) throws IOException;
213.351 + static String getFileSystemPath(final int csidl) throws IOException {
213.352 + return ShellFolder.getInvoker().invoke(new Callable<String>() {
213.353 + public String call() throws Exception {
213.354 + return getFileSystemPath0(csidl);
213.355 + }
213.356 + });
213.357 + }
213.358 +
213.359 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.360 + private static native String getFileSystemPath0(int csidl) throws IOException;
213.361
213.362 // Return whether the path is a network root.
213.363 // Path is assumed to be non-null
213.364 @@ -557,24 +630,33 @@
213.365 */
213.366 // Returns an IEnumIDList interface for an IShellFolder. The value
213.367 // returned must be released using releaseEnumObjects().
213.368 - private long getEnumObjects(long pIShellFolder, boolean includeHiddenFiles) {
213.369 - boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder());
213.370 - return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles);
213.371 + private long getEnumObjects(long pIShellFolder, final boolean includeHiddenFiles) {
213.372 + final boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder());
213.373 + return ShellFolder.getInvoker().invoke(new Callable<Long>() {
213.374 + public Long call() throws Exception {
213.375 + return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles);
213.376 + }
213.377 + });
213.378 }
213.379 +
213.380 // Returns an IEnumIDList interface for an IShellFolder. The value
213.381 // returned must be released using releaseEnumObjects().
213.382 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.383 private native long getEnumObjects(long pIShellFolder, boolean isDesktop,
213.384 boolean includeHiddenFiles);
213.385 // Returns the next sequential child as a relative PIDL
213.386 // from an IEnumIDList interface. The value returned must
213.387 // be released using releasePIDL().
213.388 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.389 private native long getNextChild(long pEnumObjects);
213.390 // Releases the IEnumIDList interface
213.391 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.392 private native void releaseEnumObjects(long pEnumObjects);
213.393
213.394 // Returns the IShellFolder of a child from a parent IShellFolder
213.395 // and a relative PIDL. The value returned must be released
213.396 // using releaseIShellFolder().
213.397 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.398 private static native long bindToObject(long parentIShellFolder, long pIDL);
213.399
213.400 /**
213.401 @@ -582,60 +664,64 @@
213.402 * object. The array will be empty if the folder is empty. Returns
213.403 * <code>null</code> if this shellfolder does not denote a directory.
213.404 */
213.405 - public File[] listFiles(boolean includeHiddenFiles) {
213.406 + public File[] listFiles(final boolean includeHiddenFiles) {
213.407 SecurityManager security = System.getSecurityManager();
213.408 if (security != null) {
213.409 security.checkRead(getPath());
213.410 }
213.411 - if (!isDirectory()) {
213.412 - return null;
213.413 - }
213.414 - // Links to directories are not directories and cannot be parents.
213.415 - // This does not apply to folders in My Network Places (NetHood)
213.416 - // because they are both links and real directories!
213.417 - if (isLink() && !hasAttribute(ATTRIB_FOLDER)) {
213.418 - return new File[0];
213.419 - }
213.420
213.421 - Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop();
213.422 - Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal();
213.423 -
213.424 - // If we are a directory, we have a parent and (at least) a
213.425 - // relative PIDL. We must first ensure we are bound to the
213.426 - // parent so we have an IShellFolder to query.
213.427 - long pIShellFolder = getIShellFolder();
213.428 - // Now we can enumerate the objects in this folder.
213.429 - ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
213.430 - long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles);
213.431 - if (pEnumObjects != 0) {
213.432 - long childPIDL;
213.433 - int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
213.434 - do {
213.435 - if (Thread.currentThread().isInterrupted()) {
213.436 + return ShellFolder.getInvoker().invoke(new Callable<File[]>() {
213.437 + public File[] call() throws Exception {
213.438 + if (!isDirectory()) {
213.439 + return null;
213.440 + }
213.441 + // Links to directories are not directories and cannot be parents.
213.442 + // This does not apply to folders in My Network Places (NetHood)
213.443 + // because they are both links and real directories!
213.444 + if (isLink() && !hasAttribute(ATTRIB_FOLDER)) {
213.445 return new File[0];
213.446 }
213.447 - childPIDL = getNextChild(pEnumObjects);
213.448 - boolean releasePIDL = true;
213.449 - if (childPIDL != 0 &&
213.450 - (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) {
213.451 - Win32ShellFolder2 childFolder = null;
213.452 - if (this.equals(desktop)
213.453 - && personal != null
213.454 - && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) {
213.455 - childFolder = personal;
213.456 - } else {
213.457 - childFolder = new Win32ShellFolder2(this, childPIDL);
213.458 - releasePIDL = false;
213.459 - }
213.460 - list.add(childFolder);
213.461 +
213.462 + Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop();
213.463 + Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal();
213.464 +
213.465 + // If we are a directory, we have a parent and (at least) a
213.466 + // relative PIDL. We must first ensure we are bound to the
213.467 + // parent so we have an IShellFolder to query.
213.468 + long pIShellFolder = getIShellFolder();
213.469 + // Now we can enumerate the objects in this folder.
213.470 + ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
213.471 + long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles);
213.472 + if (pEnumObjects != 0) {
213.473 + long childPIDL;
213.474 + int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
213.475 + do {
213.476 + childPIDL = getNextChild(pEnumObjects);
213.477 + boolean releasePIDL = true;
213.478 + if (childPIDL != 0 &&
213.479 + (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) {
213.480 + Win32ShellFolder2 childFolder;
213.481 + if (Win32ShellFolder2.this.equals(desktop)
213.482 + && personal != null
213.483 + && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) {
213.484 + childFolder = personal;
213.485 + } else {
213.486 + childFolder = new Win32ShellFolder2(Win32ShellFolder2.this, childPIDL);
213.487 + releasePIDL = false;
213.488 + }
213.489 + list.add(childFolder);
213.490 + }
213.491 + if (releasePIDL) {
213.492 + releasePIDL(childPIDL);
213.493 + }
213.494 + } while (childPIDL != 0 && !Thread.currentThread().isInterrupted());
213.495 + releaseEnumObjects(pEnumObjects);
213.496 }
213.497 - if (releasePIDL) {
213.498 - releasePIDL(childPIDL);
213.499 - }
213.500 - } while (childPIDL != 0);
213.501 - releaseEnumObjects(pEnumObjects);
213.502 - }
213.503 - return list.toArray(new ShellFolder[list.size()]);
213.504 + return Thread.currentThread().isInterrupted()
213.505 + ? new File[0]
213.506 + : list.toArray(new ShellFolder[list.size()]);
213.507 + }
213.508 + });
213.509 }
213.510
213.511
213.512 @@ -644,33 +730,43 @@
213.513 *
213.514 * @return The child shellfolder, or null if not found.
213.515 */
213.516 - Win32ShellFolder2 getChildByPath(String filePath) {
213.517 - long pIShellFolder = getIShellFolder();
213.518 - long pEnumObjects = getEnumObjects(pIShellFolder, true);
213.519 - Win32ShellFolder2 child = null;
213.520 - long childPIDL;
213.521 + Win32ShellFolder2 getChildByPath(final String filePath) {
213.522 + return ShellFolder.getInvoker().invoke(new Callable<Win32ShellFolder2>() {
213.523 + public Win32ShellFolder2 call() throws Exception {
213.524 + long pIShellFolder = getIShellFolder();
213.525 + long pEnumObjects = getEnumObjects(pIShellFolder, true);
213.526 + Win32ShellFolder2 child = null;
213.527 + long childPIDL = 0;
213.528
213.529 - while ((childPIDL = getNextChild(pEnumObjects)) != 0) {
213.530 - if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) {
213.531 - String path = getFileSystemPath(pIShellFolder, childPIDL);
213.532 - if (path != null && path.equalsIgnoreCase(filePath)) {
213.533 - long childIShellFolder = bindToObject(pIShellFolder, childPIDL);
213.534 - child = new Win32ShellFolder2(this, childIShellFolder, childPIDL, path);
213.535 - break;
213.536 + while ((childPIDL = getNextChild(pEnumObjects)) != 0) {
213.537 + if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) {
213.538 + String path = getFileSystemPath(pIShellFolder, childPIDL);
213.539 + if (path != null && path.equalsIgnoreCase(filePath)) {
213.540 + long childIShellFolder = bindToObject(pIShellFolder, childPIDL);
213.541 + child = new Win32ShellFolder2(Win32ShellFolder2.this,
213.542 + childIShellFolder, childPIDL, path);
213.543 + break;
213.544 + }
213.545 + }
213.546 + releasePIDL(childPIDL);
213.547 }
213.548 + releaseEnumObjects(pEnumObjects);
213.549 + return child;
213.550 }
213.551 - releasePIDL(childPIDL);
213.552 - }
213.553 - releaseEnumObjects(pEnumObjects);
213.554 - return child;
213.555 + });
213.556 }
213.557
213.558 + private Boolean cachedIsLink;
213.559
213.560 /**
213.561 * @return Whether this shell folder is a link
213.562 */
213.563 - public boolean isLink() {
213.564 - return hasAttribute(ATTRIB_LINK);
213.565 + public synchronized boolean isLink() {
213.566 + if (cachedIsLink == null) {
213.567 + cachedIsLink = hasAttribute(ATTRIB_LINK);
213.568 + }
213.569 +
213.570 + return cachedIsLink;
213.571 }
213.572
213.573 /**
213.574 @@ -682,6 +778,7 @@
213.575
213.576
213.577 // Return the link location of a shell folder
213.578 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.579 private static native long getLinkLocation(long parentIShellFolder,
213.580 long relativePIDL, boolean resolve);
213.581
213.582 @@ -693,38 +790,52 @@
213.583 return getLinkLocation(true);
213.584 }
213.585
213.586 - private ShellFolder getLinkLocation(boolean resolve) {
213.587 - if (!isLink()) {
213.588 - return null;
213.589 - }
213.590 + private ShellFolder getLinkLocation(final boolean resolve) {
213.591 + return ShellFolder.getInvoker().invoke(new Callable<ShellFolder>() {
213.592 + public ShellFolder call() throws Exception {
213.593 + if (!isLink()) {
213.594 + return null;
213.595 + }
213.596
213.597 - ShellFolder location = null;
213.598 - long linkLocationPIDL = getLinkLocation(getParentIShellFolder(),
213.599 - getRelativePIDL(), resolve);
213.600 - if (linkLocationPIDL != 0) {
213.601 - try {
213.602 - location =
213.603 - Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(),
213.604 - linkLocationPIDL);
213.605 - } catch (InternalError e) {
213.606 - // Could be a link to a non-bindable object, such as a network connection
213.607 - // TODO: getIShellFolder() should throw FileNotFoundException instead
213.608 + ShellFolder location = null;
213.609 + long linkLocationPIDL = getLinkLocation(getParentIShellFolder(),
213.610 + getRelativePIDL(), resolve);
213.611 + if (linkLocationPIDL != 0) {
213.612 + try {
213.613 + location =
213.614 + Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(),
213.615 + linkLocationPIDL);
213.616 + } catch (InternalError e) {
213.617 + // Could be a link to a non-bindable object, such as a network connection
213.618 + // TODO: getIShellFolder() should throw FileNotFoundException instead
213.619 + }
213.620 + }
213.621 + return location;
213.622 }
213.623 - }
213.624 - return location;
213.625 + });
213.626 }
213.627
213.628 // Parse a display name into a PIDL relative to the current IShellFolder.
213.629 - long parseDisplayName(String name) throws FileNotFoundException {
213.630 + long parseDisplayName(final String name) throws FileNotFoundException {
213.631 try {
213.632 - return parseDisplayName0(getIShellFolder(), name);
213.633 - } catch (IOException e) {
213.634 - throw new FileNotFoundException("Could not find file " + name);
213.635 + return ShellFolder.getInvoker().invoke(new Callable<Long>() {
213.636 + public Long call() throws Exception {
213.637 + return parseDisplayName0(getIShellFolder(), name);
213.638 + }
213.639 + });
213.640 + } catch (RuntimeException e) {
213.641 + if (e.getCause() instanceof IOException) {
213.642 + throw new FileNotFoundException("Could not find file " + name);
213.643 + }
213.644 + throw e;
213.645 }
213.646 }
213.647 +
213.648 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.649 private static native long parseDisplayName0(long pIShellFolder, String name) throws IOException;
213.650
213.651 // Return the display name of a shell folder
213.652 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.653 private static native String getDisplayNameOf(long parentIShellFolder,
213.654 long relativePIDL,
213.655 int attrs);
213.656 @@ -734,12 +845,19 @@
213.657 */
213.658 public String getDisplayName() {
213.659 if (displayName == null) {
213.660 - displayName = getDisplayNameOf(getParentIShellFolder(), getRelativePIDL(), SHGDN_NORMAL);
213.661 + displayName =
213.662 + ShellFolder.getInvoker().invoke(new Callable<String>() {
213.663 + public String call() throws Exception {
213.664 + return getDisplayNameOf(getParentIShellFolder(),
213.665 + getRelativePIDL(), SHGDN_NORMAL);
213.666 + }
213.667 + });
213.668 }
213.669 return displayName;
213.670 }
213.671
213.672 // Return the folder type of a shell folder
213.673 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.674 private static native String getFolderType(long pIDL);
213.675
213.676 /**
213.677 @@ -747,7 +865,13 @@
213.678 */
213.679 public String getFolderType() {
213.680 if (folderType == null) {
213.681 - folderType = getFolderType(getAbsolutePIDL());
213.682 + final long absolutePIDL = getAbsolutePIDL();
213.683 + folderType =
213.684 + ShellFolder.getInvoker().invoke(new Callable<String>() {
213.685 + public String call() throws Exception {
213.686 + return getFolderType(absolutePIDL);
213.687 + }
213.688 + });
213.689 }
213.690 return folderType;
213.691 }
213.692 @@ -774,11 +898,16 @@
213.693 private static Map smallLinkedSystemImages = new HashMap();
213.694 private static Map largeLinkedSystemImages = new HashMap();
213.695
213.696 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.697 private static native long getIShellIcon(long pIShellFolder);
213.698 +
213.699 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.700 private static native int getIconIndex(long parentIShellIcon, long relativePIDL);
213.701
213.702 // Return the icon of a file system shell folder in the form of an HICON
213.703 private static native long getIcon(String absolutePath, boolean getLargeIcon);
213.704 +
213.705 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.706 private static native long extractIcon(long parentIShellFolder, long relativePIDL,
213.707 boolean getLargeIcon);
213.708
213.709 @@ -799,7 +928,12 @@
213.710
213.711 private long getIShellIcon() {
213.712 if (pIShellIcon == -1L) {
213.713 - pIShellIcon = getIShellIcon(getIShellFolder());
213.714 + pIShellIcon =
213.715 + ShellFolder.getInvoker().invoke(new Callable<Long>() {
213.716 + public Long call() throws Exception {
213.717 + return getIShellIcon(getIShellFolder());
213.718 + }
213.719 + });
213.720 }
213.721 return pIShellIcon;
213.722 }
213.723 @@ -850,50 +984,60 @@
213.724 /**
213.725 * @return The icon image used to display this shell folder
213.726 */
213.727 - public Image getIcon(boolean getLargeIcon) {
213.728 + public Image getIcon(final boolean getLargeIcon) {
213.729 Image icon = getLargeIcon ? largeIcon : smallIcon;
213.730 if (icon == null) {
213.731 - long parentIShellIcon = (parent != null) ? ((Win32ShellFolder2)parent).getIShellIcon() : 0L;
213.732 - long relativePIDL = getRelativePIDL();
213.733 + icon =
213.734 + ShellFolder.getInvoker().invoke(new Callable<Image>() {
213.735 + public Image call() throws Exception {
213.736 + Image newIcon = null;
213.737 + if (isFileSystem()) {
213.738 + long parentIShellIcon = (parent != null)
213.739 + ? ((Win32ShellFolder2) parent).getIShellIcon()
213.740 + : 0L;
213.741 + long relativePIDL = getRelativePIDL();
213.742
213.743 - if (isFileSystem()) {
213.744 - // These are cached per type (using the index in the system image list)
213.745 - int index = getIconIndex(parentIShellIcon, relativePIDL);
213.746 - if (index > 0) {
213.747 - Map imageCache;
213.748 - if (isLink()) {
213.749 - imageCache = getLargeIcon ? largeLinkedSystemImages : smallLinkedSystemImages;
213.750 - } else {
213.751 - imageCache = getLargeIcon ? largeSystemImages : smallSystemImages;
213.752 + // These are cached per type (using the index in the system image list)
213.753 + int index = getIconIndex(parentIShellIcon, relativePIDL);
213.754 + if (index > 0) {
213.755 + Map imageCache;
213.756 + if (isLink()) {
213.757 + imageCache = getLargeIcon ? largeLinkedSystemImages : smallLinkedSystemImages;
213.758 + } else {
213.759 + imageCache = getLargeIcon ? largeSystemImages : smallSystemImages;
213.760 + }
213.761 + newIcon = (Image) imageCache.get(Integer.valueOf(index));
213.762 + if (newIcon == null) {
213.763 + long hIcon = getIcon(getAbsolutePath(), getLargeIcon);
213.764 + newIcon = makeIcon(hIcon, getLargeIcon);
213.765 + disposeIcon(hIcon);
213.766 + if (newIcon != null) {
213.767 + imageCache.put(Integer.valueOf(index), newIcon);
213.768 + }
213.769 + }
213.770 + }
213.771 + }
213.772 +
213.773 + if (newIcon == null) {
213.774 + // These are only cached per object
213.775 + long hIcon = extractIcon(getParentIShellFolder(),
213.776 + getRelativePIDL(), getLargeIcon);
213.777 + newIcon = makeIcon(hIcon, getLargeIcon);
213.778 + disposeIcon(hIcon);
213.779 + }
213.780 +
213.781 + if (newIcon == null) {
213.782 + newIcon = Win32ShellFolder2.super.getIcon(getLargeIcon);
213.783 + }
213.784 + return newIcon;
213.785 }
213.786 - icon = (Image)imageCache.get(Integer.valueOf(index));
213.787 - if (icon == null) {
213.788 - long hIcon = getIcon(getAbsolutePath(), getLargeIcon);
213.789 - icon = makeIcon(hIcon, getLargeIcon);
213.790 - disposeIcon(hIcon);
213.791 - if (icon != null) {
213.792 - imageCache.put(Integer.valueOf(index), icon);
213.793 - }
213.794 - }
213.795 - }
213.796 - }
213.797 -
213.798 - if (icon == null) {
213.799 - // These are only cached per object
213.800 - long hIcon = extractIcon(getParentIShellFolder(), getRelativePIDL(), getLargeIcon);
213.801 - icon = makeIcon(hIcon, getLargeIcon);
213.802 - disposeIcon(hIcon);
213.803 - }
213.804 -
213.805 + });
213.806 if (getLargeIcon) {
213.807 largeIcon = icon;
213.808 } else {
213.809 smallIcon = icon;
213.810 }
213.811 }
213.812 - if (icon == null) {
213.813 - icon = super.getIcon(getLargeIcon);
213.814 - }
213.815 return icon;
213.816 }
213.817
213.818 @@ -969,39 +1113,50 @@
213.819 private static final int LVCFMT_CENTER = 2;
213.820
213.821 public ShellFolderColumnInfo[] getFolderColumns() {
213.822 - ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder());
213.823 + return ShellFolder.getInvoker().invoke(new Callable<ShellFolderColumnInfo[]>() {
213.824 + public ShellFolderColumnInfo[] call() throws Exception {
213.825 + ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder());
213.826
213.827 - if (columns != null) {
213.828 - List<ShellFolderColumnInfo> notNullColumns =
213.829 - new ArrayList<ShellFolderColumnInfo>();
213.830 - for (int i = 0; i < columns.length; i++) {
213.831 - ShellFolderColumnInfo column = columns[i];
213.832 - if (column != null) {
213.833 - column.setAlignment(column.getAlignment() == LVCFMT_RIGHT
213.834 - ? SwingConstants.RIGHT
213.835 - : column.getAlignment() == LVCFMT_CENTER
213.836 - ? SwingConstants.CENTER
213.837 - : SwingConstants.LEADING);
213.838 + if (columns != null) {
213.839 + List<ShellFolderColumnInfo> notNullColumns =
213.840 + new ArrayList<ShellFolderColumnInfo>();
213.841 + for (int i = 0; i < columns.length; i++) {
213.842 + ShellFolderColumnInfo column = columns[i];
213.843 + if (column != null) {
213.844 + column.setAlignment(column.getAlignment() == LVCFMT_RIGHT
213.845 + ? SwingConstants.RIGHT
213.846 + : column.getAlignment() == LVCFMT_CENTER
213.847 + ? SwingConstants.CENTER
213.848 + : SwingConstants.LEADING);
213.849
213.850 - column.setComparator(new ColumnComparator(getIShellFolder(), i));
213.851 + column.setComparator(new ColumnComparator(getIShellFolder(), i));
213.852
213.853 - notNullColumns.add(column);
213.854 + notNullColumns.add(column);
213.855 + }
213.856 + }
213.857 + columns = new ShellFolderColumnInfo[notNullColumns.size()];
213.858 + notNullColumns.toArray(columns);
213.859 }
213.860 + return columns;
213.861 }
213.862 - columns = new ShellFolderColumnInfo[notNullColumns.size()];
213.863 - notNullColumns.toArray(columns);
213.864 - }
213.865 - return columns;
213.866 + });
213.867 }
213.868
213.869 - public Object getFolderColumnValue(int column) {
213.870 - return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column);
213.871 + public Object getFolderColumnValue(final int column) {
213.872 + return ShellFolder.getInvoker().invoke(new Callable<Object>() {
213.873 + public Object call() throws Exception {
213.874 + return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column);
213.875 + }
213.876 + });
213.877 }
213.878
213.879 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.880 private native ShellFolderColumnInfo[] doGetColumnInfo(long iShellFolder2);
213.881
213.882 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.883 private native Object doGetColumnValue(long parentIShellFolder2, long childPIDL, int columnIdx);
213.884
213.885 + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
213.886 private static native int compareIDsByColumn(long pParentIShellFolder, long pidl1, long pidl2, int columnIdx);
213.887
213.888
213.889 @@ -1020,17 +1175,20 @@
213.890 }
213.891
213.892 // compares 2 objects within this folder by the specified column
213.893 - public int compare(File o, File o1) {
213.894 - if (o instanceof Win32ShellFolder2
213.895 - && o1 instanceof Win32ShellFolder2) {
213.896 - // delegates comparison to native method
213.897 - return compareIDsByColumn(parentIShellFolder,
213.898 - ((Win32ShellFolder2) o).getRelativePIDL(),
213.899 - ((Win32ShellFolder2) o1).getRelativePIDL(),
213.900 - columnIdx);
213.901 - }
213.902 - return 0;
213.903 + public int compare(final File o, final File o1) {
213.904 + return ShellFolder.getInvoker().invoke(new Callable<Integer>() {
213.905 + public Integer call() throws Exception {
213.906 + if (o instanceof Win32ShellFolder2
213.907 + && o1 instanceof Win32ShellFolder2) {
213.908 + // delegates comparison to native method
213.909 + return compareIDsByColumn(parentIShellFolder,
213.910 + ((Win32ShellFolder2) o).getRelativePIDL(),
213.911 + ((Win32ShellFolder2) o1).getRelativePIDL(),
213.912 + columnIdx);
213.913 + }
213.914 + return 0;
213.915 + }
213.916 + });
213.917 }
213.918 }
213.919 -
213.920 }
214.1 --- a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Thu Apr 16 17:42:00 2009 +0100
214.2 +++ b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Thu Apr 16 19:10:32 2009 -0700
214.3 @@ -31,7 +31,10 @@
214.4 import java.io.FileNotFoundException;
214.5 import java.io.IOException;
214.6 import java.security.AccessController;
214.7 +import java.security.PrivilegedAction;
214.8 import java.util.*;
214.9 +import java.util.concurrent.*;
214.10 +
214.11 import sun.security.action.LoadLibraryAction;
214.12
214.13 import static sun.awt.shell.Win32ShellFolder2.*;
214.14 @@ -408,4 +411,102 @@
214.15 return name1.compareTo(name2);
214.16 }
214.17 }
214.18 +
214.19 + @Override
214.20 + protected Invoker createInvoker() {
214.21 + return new ComInvoker();
214.22 + }
214.23 +
214.24 + private static class ComInvoker extends ThreadPoolExecutor implements ThreadFactory, ShellFolder.Invoker {
214.25 + private static Thread comThread;
214.26 +
214.27 + private ComInvoker() {
214.28 + super(1, 1, 0, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>());
214.29 + allowCoreThreadTimeOut(false);
214.30 + setThreadFactory(this);
214.31 + final Runnable shutdownHook = new Runnable() {
214.32 + public void run() {
214.33 + AccessController.doPrivileged(new PrivilegedAction<Void>() {
214.34 + public Void run() {
214.35 + shutdownNow();
214.36 + return null;
214.37 + }
214.38 + });
214.39 + }
214.40 + };
214.41 + AccessController.doPrivileged(new PrivilegedAction<Void>() {
214.42 + public Void run() {
214.43 + Runtime.getRuntime().addShutdownHook(
214.44 + new Thread(shutdownHook)
214.45 + );
214.46 + return null;
214.47 + }
214.48 + });
214.49 + }
214.50 +
214.51 + public synchronized Thread newThread(final Runnable task) {
214.52 + final Runnable comRun = new Runnable() {
214.53 + public void run() {
214.54 + try {
214.55 + initializeCom();
214.56 + task.run();
214.57 + } finally {
214.58 + uninitializeCom();
214.59 + }
214.60 + }
214.61 + };
214.62 + comThread =
214.63 + AccessController.doPrivileged(
214.64 + new PrivilegedAction<Thread>() {
214.65 + public Thread run() {
214.66 + /* The thread must be a member of a thread group
214.67 + * which will not get GCed before VM exit.
214.68 + * Make its parent the top-level thread group.
214.69 + */
214.70 + ThreadGroup tg = Thread.currentThread().getThreadGroup();
214.71 + for (ThreadGroup tgn = tg;
214.72 + tgn != null;
214.73 + tg = tgn, tgn = tg.getParent());
214.74 + Thread thread = new Thread(tg, comRun, "Swing-Shell");
214.75 + thread.setDaemon(true);
214.76 + return thread;
214.77 + }
214.78 + }
214.79 + );
214.80 + return comThread;
214.81 + }
214.82 +
214.83 + public <T> T invoke(Callable<T> task) {
214.84 + try {
214.85 + T result;
214.86 + if (Thread.currentThread() == comThread) {
214.87 + // if it's already called from the COM
214.88 + // thread, we don't need to delegate the task
214.89 + result = task.call();
214.90 + } else {
214.91 + Future<T> future = submit(task);
214.92 + try {
214.93 + result = future.get();
214.94 + } catch (InterruptedException e) {
214.95 + result = null;
214.96 + future.cancel(true);
214.97 + }
214.98 + }
214.99 + return result;
214.100 + } catch (Exception e) {
214.101 + Throwable cause = (e instanceof ExecutionException) ? e.getCause() : e;
214.102 + if (cause instanceof RuntimeException) {
214.103 + throw (RuntimeException) cause;
214.104 + }
214.105 + if (cause instanceof Error) {
214.106 + throw (Error) cause;
214.107 + }
214.108 + throw new RuntimeException(cause);
214.109 + }
214.110 + }
214.111 + }
214.112 +
214.113 + static native void initializeCom();
214.114 +
214.115 + static native void uninitializeCom();
214.116 }
215.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
215.2 +++ b/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java Thu Apr 16 19:10:32 2009 -0700
215.3 @@ -0,0 +1,398 @@
215.4 +/*
215.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
215.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
215.7 + *
215.8 + * This code is free software; you can redistribute it and/or modify it
215.9 + * under the terms of the GNU General Public License version 2 only, as
215.10 + * published by the Free Software Foundation. Sun designates this
215.11 + * particular file as subject to the "Classpath" exception as provided
215.12 + * by Sun in the LICENSE file that accompanied this code.
215.13 + *
215.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
215.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
215.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
215.17 + * version 2 for more details (a copy is included in the LICENSE file that
215.18 + * accompanied this code).
215.19 + *
215.20 + * You should have received a copy of the GNU General Public License version
215.21 + * 2 along with this work; if not, write to the Free Software Foundation,
215.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
215.23 + *
215.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
215.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
215.26 + * have any questions.
215.27 + */
215.28 +package sun.awt.windows;
215.29 +
215.30 +import java.awt.AlphaComposite;
215.31 +import java.awt.Color;
215.32 +import java.awt.Graphics2D;
215.33 +import java.awt.GraphicsConfiguration;
215.34 +import java.awt.Image;
215.35 +import java.awt.Window;
215.36 +import java.awt.image.BufferedImage;
215.37 +import java.awt.image.DataBufferInt;
215.38 +import java.awt.image.VolatileImage;
215.39 +import java.lang.ref.WeakReference;
215.40 +import java.security.AccessController;
215.41 +import sun.awt.image.BufImgSurfaceData;
215.42 +import sun.java2d.DestSurfaceProvider;
215.43 +import sun.java2d.InvalidPipeException;
215.44 +import sun.java2d.Surface;
215.45 +import sun.java2d.pipe.RenderQueue;
215.46 +import sun.java2d.pipe.hw.AccelGraphicsConfig;
215.47 +import sun.java2d.pipe.hw.AccelSurface;
215.48 +import sun.security.action.GetPropertyAction;
215.49 +
215.50 +import static java.awt.image.VolatileImage.*;
215.51 +import static java.awt.Transparency.*;
215.52 +import static sun.java2d.pipe.hw.AccelSurface.*;
215.53 +import static sun.java2d.pipe.hw.ContextCapabilities.*;
215.54 +
215.55 +/**
215.56 + * This class handles the updates of the non-opaque windows.
215.57 + * The window associated with the peer is updated either given an image or
215.58 + * the window is repainted to an internal buffer which is then used to update
215.59 + * the window.
215.60 + *
215.61 + * Note: this class does not attempt to be thread safe, it is expected to be
215.62 + * called from a single thread (EDT).
215.63 + */
215.64 +public abstract class TranslucentWindowPainter {
215.65 +
215.66 + protected Window window;
215.67 + protected WWindowPeer peer;
215.68 +
215.69 + // REMIND: we probably would want to remove this later
215.70 + private static final boolean forceOpt =
215.71 + Boolean.valueOf(AccessController.doPrivileged(
215.72 + new GetPropertyAction("sun.java2d.twp.forceopt", "false")));
215.73 + private static final boolean forceSW =
215.74 + Boolean.valueOf(AccessController.doPrivileged(
215.75 + new GetPropertyAction("sun.java2d.twp.forcesw", "false")));
215.76 +
215.77 + /**
215.78 + * Creates an instance of the painter for particular peer.
215.79 + */
215.80 + public static TranslucentWindowPainter createInstance(WWindowPeer peer) {
215.81 + GraphicsConfiguration gc = peer.getGraphicsConfiguration();
215.82 + if (!forceSW && gc instanceof AccelGraphicsConfig) {
215.83 + String gcName = gc.getClass().getSimpleName();
215.84 + AccelGraphicsConfig agc = (AccelGraphicsConfig)gc;
215.85 + // this is a heuristic to check that we have a pcix board
215.86 + // (those have higher transfer rate from gpu to cpu)
215.87 + if ((agc.getContextCapabilities().getCaps() & CAPS_PS30) != 0 ||
215.88 + forceOpt)
215.89 + {
215.90 + // we check for name to avoid loading classes unnecessarily if
215.91 + // a pipeline isn't enabled
215.92 + if (gcName.startsWith("D3D")) {
215.93 + return new VIOptD3DWindowPainter(peer);
215.94 + } else if (forceOpt && gcName.startsWith("WGL")) {
215.95 + // on some boards (namely, ATI, even on pcix bus) ogl is
215.96 + // very slow reading pixels back so for now it is disabled
215.97 + // unless forced
215.98 + return new VIOptWGLWindowPainter(peer);
215.99 + }
215.100 + }
215.101 + }
215.102 + return new BIWindowPainter(peer);
215.103 + }
215.104 +
215.105 + protected TranslucentWindowPainter(WWindowPeer peer) {
215.106 + this.peer = peer;
215.107 + this.window = (Window)peer.getTarget();
215.108 + }
215.109 +
215.110 + /**
215.111 + * Creates (if needed), clears and returns the buffer for this painter.
215.112 + */
215.113 + protected abstract Image getBackBuffer();
215.114 +
215.115 + /**
215.116 + * Updates the the window associated with this painter with the contents
215.117 + * of the passed image.
215.118 + * The image can not be null, and NPE will be thrown if it is.
215.119 + */
215.120 + protected abstract boolean update(Image bb);
215.121 +
215.122 + /**
215.123 + * Flushes the resources associated with the painter. They will be
215.124 + * recreated as needed.
215.125 + */
215.126 + public abstract void flush();
215.127 +
215.128 + /**
215.129 + * Updates the window associated with the painter given the passed image.
215.130 + * If the passed image is null the painter will use its own buffer for
215.131 + * rendering the contents of the window into it and updating the window.
215.132 + *
215.133 + * If the passed buffer has dimensions different from the window, it is
215.134 + * copied into the internal buffer first and the latter is used to update
215.135 + * the window.
215.136 + *
215.137 + * @param bb the image to update the non opaque window with, or null.
215.138 + * If not null, the image must be of ARGB_PRE type.
215.139 + */
215.140 + public void updateWindow(Image bb) {
215.141 + boolean done = false;
215.142 + if (bb != null && (window.getWidth() != bb.getWidth(null) ||
215.143 + window.getHeight() != bb.getHeight(null)))
215.144 + {
215.145 + Image ourBB = getBackBuffer();
215.146 + Graphics2D g = (Graphics2D)ourBB.getGraphics();
215.147 + g.drawImage(bb, 0, 0, null);
215.148 + g.dispose();
215.149 + bb = ourBB;
215.150 + }
215.151 + do {
215.152 + if (bb == null) {
215.153 + bb = getBackBuffer();
215.154 + Graphics2D g = (Graphics2D)bb.getGraphics();
215.155 + try {
215.156 + window.paintAll(g);
215.157 + } finally {
215.158 + g.dispose();
215.159 + }
215.160 + }
215.161 +
215.162 + peer.paintAppletWarning((Graphics2D)bb.getGraphics(),
215.163 + bb.getWidth(null), bb.getHeight(null));
215.164 +
215.165 + done = update(bb);
215.166 + // in case they passed us a lost VI, next time around we'll use our
215.167 + // own bb because we can not validate and restore the contents of
215.168 + // their VI
215.169 + if (!done) {
215.170 + bb = null;
215.171 + }
215.172 + } while (!done);
215.173 + }
215.174 +
215.175 + private static final Image clearImage(Image bb) {
215.176 + Graphics2D g = (Graphics2D)bb.getGraphics();
215.177 + int w = bb.getWidth(null);
215.178 + int h = bb.getHeight(null);
215.179 +
215.180 + g.setComposite(AlphaComposite.Src);
215.181 + g.setColor(new Color(0, 0, 0, 0));
215.182 + g.fillRect(0, 0, w, h);
215.183 +
215.184 + return bb;
215.185 + }
215.186 +
215.187 + /**
215.188 + * A painter which uses BufferedImage as the internal buffer. The window
215.189 + * is painted into this buffer, and the contents then are uploaded
215.190 + * into the layered window.
215.191 + *
215.192 + * This painter handles all types of images passed to its paint(Image)
215.193 + * method (VI, BI, regular Images).
215.194 + */
215.195 + private static class BIWindowPainter extends TranslucentWindowPainter {
215.196 + private WeakReference<BufferedImage> biRef;
215.197 +
215.198 + protected BIWindowPainter(WWindowPeer peer) {
215.199 + super(peer);
215.200 + }
215.201 +
215.202 + private BufferedImage getBIBackBuffer() {
215.203 + int w = window.getWidth();
215.204 + int h = window.getHeight();
215.205 + BufferedImage bb = biRef == null ? null : biRef.get();
215.206 + if (bb == null || bb.getWidth() != w || bb.getHeight() != h) {
215.207 + if (bb != null) {
215.208 + bb.flush();
215.209 + bb = null;
215.210 + }
215.211 + bb = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE);
215.212 + biRef = new WeakReference<BufferedImage>(bb);
215.213 + }
215.214 + return (BufferedImage)clearImage(bb);
215.215 + }
215.216 +
215.217 + @Override
215.218 + protected Image getBackBuffer() {
215.219 + return getBIBackBuffer();
215.220 + }
215.221 +
215.222 + @Override
215.223 + protected boolean update(Image bb) {
215.224 + VolatileImage viBB = null;
215.225 +
215.226 + if (bb instanceof BufferedImage) {
215.227 + BufferedImage bi = (BufferedImage)bb;
215.228 + int data[] =
215.229 + ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();
215.230 + peer.updateWindowImpl(data, bi.getWidth(), bi.getHeight());
215.231 + return true;
215.232 + } else if (bb instanceof VolatileImage) {
215.233 + viBB = (VolatileImage)bb;
215.234 + if (bb instanceof DestSurfaceProvider) {
215.235 + Surface s = ((DestSurfaceProvider)bb).getDestSurface();
215.236 + if (s instanceof BufImgSurfaceData) {
215.237 + // the image is probably lost, upload the data from the
215.238 + // backup surface to avoid creating another heap-based
215.239 + // image (the parent's buffer)
215.240 + int w = viBB.getWidth();
215.241 + int h = viBB.getHeight();
215.242 + BufImgSurfaceData bisd = (BufImgSurfaceData)s;
215.243 + int data[] = ((DataBufferInt)bisd.getRaster(0,0,w,h).
215.244 + getDataBuffer()).getData();
215.245 + peer.updateWindowImpl(data, w, h);
215.246 + return true;
215.247 + }
215.248 + }
215.249 + }
215.250 +
215.251 + // copy the passed image into our own buffer, then upload
215.252 + BufferedImage bi = getBIBackBuffer();
215.253 + Graphics2D g = (Graphics2D)bi.getGraphics();
215.254 + g.setComposite(AlphaComposite.Src);
215.255 + g.drawImage(bb, 0, 0, null);
215.256 +
215.257 + int data[] =
215.258 + ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();
215.259 + peer.updateWindowImpl(data, bi.getWidth(), bi.getHeight());
215.260 +
215.261 + return (viBB != null ? !viBB.contentsLost() : true);
215.262 + }
215.263 +
215.264 + public void flush() {
215.265 + if (biRef != null) {
215.266 + biRef.clear();
215.267 + }
215.268 + }
215.269 + }
215.270 +
215.271 + /**
215.272 + * A version of the painter which uses VolatileImage as the internal buffer.
215.273 + * The window is painted into this VI and then copied into the parent's
215.274 + * Java heap-based buffer (which is then uploaded to the layered window)
215.275 + */
215.276 + private static class VIWindowPainter extends BIWindowPainter {
215.277 + private WeakReference<VolatileImage> viRef;
215.278 +
215.279 + protected VIWindowPainter(WWindowPeer peer) {
215.280 + super(peer);
215.281 + }
215.282 +
215.283 + @Override
215.284 + protected Image getBackBuffer() {
215.285 + int w = window.getWidth();
215.286 + int h = window.getHeight();
215.287 + GraphicsConfiguration gc = peer.getGraphicsConfiguration();
215.288 +
215.289 + VolatileImage viBB = viRef == null ? null : viRef.get();
215.290 +
215.291 + if (viBB == null || viBB.getWidth() != w || viBB.getHeight() != h ||
215.292 + viBB.validate(gc) == IMAGE_INCOMPATIBLE)
215.293 + {
215.294 + if (viBB != null) {
215.295 + viBB.flush();
215.296 + viBB = null;
215.297 + }
215.298 +
215.299 + if (gc instanceof AccelGraphicsConfig) {
215.300 + AccelGraphicsConfig agc = ((AccelGraphicsConfig)gc);
215.301 + viBB = agc.createCompatibleVolatileImage(w, h,
215.302 + TRANSLUCENT,
215.303 + RT_PLAIN);
215.304 + }
215.305 + if (viBB == null) {
215.306 + viBB = gc.createCompatibleVolatileImage(w, h, TRANSLUCENT);
215.307 + }
215.308 + viBB.validate(gc);
215.309 + viRef = new WeakReference<VolatileImage>(viBB);
215.310 + }
215.311 +
215.312 + return clearImage(viBB);
215.313 + }
215.314 +
215.315 + @Override
215.316 + public void flush() {
215.317 + if (viRef != null) {
215.318 + VolatileImage viBB = viRef.get();
215.319 + if (viBB != null) {
215.320 + viBB.flush();
215.321 + viBB = null;
215.322 + }
215.323 + viRef.clear();
215.324 + }
215.325 + }
215.326 + }
215.327 +
215.328 + /**
215.329 + * Optimized version of hw painter. Uses VolatileImages for the
215.330 + * buffer, and uses an optimized path to pull the data from those into
215.331 + * the layered window, bypassing Java heap-based image.
215.332 + */
215.333 + private abstract static class VIOptWindowPainter extends VIWindowPainter {
215.334 +
215.335 + protected VIOptWindowPainter(WWindowPeer peer) {
215.336 + super(peer);
215.337 + }
215.338 +
215.339 + protected abstract boolean updateWindowAccel(long psdops, int w, int h);
215.340 +
215.341 + @Override
215.342 + protected boolean update(Image bb) {
215.343 + if (bb instanceof DestSurfaceProvider) {
215.344 + Surface s = ((DestSurfaceProvider)bb).getDestSurface();
215.345 + if (s instanceof AccelSurface) {
215.346 + final int w = bb.getWidth(null);
215.347 + final int h = bb.getHeight(null);
215.348 + final boolean arr[] = { false };
215.349 + final AccelSurface as = (AccelSurface)s;
215.350 + RenderQueue rq = as.getContext().getRenderQueue();
215.351 + rq.lock();
215.352 + try {
215.353 + as.getContext().validateContext(as);
215.354 + rq.flushAndInvokeNow(new Runnable() {
215.355 + public void run() {
215.356 + long psdops = as.getNativeOps();
215.357 + arr[0] = updateWindowAccel(psdops, w, h);
215.358 + }
215.359 + });
215.360 + } catch (InvalidPipeException e) {
215.361 + // ignore, false will be returned
215.362 + } finally {
215.363 + rq.unlock();
215.364 + }
215.365 + return arr[0];
215.366 + }
215.367 + }
215.368 + return super.update(bb);
215.369 + }
215.370 + }
215.371 +
215.372 + private static class VIOptD3DWindowPainter extends VIOptWindowPainter {
215.373 +
215.374 + protected VIOptD3DWindowPainter(WWindowPeer peer) {
215.375 + super(peer);
215.376 + }
215.377 +
215.378 + @Override
215.379 + protected boolean updateWindowAccel(long psdops, int w, int h) {
215.380 + // note: this method is executed on the toolkit thread, no sync is
215.381 + // necessary at the native level, and a pointer to peer can be used
215.382 + return sun.java2d.d3d.D3DSurfaceData.
215.383 + updateWindowAccelImpl(psdops, peer.getData(), w, h);
215.384 + }
215.385 + }
215.386 +
215.387 + private static class VIOptWGLWindowPainter extends VIOptWindowPainter {
215.388 +
215.389 + protected VIOptWGLWindowPainter(WWindowPeer peer) {
215.390 + super(peer);
215.391 + }
215.392 +
215.393 + @Override
215.394 + protected boolean updateWindowAccel(long psdops, int w, int h) {
215.395 + // note: part of this method which deals with GDI will be on the
215.396 + // toolkit thread
215.397 + return sun.java2d.opengl.WGLSurfaceData.
215.398 + updateWindowAccelImpl(psdops, peer, w, h);
215.399 + }
215.400 + }
215.401 +}
216.1 --- a/src/windows/classes/sun/awt/windows/WCanvasPeer.java Thu Apr 16 17:42:00 2009 +0100
216.2 +++ b/src/windows/classes/sun/awt/windows/WCanvasPeer.java Thu Apr 16 19:10:32 2009 -0700
216.3 @@ -1,5 +1,5 @@
216.4 /*
216.5 - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
216.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
216.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
216.8 *
216.9 * This code is free software; you can redistribute it and/or modify it
216.10 @@ -28,6 +28,7 @@
216.11 import java.awt.peer.*;
216.12 import java.lang.ref.WeakReference;
216.13 import java.lang.reflect.Method;
216.14 +import sun.awt.AWTAccessor;
216.15 import sun.awt.ComponentAccessor;
216.16 import sun.awt.SunToolkit;
216.17 import sun.awt.Win32GraphicsDevice;
216.18 @@ -37,44 +38,12 @@
216.19
216.20 private boolean eraseBackground;
216.21
216.22 - Method resetGCMethod;
216.23 -
216.24 // Toolkit & peer internals
216.25
216.26 WCanvasPeer(Component target) {
216.27 super(target);
216.28 }
216.29
216.30 - /*
216.31 - * From the DisplayChangedListener interface.
216.32 - *
216.33 - * Overrides WComponentPeer version because Canvases can be created with
216.34 - * a non-defulat GraphicsConfiguration, which is no longer valid.
216.35 - * Up-called for other windows peer instances (WPanelPeer, WWindowPeer).
216.36 - */
216.37 - public void displayChanged() {
216.38 - clearLocalGC();
216.39 - resetTargetGC();
216.40 - super.displayChanged();
216.41 - }
216.42 -
216.43 - /*
216.44 - * Reset the graphicsConfiguration member of our target Component.
216.45 - * Component.resetGC() is a package-private method, so we have to call it
216.46 - * through reflection.
216.47 - */
216.48 - public void resetTargetGC() {
216.49 - ComponentAccessor.resetGC((Component)target);
216.50 - }
216.51 -
216.52 - /*
216.53 - * Clears the peer's winGraphicsConfig member.
216.54 - * Overridden by WWindowPeer, which shouldn't have a null winGraphicsConfig.
216.55 - */
216.56 - void clearLocalGC() {
216.57 - winGraphicsConfig = null;
216.58 - }
216.59 -
216.60 native void create(WComponentPeer parent);
216.61
216.62 void initialize() {
216.63 @@ -110,16 +79,20 @@
216.64 }
216.65
216.66 public void print(Graphics g) {
216.67 - Dimension d = ((Component)target).getSize();
216.68 - if (g instanceof Graphics2D ||
216.69 - g instanceof sun.awt.Graphics2Delegate) {
216.70 - // background color is setup correctly, so just use clearRect
216.71 - g.clearRect(0, 0, d.width, d.height);
216.72 - } else {
216.73 - // emulate clearRect
216.74 - g.setColor(((Component)target).getBackground());
216.75 - g.fillRect(0, 0, d.width, d.height);
216.76 - g.setColor(((Component)target).getForeground());
216.77 + if (!(target instanceof Window) ||
216.78 + AWTAccessor.getWindowAccessor().isOpaque((Window)target))
216.79 + {
216.80 + Dimension d = ((Component)target).getSize();
216.81 + if (g instanceof Graphics2D ||
216.82 + g instanceof sun.awt.Graphics2Delegate) {
216.83 + // background color is setup correctly, so just use clearRect
216.84 + g.clearRect(0, 0, d.width, d.height);
216.85 + } else {
216.86 + // emulate clearRect
216.87 + g.setColor(((Component)target).getBackground());
216.88 + g.fillRect(0, 0, d.width, d.height);
216.89 + g.setColor(((Component)target).getForeground());
216.90 + }
216.91 }
216.92 super.print(g);
216.93 }
216.94 @@ -147,4 +120,10 @@
216.95 */
216.96 private native void setNativeBackgroundErase(boolean doErase,
216.97 boolean doEraseOnResize);
216.98 +
216.99 + public GraphicsConfiguration getAppropriateGraphicsConfiguration(
216.100 + GraphicsConfiguration gc)
216.101 + {
216.102 + return gc;
216.103 + }
216.104 }
217.1 --- a/src/windows/classes/sun/awt/windows/WChoicePeer.java Thu Apr 16 17:42:00 2009 +0100
217.2 +++ b/src/windows/classes/sun/awt/windows/WChoicePeer.java Thu Apr 16 19:10:32 2009 -0700
217.3 @@ -27,6 +27,10 @@
217.4 import java.awt.*;
217.5 import java.awt.peer.*;
217.6 import java.awt.event.ItemEvent;
217.7 +import java.awt.event.WindowEvent;
217.8 +import java.awt.event.WindowListener;
217.9 +import java.awt.event.WindowAdapter;
217.10 +import sun.awt.SunToolkit;
217.11
217.12 class WChoicePeer extends WComponentPeer implements ChoicePeer {
217.13
217.14 @@ -70,6 +74,8 @@
217.15
217.16 public synchronized native void reshape(int x, int y, int width, int height);
217.17
217.18 + private WindowListener windowListener;
217.19 +
217.20 // Toolkit & peer internals
217.21
217.22 WChoicePeer(Choice target) {
217.23 @@ -91,9 +97,38 @@
217.24 select(opt.getSelectedIndex());
217.25 }
217.26 }
217.27 +
217.28 + Window parentWindow = SunToolkit.getContainingWindow((Component)target);
217.29 + if (parentWindow != null) {
217.30 + WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
217.31 + if (wpeer != null) {
217.32 + windowListener = new WindowAdapter() {
217.33 + public void windowIconified(WindowEvent e) {
217.34 + closeList();
217.35 + }
217.36 + public void windowClosing(WindowEvent e) {
217.37 + closeList();
217.38 + }
217.39 + };
217.40 + wpeer.addWindowListener(windowListener);
217.41 + }
217.42 + }
217.43 super.initialize();
217.44 }
217.45
217.46 + protected void disposeImpl() {
217.47 + // TODO: we should somehow reset the listener when the choice
217.48 + // is moved to another toplevel without destroying its peer.
217.49 + Window parentWindow = SunToolkit.getContainingWindow((Component)target);
217.50 + if (parentWindow != null) {
217.51 + WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
217.52 + if (wpeer != null) {
217.53 + wpeer.removeWindowListener(windowListener);
217.54 + }
217.55 + }
217.56 + super.disposeImpl();
217.57 + }
217.58 +
217.59 // native callbacks
217.60
217.61 void handleAction(final int index) {
217.62 @@ -121,4 +156,5 @@
217.63 return getMinimumSize();
217.64 }
217.65
217.66 + native void closeList();
217.67 }
218.1 --- a/src/windows/classes/sun/awt/windows/WComponentPeer.java Thu Apr 16 17:42:00 2009 +0100
218.2 +++ b/src/windows/classes/sun/awt/windows/WComponentPeer.java Thu Apr 16 19:10:32 2009 -0700
218.3 @@ -1,5 +1,5 @@
218.4 /*
218.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
218.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
218.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
218.8 *
218.9 * This code is free software; you can redistribute it and/or modify it
218.10 @@ -38,27 +38,32 @@
218.11 import java.awt.event.PaintEvent;
218.12 import java.awt.event.InvocationEvent;
218.13 import java.awt.event.KeyEvent;
218.14 +import java.awt.event.FocusEvent;
218.15 +import java.awt.event.MouseEvent;
218.16 +import java.awt.event.MouseWheelEvent;
218.17 +import java.awt.event.InputEvent;
218.18 import sun.awt.Win32GraphicsConfig;
218.19 +import sun.awt.Win32GraphicsEnvironment;
218.20 import sun.java2d.InvalidPipeException;
218.21 import sun.java2d.SurfaceData;
218.22 -import sun.java2d.d3d.D3DScreenUpdateManager;
218.23 -import static sun.java2d.d3d.D3DSurfaceData.*;
218.24 import sun.java2d.ScreenUpdateManager;
218.25 +import sun.java2d.d3d.D3DSurfaceData;
218.26 import sun.java2d.opengl.OGLSurfaceData;
218.27 +import sun.java2d.pipe.Region;
218.28 import sun.awt.DisplayChangedListener;
218.29 import sun.awt.PaintEventDispatcher;
218.30 +import sun.awt.SunToolkit;
218.31 import sun.awt.event.IgnorePaintEvent;
218.32
218.33 import java.awt.dnd.DropTarget;
218.34 import java.awt.dnd.peer.DropTargetPeer;
218.35 import sun.awt.ComponentAccessor;
218.36
218.37 -
218.38 import java.util.logging.*;
218.39
218.40
218.41 public abstract class WComponentPeer extends WObjectPeer
218.42 - implements ComponentPeer, DropTargetPeer, DisplayChangedListener
218.43 + implements ComponentPeer, DropTargetPeer
218.44 {
218.45 /**
218.46 * Handle to native window
218.47 @@ -67,6 +72,7 @@
218.48
218.49 private static final Logger log = Logger.getLogger("sun.awt.windows.WComponentPeer");
218.50 private static final Logger shapeLog = Logger.getLogger("sun.awt.windows.shape.WComponentPeer");
218.51 + private static final Logger focusLog = Logger.getLogger("sun.awt.windows.focus.WComponentPeer");
218.52
218.53 // ComponentPeer implementation
218.54 SurfaceData surfaceData;
218.55 @@ -186,7 +192,7 @@
218.56 cont.invalidate();
218.57 cont.validate();
218.58
218.59 - if (surfaceData instanceof D3DWindowSurfaceData ||
218.60 + if (surfaceData instanceof D3DSurfaceData.D3DWindowSurfaceData ||
218.61 surfaceData instanceof OGLSurfaceData)
218.62 {
218.63 // When OGL or D3D is enabled, it is necessary to
218.64 @@ -258,7 +264,7 @@
218.65 int[] pix = createPrintedPixels(0, startY, totalW, h);
218.66 if (pix != null) {
218.67 BufferedImage bim = new BufferedImage(totalW, h,
218.68 - BufferedImage.TYPE_INT_RGB);
218.69 + BufferedImage.TYPE_INT_ARGB);
218.70 bim.setRGB(0, 0, totalW, h, pix, 0, totalW);
218.71 g.drawImage(bim, 0, startY, null);
218.72 bim.flush();
218.73 @@ -295,14 +301,35 @@
218.74 // on handling '\n' to prevent it from being passed to native code
218.75 public boolean handleJavaKeyEvent(KeyEvent e) { return false; }
218.76
218.77 + public void handleJavaMouseEvent(MouseEvent e) {
218.78 + switch (e.getID()) {
218.79 + case MouseEvent.MOUSE_PRESSED:
218.80 + // Note that Swing requests focus in its own mouse event handler.
218.81 + if (target == e.getSource() &&
218.82 + !((Component)target).isFocusOwner() &&
218.83 + WKeyboardFocusManagerPeer.shouldFocusOnClick((Component)target))
218.84 + {
218.85 + WKeyboardFocusManagerPeer.requestFocusFor((Component)target,
218.86 + CausedFocusEvent.Cause.MOUSE_EVENT);
218.87 + }
218.88 + break;
218.89 + }
218.90 + }
218.91 +
218.92 native void nativeHandleEvent(AWTEvent e);
218.93
218.94 public void handleEvent(AWTEvent e) {
218.95 int id = e.getID();
218.96
218.97 - if (((Component)target).isEnabled() && (e instanceof KeyEvent) && !((KeyEvent)e).isConsumed()) {
218.98 - if (handleJavaKeyEvent((KeyEvent)e)) {
218.99 - return;
218.100 + if ((e instanceof InputEvent) && !((InputEvent)e).isConsumed() &&
218.101 + ((Component)target).isEnabled())
218.102 + {
218.103 + if (e instanceof MouseEvent && !(e instanceof MouseWheelEvent)) {
218.104 + handleJavaMouseEvent((MouseEvent) e);
218.105 + } else if (e instanceof KeyEvent) {
218.106 + if (handleJavaKeyEvent((KeyEvent)e)) {
218.107 + return;
218.108 + }
218.109 }
218.110 }
218.111
218.112 @@ -318,6 +345,9 @@
218.113 paintArea.paint(target,shouldClearRectBeforePaint());
218.114 }
218.115 return;
218.116 + case FocusEvent.FOCUS_LOST:
218.117 + case FocusEvent.FOCUS_GAINED:
218.118 + handleJavaFocusEvent((FocusEvent)e);
218.119 default:
218.120 break;
218.121 }
218.122 @@ -326,6 +356,13 @@
218.123 nativeHandleEvent(e);
218.124 }
218.125
218.126 + void handleJavaFocusEvent(FocusEvent fe) {
218.127 + if (focusLog.isLoggable(Level.FINER)) focusLog.finer(fe.toString());
218.128 + setFocus(fe.getID() == FocusEvent.FOCUS_GAINED);
218.129 + }
218.130 +
218.131 + native void setFocus(boolean doSetFocus);
218.132 +
218.133 public Dimension getMinimumSize() {
218.134 return ((Component)target).getSize();
218.135 }
218.136 @@ -451,15 +488,8 @@
218.137 }
218.138 }
218.139
218.140 - /**
218.141 - * From the DisplayChangedListener interface.
218.142 - *
218.143 - * Called after a change in the display mode. This event
218.144 - * triggers replacing the surfaceData object (since that object
218.145 - * reflects the current display depth information, which has
218.146 - * just changed).
218.147 - */
218.148 - public void displayChanged() {
218.149 + public void updateGraphicsData(GraphicsConfiguration gc) {
218.150 + winGraphicsConfig = (Win32GraphicsConfig)gc;
218.151 try {
218.152 replaceSurfaceData();
218.153 } catch (InvalidPipeException e) {
218.154 @@ -467,13 +497,6 @@
218.155 }
218.156 }
218.157
218.158 - /**
218.159 - * Part of the DisplayChangedListener interface: components
218.160 - * do not need to react to this event
218.161 - */
218.162 - public void paletteChanged() {
218.163 - }
218.164 -
218.165 //This will return null for Components not yet added to a Container
218.166 public ColorModel getColorModel() {
218.167 GraphicsConfiguration gc = getGraphicsConfiguration();
218.168 @@ -585,22 +608,64 @@
218.169 WGlobalCursorManager.getCursorManager().updateCursorImmediately();
218.170 }
218.171
218.172 - native static boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant,
218.173 - boolean temporary, boolean focusedWindowChangeAllowed,
218.174 - long time);
218.175 - public boolean requestFocus
218.176 - (Component lightweightChild, boolean temporary,
218.177 - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) {
218.178 - if (processSynchronousLightweightTransfer((Component)target, lightweightChild, temporary,
218.179 - focusedWindowChangeAllowed, time)) {
218.180 + // TODO: consider moving it to KeyboardFocusManagerPeerImpl
218.181 + public boolean requestFocus(Component lightweightChild, boolean temporary,
218.182 + boolean focusedWindowChangeAllowed, long time,
218.183 + CausedFocusEvent.Cause cause)
218.184 + {
218.185 + if (WKeyboardFocusManagerPeer.
218.186 + processSynchronousLightweightTransfer((Component)target, lightweightChild, temporary,
218.187 + focusedWindowChangeAllowed, time))
218.188 + {
218.189 return true;
218.190 - } else {
218.191 - return _requestFocus(lightweightChild, temporary, focusedWindowChangeAllowed, time, cause);
218.192 }
218.193 +
218.194 + int result = WKeyboardFocusManagerPeer
218.195 + .shouldNativelyFocusHeavyweight((Component)target, lightweightChild,
218.196 + temporary, focusedWindowChangeAllowed,
218.197 + time, cause);
218.198 +
218.199 + switch (result) {
218.200 + case WKeyboardFocusManagerPeer.SNFH_FAILURE:
218.201 + return false;
218.202 + case WKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED:
218.203 + if (focusLog.isLoggable(Level.FINER)) {
218.204 + focusLog.finer("Proceeding with request to " + lightweightChild + " in " + target);
218.205 + }
218.206 + Window parentWindow = SunToolkit.getContainingWindow((Component)target);
218.207 + if (parentWindow == null) {
218.208 + return rejectFocusRequestHelper("WARNING: Parent window is null");
218.209 + }
218.210 + WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
218.211 + if (wpeer == null) {
218.212 + return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
218.213 + }
218.214 + boolean res = wpeer.requestWindowFocus(cause);
218.215 +
218.216 + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Requested window focus: " + res);
218.217 + // If parent window can be made focused and has been made focused(synchronously)
218.218 + // then we can proceed with children, otherwise we retreat.
218.219 + if (!(res && parentWindow.isFocused())) {
218.220 + return rejectFocusRequestHelper("Waiting for asynchronous processing of the request");
218.221 + }
218.222 + return WKeyboardFocusManagerPeer.deliverFocus(lightweightChild,
218.223 + (Component)target,
218.224 + temporary,
218.225 + focusedWindowChangeAllowed,
218.226 + time, cause);
218.227 +
218.228 + case WKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED:
218.229 + // Either lightweight or excessive request - all events are generated.
218.230 + return true;
218.231 + }
218.232 + return false;
218.233 }
218.234 - public native boolean _requestFocus
218.235 - (Component lightweightChild, boolean temporary,
218.236 - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause);
218.237 +
218.238 + private boolean rejectFocusRequestHelper(String logMsg) {
218.239 + if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg);
218.240 + WKeyboardFocusManagerPeer.removeLastFocusRequest((Component)target);
218.241 + return false;
218.242 + }
218.243
218.244 public Image createImage(ImageProducer producer) {
218.245 return new ToolkitImage(producer);
218.246 @@ -713,7 +778,7 @@
218.247 * NOTE: This is called on the privileged toolkit thread. Do not
218.248 * call directly into user code using this thread!
218.249 */
218.250 - void handlePaint(int x, int y, int w, int h) {
218.251 + public void handlePaint(int x, int y, int w, int h) {
218.252 postPaintIfNecessary(x, y, w, h);
218.253 }
218.254
218.255 @@ -731,9 +796,12 @@
218.256 * Post an event. Queue it for execution by the callback thread.
218.257 */
218.258 void postEvent(AWTEvent event) {
218.259 + preprocessPostEvent(event);
218.260 WToolkit.postEvent(WToolkit.targetToAppContext(target), event);
218.261 }
218.262
218.263 + void preprocessPostEvent(AWTEvent event) {}
218.264 +
218.265 // Routines to support deferred window positioning.
218.266 public void beginLayout() {
218.267 // Skip all painting till endLayout
218.268 @@ -895,9 +963,29 @@
218.269 public void setBoundsOperation(int operation) {
218.270 }
218.271
218.272 + /**
218.273 + * Returns whether this component is capable of being hw accelerated.
218.274 + * More specifically, whether rendering to this component or a
218.275 + * BufferStrategy's back-buffer for this component can be hw accelerated.
218.276 + *
218.277 + * Conditions which could prevent hw acceleration include the toplevel
218.278 + * window containing this component being
218.279 + * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}.
218.280 + *
218.281 + * @return {@code true} if this component is capable of being hw
218.282 + * accelerated, {@code false} otherwise
218.283 + * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT
218.284 + */
218.285 + public boolean isAccelCapable() {
218.286 + boolean isTranslucent =
218.287 + SunToolkit.isContainingTopLevelTranslucent((Component)target);
218.288 + // D3D/OGL and translucent windows interacted poorly in Windows XP;
218.289 + // these problems are no longer present in Vista
218.290 + return !isTranslucent || Win32GraphicsEnvironment.isVistaOS();
218.291 + }
218.292
218.293 native void setRectangularShape(int lox, int loy, int hix, int hiy,
218.294 - sun.java2d.pipe.Region region);
218.295 + Region region);
218.296
218.297
218.298 // REMIND: Temp workaround for issues with using HW acceleration
218.299 @@ -915,41 +1003,10 @@
218.300 }
218.301
218.302 /**
218.303 - * Returns whether this component is capable of being hw accelerated.
218.304 - * More specifically, whether rendering to this component or a
218.305 - * BufferStrategy's back-buffer for this component can be hw accelerated.
218.306 - *
218.307 - * Conditions which could prevent hw acceleration include the toplevel
218.308 - * window containing this component being
218.309 - * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}.
218.310 - *
218.311 - * @return {@code true} if this component is capable of being hw
218.312 - * accelerated, {@code false} otherwise
218.313 - * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT
218.314 - */
218.315 - public boolean isAccelCapable() {
218.316 - // REMIND: Temp workaround for issues with using HW acceleration
218.317 - // in the browser on Vista when DWM is enabled
218.318 - if (!isContainingTopLevelAccelCapable((Component)target)) {
218.319 - return false;
218.320 - }
218.321 -
218.322 - // REMIND: translucent windows support-related
218.323 -/*
218.324 - boolean isTranslucent =
218.325 - SunToolkit.isContainingTopLevelTranslucent((Component)target);
218.326 - // D3D/OGL and translucent windows interacted poorly in Windows XP;
218.327 - // these problems are no longer present in Vista
218.328 - return !isTranslucent || Win32GraphicsEnvironment.isVistaOS();
218.329 -*/
218.330 - return true;
218.331 - }
218.332 -
218.333 - /**
218.334 * Applies the shape to the native component window.
218.335 * @since 1.7
218.336 */
218.337 - public void applyShape(sun.java2d.pipe.Region shape) {
218.338 + public void applyShape(Region shape) {
218.339 if (shapeLog.isLoggable(Level.FINER)) {
218.340 shapeLog.finer(
218.341 "*** INFO: Setting shape: PEER: " + this
218.342 @@ -965,4 +1022,15 @@
218.343 }
218.344 }
218.345
218.346 + /**
218.347 + * Lowers this component at the bottom of the above component. If the above parameter
218.348 + * is null then the method places this component at the top of the Z-order.
218.349 + */
218.350 + public void setZOrder(ComponentPeer above) {
218.351 + long aboveHWND = (above != null) ? ((WComponentPeer)above).getHWnd() : 0;
218.352 +
218.353 + setZOrder(aboveHWND);
218.354 + }
218.355 +
218.356 + private native void setZOrder(long above);
218.357 }
219.1 --- a/src/windows/classes/sun/awt/windows/WFileDialogPeer.java Thu Apr 16 17:42:00 2009 +0100
219.2 +++ b/src/windows/classes/sun/awt/windows/WFileDialogPeer.java Thu Apr 16 19:10:32 2009 -0700
219.3 @@ -1,5 +1,5 @@
219.4 /*
219.5 - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
219.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
219.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
219.8 *
219.9 * This code is free software; you can redistribute it and/or modify it
219.10 @@ -225,23 +225,16 @@
219.11 public void addDropTarget(DropTarget dt) {}
219.12 public void removeDropTarget(DropTarget dt) {}
219.13 public void updateFocusableWindowState() {}
219.14 + public void setZOrder(ComponentPeer above) {}
219.15
219.16 /**
219.17 * Initialize JNI field and method ids
219.18 */
219.19 private static native void initIDs();
219.20
219.21 - /**
219.22 - * WFileDialogPeer doesn't have native pData so we don't do restack on it
219.23 - * @see java.awt.peer.ContainerPeer#restack
219.24 - */
219.25 - public void restack() {
219.26 - }
219.27 -
219.28 - /**
219.29 - * @see java.awt.peer.ContainerPeer#isRestackSupported
219.30 - */
219.31 - public boolean isRestackSupported() {
219.32 - return false;
219.33 - }
219.34 + // The effects are not supported for system dialogs.
219.35 + public void applyShape(sun.java2d.pipe.Region shape) {}
219.36 + public void setOpacity(float opacity) {}
219.37 + public void setOpaque(boolean isOpaque) {}
219.38 + public void updateWindow(java.awt.image.BufferedImage backBuffer) {}
219.39 }
220.1 --- a/src/windows/classes/sun/awt/windows/WFramePeer.java Thu Apr 16 17:42:00 2009 +0100
220.2 +++ b/src/windows/classes/sun/awt/windows/WFramePeer.java Thu Apr 16 19:10:32 2009 -0700
220.3 @@ -25,27 +25,46 @@
220.4 package sun.awt.windows;
220.5
220.6 import java.util.Vector;
220.7 +
220.8 import java.awt.*;
220.9 import java.awt.peer.*;
220.10 import java.awt.image.ImageObserver;
220.11 -import sun.awt.image.ImageRepresentation;
220.12 -import sun.awt.image.IntegerComponentRaster;
220.13 -import sun.awt.image.ToolkitImage;
220.14 +
220.15 import java.awt.image.Raster;
220.16 import java.awt.image.DataBuffer;
220.17 import java.awt.image.DataBufferInt;
220.18 import java.awt.image.BufferedImage;
220.19 +
220.20 +import java.awt.image.ColorModel;
220.21 +
220.22 +import sun.awt.image.ImageRepresentation;
220.23 +import sun.awt.image.IntegerComponentRaster;
220.24 +import sun.awt.image.ToolkitImage;
220.25 import sun.awt.im.*;
220.26 import sun.awt.Win32GraphicsDevice;
220.27 -import java.awt.image.ColorModel;
220.28 -
220.29 +import sun.awt.AWTAccessor;
220.30
220.31 class WFramePeer extends WWindowPeer implements FramePeer {
220.32
220.33 + static {
220.34 + initIDs();
220.35 + }
220.36 +
220.37 + // initialize JNI field and method IDs
220.38 + private static native void initIDs();
220.39 +
220.40 // FramePeer implementation
220.41 public native void setState(int state);
220.42 public native int getState();
220.43
220.44 + // sync target and peer
220.45 + public void setExtendedState(int state) {
220.46 + AWTAccessor.getFrameAccessor().setExtendedState((Frame)target, state);
220.47 + }
220.48 + public int getExtendedState() {
220.49 + return AWTAccessor.getFrameAccessor().getExtendedState((Frame)target);
220.50 + }
220.51 +
220.52 // Convenience methods to save us from trouble of extracting
220.53 // Rectangle fields in native code.
220.54 private native void setMaximizedBounds(int x, int y, int w, int h);
221.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
221.2 +++ b/src/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java Thu Apr 16 19:10:32 2009 -0700
221.3 @@ -0,0 +1,75 @@
221.4 +/*
221.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
221.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
221.7 + *
221.8 + * This code is free software; you can redistribute it and/or modify it
221.9 + * under the terms of the GNU General Public License version 2 only, as
221.10 + * published by the Free Software Foundation. Sun designates this
221.11 + * particular file as subject to the "Classpath" exception as provided
221.12 + * by Sun in the LICENSE file that accompanied this code.
221.13 + *
221.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
221.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
221.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
221.17 + * version 2 for more details (a copy is included in the LICENSE file that
221.18 + * accompanied this code).
221.19 + *
221.20 + * You should have received a copy of the GNU General Public License version
221.21 + * 2 along with this work; if not, write to the Free Software Foundation,
221.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
221.23 + *
221.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
221.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
221.26 + * have any questions.
221.27 + */
221.28 +
221.29 +package sun.awt.windows;
221.30 +
221.31 +import java.awt.KeyboardFocusManager;
221.32 +import java.awt.Window;
221.33 +import java.awt.Component;
221.34 +import java.awt.peer.ComponentPeer;
221.35 +import sun.awt.KeyboardFocusManagerPeerImpl;
221.36 +import sun.awt.CausedFocusEvent;
221.37 +
221.38 +class WKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
221.39 + static native void setNativeFocusOwner(ComponentPeer peer);
221.40 + static native Component getNativeFocusOwner();
221.41 + static native Window getNativeFocusedWindow();
221.42 +
221.43 + WKeyboardFocusManagerPeer(KeyboardFocusManager manager) {
221.44 + super(manager);
221.45 + }
221.46 +
221.47 + @Override
221.48 + public void setCurrentFocusOwner(Component comp) {
221.49 + setNativeFocusOwner(comp != null ? comp.getPeer() : null);
221.50 + }
221.51 +
221.52 + @Override
221.53 + public Component getCurrentFocusOwner() {
221.54 + return getNativeFocusOwner();
221.55 + }
221.56 +
221.57 + @Override
221.58 + public Window getCurrentFocusedWindow() {
221.59 + return getNativeFocusedWindow();
221.60 + }
221.61 +
221.62 + public static boolean deliverFocus(Component lightweightChild,
221.63 + Component target,
221.64 + boolean temporary,
221.65 + boolean focusedWindowChangeAllowed,
221.66 + long time,
221.67 + CausedFocusEvent.Cause cause)
221.68 + {
221.69 + // TODO: do something to eliminate this forwarding
221.70 + return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild,
221.71 + target,
221.72 + temporary,
221.73 + focusedWindowChangeAllowed,
221.74 + time,
221.75 + cause,
221.76 + getNativeFocusOwner());
221.77 + }
221.78 +}
222.1 --- a/src/windows/classes/sun/awt/windows/WPanelPeer.java Thu Apr 16 17:42:00 2009 +0100
222.2 +++ b/src/windows/classes/sun/awt/windows/WPanelPeer.java Thu Apr 16 19:10:32 2009 -0700
222.3 @@ -100,34 +100,6 @@
222.4 return getInsets();
222.5 }
222.6
222.7 - /*
222.8 - * From the DisplayChangedListener interface. Often is
222.9 - * up-called from a WWindowPeer instance.
222.10 - */
222.11 - public void displayChanged() {
222.12 - super.displayChanged();
222.13 - displayChanged((Container)target);
222.14 - }
222.15 -
222.16 - /*
222.17 - * Recursively iterates through all the HW and LW children
222.18 - * of the container and calls displayChanged() for HW peers.
222.19 - * Iteration through children peers only is not enough as the
222.20 - * displayChanged notification may not be propagated to HW
222.21 - * components inside LW containers, see 4452373 for details.
222.22 - */
222.23 - private static void displayChanged(Container target) {
222.24 - Component children[] = ((Container)target).getComponents();
222.25 - for (Component child : children) {
222.26 - ComponentPeer cpeer = child.getPeer();
222.27 - if (cpeer instanceof WComponentPeer) {
222.28 - ((WComponentPeer)cpeer).displayChanged();
222.29 - } else if (child instanceof Container) {
222.30 - displayChanged((Container)child);
222.31 - }
222.32 - }
222.33 - }
222.34 -
222.35 private native void pRestack(Object[] peers);
222.36 private void restack(Container cont, Vector peers) {
222.37 for (int i = 0; i < cont.getComponentCount(); i++) {
223.1 --- a/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java Thu Apr 16 17:42:00 2009 +0100
223.2 +++ b/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java Thu Apr 16 19:10:32 2009 -0700
223.3 @@ -1,5 +1,5 @@
223.4 /*
223.5 - * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved.
223.6 + * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
223.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
223.8 *
223.9 * This code is free software; you can redistribute it and/or modify it
223.10 @@ -27,6 +27,7 @@
223.11
223.12 import java.awt.*;
223.13 import java.awt.peer.DialogPeer;
223.14 +import java.awt.peer.ComponentPeer;
223.15 import java.awt.dnd.DropTarget;
223.16 import java.util.Vector;
223.17 import sun.awt.AppContext;
223.18 @@ -137,23 +138,16 @@
223.19 void invalidate(int x, int y, int width, int height) {}
223.20 public void addDropTarget(DropTarget dt) {}
223.21 public void removeDropTarget(DropTarget dt) {}
223.22 + public void setZOrder(ComponentPeer above) {}
223.23
223.24 /**
223.25 * Initialize JNI field and method ids
223.26 */
223.27 private static native void initIDs();
223.28
223.29 - /**
223.30 - * WPrintDialogPeer doesn't have native pData so we don't do restack on it
223.31 - * @see java.awt.peer.ContainerPeer#restack
223.32 - */
223.33 - public void restack() {
223.34 - }
223.35 -
223.36 - /**
223.37 - * @see java.awt.peer.ContainerPeer#isRestackSupported
223.38 - */
223.39 - public boolean isRestackSupported() {
223.40 - return false;
223.41 - }
223.42 + // The effects are not supported for system dialogs.
223.43 + public void applyShape(sun.java2d.pipe.Region shape) {}
223.44 + public void setOpacity(float opacity) {}
223.45 + public void setOpaque(boolean isOpaque) {}
223.46 + public void updateWindow(java.awt.image.BufferedImage backBuffer) {}
223.47 }
224.1 --- a/src/windows/classes/sun/awt/windows/WScrollPanePeer.java Thu Apr 16 17:42:00 2009 +0100
224.2 +++ b/src/windows/classes/sun/awt/windows/WScrollPanePeer.java Thu Apr 16 19:10:32 2009 -0700
224.3 @@ -269,10 +269,4 @@
224.4 }
224.5 }
224.6
224.7 - /**
224.8 - * @see java.awt.peer.ContainerPeer#restack
224.9 - */
224.10 - public void restack() {
224.11 - // Since ScrollPane can only have one child its restacking does nothing.
224.12 - }
224.13 }
225.1 --- a/src/windows/classes/sun/awt/windows/WToolkit.java Thu Apr 16 17:42:00 2009 +0100
225.2 +++ b/src/windows/classes/sun/awt/windows/WToolkit.java Thu Apr 16 19:10:32 2009 -0700
225.3 @@ -1,5 +1,5 @@
225.4 /*
225.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
225.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
225.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
225.8 *
225.9 * This code is free software; you can redistribute it and/or modify it
225.10 @@ -494,6 +494,12 @@
225.11 return true;
225.12 }
225.13
225.14 + public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager)
225.15 + throws HeadlessException
225.16 + {
225.17 + return new WKeyboardFocusManagerPeer(manager);
225.18 + }
225.19 +
225.20 protected native void setDynamicLayoutNative(boolean b);
225.21
225.22 public void setDynamicLayout(boolean b) {
225.23 @@ -975,4 +981,34 @@
225.24 public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
225.25 return areExtraMouseButtonsEnabled;
225.26 }
225.27 +
225.28 + @Override
225.29 + public boolean isWindowOpacitySupported() {
225.30 + // supported in Win2K and later
225.31 + return true;
225.32 + }
225.33 +
225.34 + @Override
225.35 + public boolean isWindowShapingSupported() {
225.36 + return true;
225.37 + }
225.38 +
225.39 + @Override
225.40 + public boolean isWindowTranslucencySupported() {
225.41 + // supported in Win2K and later
225.42 + return true;
225.43 + }
225.44 +
225.45 + @Override
225.46 + public boolean isTranslucencyCapable(GraphicsConfiguration gc) {
225.47 + //XXX: worth checking if 8-bit? Anyway, it doesn't hurt.
225.48 + return true;
225.49 + }
225.50 +
225.51 + // On MS Windows one must use the peer.updateWindow() to implement
225.52 + // non-opaque windows.
225.53 + @Override
225.54 + public boolean needUpdateWindow() {
225.55 + return true;
225.56 + }
225.57 }
226.1 --- a/src/windows/classes/sun/awt/windows/WWindowPeer.java Thu Apr 16 17:42:00 2009 +0100
226.2 +++ b/src/windows/classes/sun/awt/windows/WWindowPeer.java Thu Apr 16 19:10:32 2009 -0700
226.3 @@ -1,5 +1,5 @@
226.4 /*
226.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
226.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
226.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
226.8 *
226.9 * This code is free software; you can redistribute it and/or modify it
226.10 @@ -31,19 +31,19 @@
226.11
226.12 import java.beans.*;
226.13
226.14 -import java.lang.ref.*;
226.15 import java.lang.reflect.*;
226.16
226.17 -import java.security.*;
226.18 -
226.19 import java.util.*;
226.20 import java.util.List;
226.21 import java.util.logging.*;
226.22
226.23 import sun.awt.*;
226.24 -import sun.awt.image.*;
226.25
226.26 -public class WWindowPeer extends WPanelPeer implements WindowPeer {
226.27 +import sun.java2d.pipe.Region;
226.28 +
226.29 +public class WWindowPeer extends WPanelPeer implements WindowPeer,
226.30 + DisplayChangedListener
226.31 +{
226.32
226.33 private static final Logger log = Logger.getLogger("sun.awt.windows.WWindowPeer");
226.34 private static final Logger screenLog = Logger.getLogger("sun.awt.windows.screen.WWindowPeer");
226.35 @@ -52,6 +52,10 @@
226.36 // extends WWindowPeer, not WDialogPeer
226.37 private WWindowPeer modalBlocker = null;
226.38
226.39 + private boolean isOpaque;
226.40 +
226.41 + private volatile TranslucentWindowPainter painter;
226.42 +
226.43 /*
226.44 * A key used for storing a list of active windows in AppContext. The value
226.45 * is a list of windows, sorted by the time of activation: later a window is
226.46 @@ -73,6 +77,12 @@
226.47 private final static PropertyChangeListener guiDisposedListener =
226.48 new GuiDisposedListener();
226.49
226.50 + /*
226.51 + * Called (on the Toolkit thread) before the appropriate
226.52 + * WindowStateEvent is posted to the EventQueue.
226.53 + */
226.54 + private WindowListener windowListener;
226.55 +
226.56 /**
226.57 * Initialize JNI field IDs
226.58 */
226.59 @@ -91,9 +101,18 @@
226.60 l.remove(this);
226.61 }
226.62 }
226.63 +
226.64 // Remove ourself from the Map of DisplayChangeListeners
226.65 GraphicsConfiguration gc = getGraphicsConfiguration();
226.66 ((Win32GraphicsDevice)gc.getDevice()).removeDisplayChangedListener(this);
226.67 +
226.68 + TranslucentWindowPainter currentPainter = painter;
226.69 + if (currentPainter != null) {
226.70 + currentPainter.flush();
226.71 + // don't set the current one to null here; reduces the chances of
226.72 + // MT issues (like NPEs)
226.73 + }
226.74 +
226.75 super.disposeImpl();
226.76 }
226.77
226.78 @@ -158,6 +177,10 @@
226.79 initActiveWindowsTracking((Window)target);
226.80
226.81 updateIconImages();
226.82 +
226.83 + updateShape();
226.84 + updateOpacity();
226.85 + updateOpaque();
226.86 }
226.87
226.88 native void createAwtWindow(WComponentPeer parent);
226.89 @@ -183,7 +206,6 @@
226.90 // super.displayChanged() in WWindowPeer.displayChanged() regardless of whether
226.91 // GraphicsDevice was really changed, or not. So we need to track it here.
226.92 updateGC();
226.93 - resetTargetGC();
226.94
226.95 realShow();
226.96 updateMinimumSize();
226.97 @@ -191,6 +213,8 @@
226.98 if (((Window)target).isAlwaysOnTopSupported() && alwaysOnTop) {
226.99 setAlwaysOnTop(alwaysOnTop);
226.100 }
226.101 +
226.102 + updateWindow(null);
226.103 }
226.104
226.105 // Synchronize the insets members (here & in helper) with actual window
226.106 @@ -214,25 +238,62 @@
226.107 int[] smallIconRaster, int smw, int smh);
226.108
226.109 synchronized native void reshapeFrame(int x, int y, int width, int height);
226.110 - public boolean requestWindowFocus() {
226.111 - // Win32 window doesn't need this
226.112 - return false;
226.113 +
226.114 + public boolean requestWindowFocus(CausedFocusEvent.Cause cause) {
226.115 + if (!focusAllowedFor()) {
226.116 + return false;
226.117 + }
226.118 + return requestWindowFocus(cause == CausedFocusEvent.Cause.MOUSE_EVENT);
226.119 }
226.120 + public native boolean requestWindowFocus(boolean isMouseEventCause);
226.121
226.122 public boolean focusAllowedFor() {
226.123 - Window target = (Window)this.target;
226.124 - if (!target.isVisible() ||
226.125 - !target.isEnabled() ||
226.126 - !target.isFocusable())
226.127 + Window window = (Window)this.target;
226.128 + if (!window.isVisible() ||
226.129 + !window.isEnabled() ||
226.130 + !window.isFocusableWindow())
226.131 {
226.132 return false;
226.133 }
226.134 -
226.135 if (isModalBlocked()) {
226.136 return false;
226.137 }
226.138 + return true;
226.139 + }
226.140
226.141 - return true;
226.142 + public void hide() {
226.143 + WindowListener listener = windowListener;
226.144 + if (listener != null) {
226.145 + // We're not getting WINDOW_CLOSING from the native code when hiding
226.146 + // the window programmatically. So, create it and notify the listener.
226.147 + listener.windowClosing(new WindowEvent((Window)target, WindowEvent.WINDOW_CLOSING));
226.148 + }
226.149 + super.hide();
226.150 + }
226.151 +
226.152 + // WARNING: it's called on the Toolkit thread!
226.153 + void preprocessPostEvent(AWTEvent event) {
226.154 + if (event instanceof WindowEvent) {
226.155 + WindowListener listener = windowListener;
226.156 + if (listener != null) {
226.157 + switch(event.getID()) {
226.158 + case WindowEvent.WINDOW_CLOSING:
226.159 + listener.windowClosing((WindowEvent)event);
226.160 + break;
226.161 + case WindowEvent.WINDOW_ICONIFIED:
226.162 + listener.windowIconified((WindowEvent)event);
226.163 + break;
226.164 + }
226.165 + }
226.166 + }
226.167 + }
226.168 +
226.169 + synchronized void addWindowListener(WindowListener l) {
226.170 + windowListener = AWTEventMulticaster.add(windowListener, l);
226.171 + }
226.172 +
226.173 + synchronized void removeWindowListener(WindowListener l) {
226.174 + windowListener = AWTEventMulticaster.remove(windowListener, l);
226.175 }
226.176
226.177 public void updateMinimumSize() {
226.178 @@ -273,6 +334,31 @@
226.179 }
226.180 }
226.181
226.182 + private void updateShape() {
226.183 + // Shape shape = ((Window)target).getShape();
226.184 + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
226.185 + if (shape != null) {
226.186 + applyShape(Region.getInstance(shape, null));
226.187 + }
226.188 + }
226.189 +
226.190 + private void updateOpacity() {
226.191 + // float opacity = ((Window)target).getOpacity();
226.192 + float opacity = AWTAccessor.getWindowAccessor().getOpacity((Window)target);
226.193 + if (opacity < 1.0f) {
226.194 + setOpacity(opacity);
226.195 + }
226.196 + }
226.197 +
226.198 + private void updateOpaque() {
226.199 + this.isOpaque = true;
226.200 + // boolean opaque = ((Window)target).isOpaque();
226.201 + boolean opaque = AWTAccessor.getWindowAccessor().isOpaque((Window)target);
226.202 + if (!opaque) {
226.203 + setOpaque(opaque);
226.204 + }
226.205 + }
226.206 +
226.207 native void setMinSize(int width, int height);
226.208
226.209 /*
226.210 @@ -358,14 +444,6 @@
226.211 });
226.212 }
226.213
226.214 -
226.215 - /*
226.216 - * Called from WCanvasPeer.displayChanged().
226.217 - * Override to do nothing - Window and WWindowPeer GC must never be set to
226.218 - * null!
226.219 - */
226.220 - void clearLocalGC() {}
226.221 -
226.222 public void updateGC() {
226.223 int scrn = getScreenImOn();
226.224 if (screenLog.isLoggable(Level.FINER)) {
226.225 @@ -404,18 +482,36 @@
226.226 oldDev.removeDisplayChangedListener(this);
226.227 newDev.addDisplayChangedListener(this);
226.228 }
226.229 +
226.230 + SunToolkit.executeOnEventHandlerThread((Component)target,
226.231 + new Runnable() {
226.232 + public void run() {
226.233 + AWTAccessor.getComponentAccessor().
226.234 + setGraphicsConfiguration((Component)target, winGraphicsConfig);
226.235 + }
226.236 + });
226.237 }
226.238
226.239 - /*
226.240 - * From the DisplayChangedListener interface
226.241 + /**
226.242 + * From the DisplayChangedListener interface.
226.243 *
226.244 * This method handles a display change - either when the display settings
226.245 * are changed, or when the window has been dragged onto a different
226.246 * display.
226.247 + * Called after a change in the display mode. This event
226.248 + * triggers replacing the surfaceData object (since that object
226.249 + * reflects the current display depth information, which has
226.250 + * just changed).
226.251 */
226.252 public void displayChanged() {
226.253 updateGC();
226.254 - super.displayChanged();
226.255 + }
226.256 +
226.257 + /**
226.258 + * Part of the DisplayChangedListener interface: components
226.259 + * do not need to react to this event
226.260 + */
226.261 + public void paletteChanged() {
226.262 }
226.263
226.264 private native int getScreenImOn();
226.265 @@ -451,8 +547,10 @@
226.266 private volatile int sysH = 0;
226.267
226.268 Rectangle constrainBounds(int x, int y, int width, int height) {
226.269 + GraphicsConfiguration gc = this.winGraphicsConfig;
226.270 +
226.271 // We don't restrict the setBounds() operation if the code is trusted.
226.272 - if (!hasWarningWindow()) {
226.273 + if (!hasWarningWindow() || gc == null) {
226.274 return new Rectangle(x, y, width, height);
226.275 }
226.276
226.277 @@ -461,24 +559,24 @@
226.278 int newW = width;
226.279 int newH = height;
226.280
226.281 - GraphicsConfiguration gc = ((Window)target).getGraphicsConfiguration();
226.282 Rectangle sB = gc.getBounds();
226.283 - Insets sIn = ((Window)target).getToolkit().getScreenInsets(gc);
226.284 + Insets sIn = Toolkit.getDefaultToolkit().getScreenInsets(gc);
226.285
226.286 int screenW = sB.width - sIn.left - sIn.right;
226.287 int screenH = sB.height - sIn.top - sIn.bottom;
226.288
226.289 // If it's undecorated or is not currently visible
226.290 - if (!((Window)target).isVisible() || isTargetUndecorated()) {
226.291 + if (!AWTAccessor.getComponentAccessor().isVisible_NoClientCode(
226.292 + (Component)target) || isTargetUndecorated())
226.293 + {
226.294 // Now check each point is within the visible part of the screen
226.295 int screenX = sB.x + sIn.left;
226.296 int screenY = sB.y + sIn.top;
226.297
226.298 - // First make sure the size is withing the visible part of the screen
226.299 + // First make sure the size is within the visible part of the screen
226.300 if (newW > screenW) {
226.301 newW = screenW;
226.302 }
226.303 -
226.304 if (newH > screenH) {
226.305 newH = screenH;
226.306 }
226.307 @@ -489,7 +587,6 @@
226.308 } else if (newX + newW > screenX + screenW) {
226.309 newX = screenX + screenW - newW;
226.310 }
226.311 -
226.312 if (newY < screenY) {
226.313 newY = screenY;
226.314 } else if (newY + newH > screenY + screenH) {
226.315 @@ -504,7 +601,6 @@
226.316 if (newW > maxW) {
226.317 newW = maxW;
226.318 }
226.319 -
226.320 if (newH > maxH) {
226.321 newH = maxH;
226.322 }
226.323 @@ -513,6 +609,8 @@
226.324 return new Rectangle(newX, newY, newW, newH);
226.325 }
226.326
226.327 + public native void repositionSecurityWarning();
226.328 +
226.329 @Override
226.330 public void setBounds(int x, int y, int width, int height, int op) {
226.331 Rectangle newBounds = constrainBounds(x, y, width, height);
226.332 @@ -525,6 +623,135 @@
226.333 super.setBounds(newBounds.x, newBounds.y, newBounds.width, newBounds.height, op);
226.334 }
226.335
226.336 + @Override
226.337 + public void print(Graphics g) {
226.338 + // We assume we print the whole frame,
226.339 + // so we expect no clip was set previously
226.340 + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target);
226.341 + if (shape != null) {
226.342 + g.setClip(shape);
226.343 + }
226.344 + super.print(g);
226.345 + }
226.346 +
226.347 + private void replaceSurfaceDataRecursively(Component c) {
226.348 + if (c instanceof Container) {
226.349 + for (Component child : ((Container)c).getComponents()) {
226.350 + replaceSurfaceDataRecursively(child);
226.351 + }
226.352 + }
226.353 + ComponentPeer cp = c.getPeer();
226.354 + if (cp instanceof WComponentPeer) {
226.355 + ((WComponentPeer)cp).replaceSurfaceDataLater();
226.356 + }
226.357 + }
226.358 +
226.359 + private native void setOpacity(int iOpacity);
226.360 +
226.361 + public void setOpacity(float opacity) {
226.362 + if (!((SunToolkit)((Window)target).getToolkit()).
226.363 + isWindowOpacitySupported())
226.364 + {
226.365 + return;
226.366 + }
226.367 +
226.368 + replaceSurfaceDataRecursively((Component)getTarget());
226.369 +
226.370 + final int maxOpacity = 0xff;
226.371 + int iOpacity = (int)(opacity * maxOpacity);
226.372 + if (iOpacity < 0) {
226.373 + iOpacity = 0;
226.374 + }
226.375 + if (iOpacity > maxOpacity) {
226.376 + iOpacity = maxOpacity;
226.377 + }
226.378 +
226.379 + setOpacity(iOpacity);
226.380 + updateWindow(null);
226.381 + }
226.382 +
226.383 + private native void setOpaqueImpl(boolean isOpaque);
226.384 +
226.385 + public void setOpaque(boolean isOpaque) {
226.386 + Window target = (Window)getTarget();
226.387 +
226.388 + SunToolkit sunToolkit = (SunToolkit)target.getToolkit();
226.389 + if (!sunToolkit.isWindowTranslucencySupported() ||
226.390 + !sunToolkit.isTranslucencyCapable(target.getGraphicsConfiguration()))
226.391 + {
226.392 + return;
226.393 + }
226.394 +
226.395 + boolean opaqueChanged = this.isOpaque != isOpaque;
226.396 + boolean isVistaOS = Win32GraphicsEnvironment.isVistaOS();
226.397 +
226.398 + if (opaqueChanged && !isVistaOS){
226.399 + // non-Vista OS: only replace the surface data if the opacity
226.400 + // status changed (see WComponentPeer.isAccelCapable() for more)
226.401 + replaceSurfaceDataRecursively(target);
226.402 + }
226.403 +
226.404 + this.isOpaque = isOpaque;
226.405 +
226.406 + setOpaqueImpl(isOpaque);
226.407 +
226.408 + if (opaqueChanged) {
226.409 + if (isOpaque) {
226.410 + TranslucentWindowPainter currentPainter = painter;
226.411 + if (currentPainter != null) {
226.412 + currentPainter.flush();
226.413 + painter = null;
226.414 + }
226.415 + } else {
226.416 + painter = TranslucentWindowPainter.createInstance(this);
226.417 + }
226.418 + }
226.419 +
226.420 + if (opaqueChanged && isVistaOS) {
226.421 + // On Vista: setting the window non-opaque makes the window look
226.422 + // rectangular, though still catching the mouse clicks within
226.423 + // its shape only. To restore the correct visual appearance
226.424 + // of the window (i.e. w/ the correct shape) we have to reset
226.425 + // the shape.
226.426 + Shape shape = AWTAccessor.getWindowAccessor().getShape(target);
226.427 + if (shape != null) {
226.428 + AWTAccessor.getWindowAccessor().setShape(target, shape);
226.429 + }
226.430 + }
226.431 +
226.432 + updateWindow(null);
226.433 + }
226.434 +
226.435 + public native void updateWindowImpl(int[] data, int width, int height);
226.436 +
226.437 + public void updateWindow(BufferedImage backBuffer) {
226.438 + if (isOpaque) {
226.439 + return;
226.440 + }
226.441 +
226.442 + TranslucentWindowPainter currentPainter = painter;
226.443 + if (currentPainter != null) {
226.444 + currentPainter.updateWindow(backBuffer);
226.445 + } else if (log.isLoggable(Level.FINER)) {
226.446 + log.log(Level.FINER,
226.447 + "Translucent window painter is null in updateWindow");
226.448 + }
226.449 + }
226.450 +
226.451 + /**
226.452 + * Paints the Applet Warning into the passed Graphics2D. This method is
226.453 + * called by the TranslucentWindowPainter before updating the layered
226.454 + * window.
226.455 + *
226.456 + * @param g Graphics context to paint the warning to
226.457 + * @param w the width of the area
226.458 + * @param h the height of the area
226.459 + * @see TranslucentWindowPainter
226.460 + */
226.461 + public void paintAppletWarning(Graphics2D g, int w, int h) {
226.462 + // REMIND: the applet warning needs to be painted here
226.463 + }
226.464 +
226.465 /*
226.466 * The method maps the list of the active windows to the window's AppContext,
226.467 * then the method registers ActiveWindowListener, GuiDisposedListener listeners;
227.1 --- a/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java Thu Apr 16 17:42:00 2009 +0100
227.2 +++ b/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java Thu Apr 16 19:10:32 2009 -0700
227.3 @@ -1,5 +1,5 @@
227.4 /*
227.5 - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
227.6 + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
227.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
227.8 *
227.9 * This code is free software; you can redistribute it and/or modify it
227.10 @@ -37,6 +37,7 @@
227.11 import java.util.ArrayList;
227.12 import java.util.HashMap;
227.13 import sun.awt.SunToolkit;
227.14 +import sun.awt.AWTAccessor;
227.15 import sun.awt.Win32GraphicsConfig;
227.16 import sun.awt.windows.WComponentPeer;
227.17 import sun.java2d.InvalidPipeException;
227.18 @@ -284,14 +285,12 @@
227.19 * @param peer for which target's the repaint should be issued
227.20 */
227.21 private void repaintPeerTarget(WComponentPeer peer) {
227.22 - // we don't want to call user code on our priveleged
227.23 - // thread, delegate to EDT
227.24 - final Component target = (Component)peer.getTarget();
227.25 - SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
227.26 - public void run() {
227.27 - target.repaint();
227.28 - }
227.29 - });
227.30 + Component target = (Component)peer.getTarget();
227.31 + Rectangle bounds = AWTAccessor.getComponentAccessor().getBounds(target);
227.32 + // the system-level painting operations should call the handlePaint()
227.33 + // method of the WComponentPeer class to repaint the component;
227.34 + // calling repaint() forces AWT to make call to update()
227.35 + peer.handlePaint(0, 0, bounds.width, bounds.height);
227.36 }
227.37
227.38 /**
228.1 --- a/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java Thu Apr 16 17:42:00 2009 +0100
228.2 +++ b/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java Thu Apr 16 19:10:32 2009 -0700
228.3 @@ -1,5 +1,5 @@
228.4 /*
228.5 - * Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
228.6 + * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved.
228.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
228.8 *
228.9 * This code is free software; you can redistribute it and/or modify it
228.10 @@ -72,9 +72,8 @@
228.11 // the OGL pipeline can render directly to the screen and interfere
228.12 // with layered windows, which is why we don't allow accelerated
228.13 // surfaces in this case
228.14 - if (!peer.isAccelCapable())
228.15 - // REMIND: commented until toplevel translucency is implemented
228.16 -// || !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
228.17 + if (!peer.isAccelCapable() ||
228.18 + !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
228.19 {
228.20 return null;
228.21 }
228.22 @@ -93,9 +92,8 @@
228.23 // the OGL pipeline can render directly to the screen and interfere
228.24 // with layered windows, which is why we don't allow accelerated
228.25 // surfaces in this case
228.26 - if (!peer.isAccelCapable())
228.27 - // REMIND: commented until toplevel translucency is implemented
228.28 -// || !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
228.29 + if (!peer.isAccelCapable() ||
228.30 + !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget()))
228.31 {
228.32 return null;
228.33 }
229.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
229.2 +++ b/src/windows/classes/sun/net/NetHooks.java Thu Apr 16 19:10:32 2009 -0700
229.3 @@ -0,0 +1,59 @@
229.4 +/*
229.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
229.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
229.7 + *
229.8 + * This code is free software; you can redistribute it and/or modify it
229.9 + * under the terms of the GNU General Public License version 2 only, as
229.10 + * published by the Free Software Foundation. Sun designates this
229.11 + * particular file as subject to the "Classpath" exception as provided
229.12 + * by Sun in the LICENSE file that accompanied this code.
229.13 + *
229.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
229.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
229.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
229.17 + * version 2 for more details (a copy is included in the LICENSE file that
229.18 + * accompanied this code).
229.19 + *
229.20 + * You should have received a copy of the GNU General Public License version
229.21 + * 2 along with this work; if not, write to the Free Software Foundation,
229.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
229.23 + *
229.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
229.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
229.26 + * have any questions.
229.27 + */
229.28 +package sun.net;
229.29 +
229.30 +import java.net.InetAddress;
229.31 +import java.io.FileDescriptor;
229.32 +import java.io.IOException;
229.33 +
229.34 +/**
229.35 + * Defines static methods to ensure that any installed net hooks are invoked
229.36 + * prior to binding or connecting TCP sockets.
229.37 + */
229.38 +
229.39 +public final class NetHooks {
229.40 +
229.41 + /**
229.42 + * Invoke prior to binding a TCP socket.
229.43 + */
229.44 + public static void beforeTcpBind(FileDescriptor fdObj,
229.45 + InetAddress address,
229.46 + int port)
229.47 + throws IOException
229.48 + {
229.49 + // nothing to do
229.50 + }
229.51 +
229.52 + /**
229.53 + * Invoke prior to connecting an unbound TCP socket.
229.54 + */
229.55 + public static void beforeTcpConnect(FileDescriptor fdObj,
229.56 + InetAddress address,
229.57 + int port)
229.58 + throws IOException
229.59 + {
229.60 + // nothing to do
229.61 + }
229.62 +}
230.1 --- a/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Thu Apr 16 17:42:00 2009 +0100
230.2 +++ b/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Thu Apr 16 19:10:32 2009 -0700
230.3 @@ -34,7 +34,6 @@
230.4 import java.nio.channels.ClosedSelectorException;
230.5 import java.nio.channels.Pipe;
230.6 import java.nio.channels.SelectableChannel;
230.7 -import java.nio.channels.SelectionKey;
230.8 import java.io.IOException;
230.9 import java.util.List;
230.10 import java.util.ArrayList;
230.11 @@ -72,7 +71,7 @@
230.12 private int threadsCount = 0;
230.13
230.14 // A list of helper threads for select.
230.15 - private final List<Thread> threads = new ArrayList<Thread>();
230.16 + private final List<SelectThread> threads = new ArrayList<SelectThread>();
230.17
230.18 //Pipe used as a wakeup object.
230.19 private final Pipe wakeupPipe;
230.20 @@ -201,7 +200,7 @@
230.21 Thread.currentThread().interrupt();
230.22 }
230.23 }
230.24 - if (thread.index >= threads.size()) { // redundant thread
230.25 + if (thread.isZombie()) { // redundant thread
230.26 return true; // will cause run() to exit.
230.27 } else {
230.28 thread.lastRun = runsCounter; // update lastRun
230.29 @@ -388,9 +387,10 @@
230.30
230.31 // Represents a helper thread used for select.
230.32 private final class SelectThread extends Thread {
230.33 - private int index; // index of this thread
230.34 - SubSelector subSelector;
230.35 + private final int index; // index of this thread
230.36 + final SubSelector subSelector;
230.37 private long lastRun = 0; // last run number
230.38 + private volatile boolean zombie;
230.39 // Creates a new thread
230.40 private SelectThread(int i) {
230.41 this.index = i;
230.42 @@ -398,6 +398,12 @@
230.43 //make sure we wait for next round of poll
230.44 this.lastRun = startLock.runsCounter;
230.45 }
230.46 + void makeZombie() {
230.47 + zombie = true;
230.48 + }
230.49 + boolean isZombie() {
230.50 + return zombie;
230.51 + }
230.52 public void run() {
230.53 while (true) { // poll loop
230.54 // wait for the start of poll. If this thread has become
230.55 @@ -432,7 +438,7 @@
230.56 } else if (threadsCount < threads.size()) {
230.57 // Some threads become redundant. Remove them from the threads List.
230.58 for (int i = threads.size() - 1 ; i >= threadsCount; i--)
230.59 - threads.remove(i);
230.60 + threads.remove(i).makeZombie();
230.61 }
230.62 }
230.63
230.64 @@ -468,10 +474,9 @@
230.65 updateCount++;
230.66 int numKeysUpdated = 0;
230.67 numKeysUpdated += subSelector.processSelectedKeys(updateCount);
230.68 - Iterator it = threads.iterator();
230.69 - while (it.hasNext())
230.70 - numKeysUpdated += ((SelectThread)it.next()).subSelector.
230.71 - processSelectedKeys(updateCount);
230.72 + for (SelectThread t: threads) {
230.73 + numKeysUpdated += t.subSelector.processSelectedKeys(updateCount);
230.74 + }
230.75 return numKeysUpdated;
230.76 }
230.77
230.78 @@ -495,13 +500,13 @@
230.79 }
230.80 pollWrapper.free();
230.81 pollWrapper = null;
230.82 - selectedKeys = null;
230.83 - channelArray = null;
230.84 - threads.clear();
230.85 - // Call startThreads. All remaining helper threads now exit,
230.86 - // since threads.size() = 0;
230.87 - startLock.startThreads();
230.88 - }
230.89 + selectedKeys = null;
230.90 + channelArray = null;
230.91 + // Make all remaining helper threads exit
230.92 + for (SelectThread t: threads)
230.93 + t.makeZombie();
230.94 + startLock.startThreads();
230.95 + }
230.96 }
230.97 }
230.98 }
231.1 --- a/src/windows/native/java/io/WinNTFileSystem_md.c Thu Apr 16 17:42:00 2009 +0100
231.2 +++ b/src/windows/native/java/io/WinNTFileSystem_md.c Thu Apr 16 19:10:32 2009 -0700
231.3 @@ -309,12 +309,13 @@
231.4 /* No template file */
231.5 NULL);
231.6 if (h != INVALID_HANDLE_VALUE) {
231.7 - GetFileTime(h, NULL, NULL, &t);
231.8 + if (GetFileTime(h, NULL, NULL, &t)) {
231.9 + modTime.LowPart = (DWORD) t.dwLowDateTime;
231.10 + modTime.HighPart = (LONG) t.dwHighDateTime;
231.11 + rv = modTime.QuadPart / 10000;
231.12 + rv -= 11644473600000;
231.13 + }
231.14 CloseHandle(h);
231.15 - modTime.LowPart = (DWORD) t.dwLowDateTime;
231.16 - modTime.HighPart = (LONG) t.dwHighDateTime;
231.17 - rv = modTime.QuadPart / 10000;
231.18 - rv -= 11644473600000;
231.19 }
231.20 free(pathbuf);
231.21 return rv;
232.1 --- a/src/windows/native/java/lang/java_props_md.c Thu Apr 16 17:42:00 2009 +0100
232.2 +++ b/src/windows/native/java/lang/java_props_md.c Thu Apr 16 19:10:32 2009 -0700
232.3 @@ -717,6 +717,7 @@
232.4 * Windows Vista family 6 0
232.5 * Windows 2008 6 0
232.6 * where ((&ver.wServicePackMinor) + 2) = 1
232.7 + * Windows 7 6 1
232.8 *
232.9 * This mapping will presumably be augmented as new Windows
232.10 * versions are released.
232.11 @@ -773,13 +774,18 @@
232.12 * and Windows Vista are identical, you must also test
232.13 * whether the wProductType member is VER_NT_WORKSTATION.
232.14 * If wProductType is VER_NT_WORKSTATION, the operating
232.15 - * system is Windows Vista; otherwise, it is Windows
232.16 + * system is Windows Vista or 7; otherwise, it is Windows
232.17 * Server 2008."
232.18 */
232.19 - if (ver.wProductType == VER_NT_WORKSTATION)
232.20 - sprops.os_name = "Windows Vista";
232.21 - else
232.22 + if (ver.wProductType == VER_NT_WORKSTATION) {
232.23 + switch (ver.dwMinorVersion) {
232.24 + case 0: sprops.os_name = "Windows Vista"; break;
232.25 + case 1: sprops.os_name = "Windows 7"; break;
232.26 + default: sprops.os_name = "Windows NT (unknown)";
232.27 + }
232.28 + } else {
232.29 sprops.os_name = "Windows Server 2008";
232.30 + }
232.31 } else {
232.32 sprops.os_name = "Windows NT (unknown)";
232.33 }
233.1 --- a/src/windows/native/sun/awt/utility/rect.h Thu Apr 16 17:42:00 2009 +0100
233.2 +++ b/src/windows/native/sun/awt/utility/rect.h Thu Apr 16 19:10:32 2009 -0700
233.3 @@ -1,5 +1,5 @@
233.4 /*
233.5 - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
233.6 + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
233.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
233.8 *
233.9 * This code is free software; you can redistribute it and/or modify it
233.10 @@ -43,5 +43,15 @@
233.11
233.12 #define RECT_INC_HEIGHT(r) (r).bottom++
233.13
233.14 +#if defined(__cplusplus)
233.15 +extern "C" {
233.16 +#endif
233.17 +
233.18 +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height,
233.19 + unsigned char * buf, RECT_T * outBuf);
233.20 +
233.21 +#if defined(__cplusplus)
233.22 +}
233.23 +#endif
233.24
233.25 #endif // _AWT_RECT_H
234.1 --- a/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp Thu Apr 16 17:42:00 2009 +0100
234.2 +++ b/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp Thu Apr 16 19:10:32 2009 -0700
234.3 @@ -1,5 +1,5 @@
234.4 /*
234.5 - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
234.6 + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
234.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
234.8 *
234.9 * This code is free software; you can redistribute it and/or modify it
234.10 @@ -613,17 +613,15 @@
234.11
234.12 res = pTmpSurface->LockRect(&lockedRect, NULL, D3DLOCK_NOSYSLOCK);
234.13 if (SUCCEEDED(res)) {
234.14 - // REMIND: commented until translucent window support is integrated
234.15 -// hBitmap =
234.16 -// BitmapUtil::CreateBitmapFromARGBPre(w, h,
234.17 -// lockedRect.Pitch,
234.18 -// (int*)lockedRect.pBits);
234.19 + hBitmap =
234.20 + BitmapUtil::CreateBitmapFromARGBPre(w, h,
234.21 + lockedRect.Pitch,
234.22 + (int*)lockedRect.pBits);
234.23 pTmpSurface->UnlockRect();
234.24 }
234.25 RETURN_STATUS_IF_NULL(hBitmap, JNI_FALSE);
234.26
234.27 - // REMIND: commented until translucent window support is integrated
234.28 -// window->UpdateWindow(env, NULL, w, h, hBitmap);
234.29 + window->UpdateWindow(env, NULL, w, h, hBitmap);
234.30
234.31 // hBitmap is released in UpdateWindow
234.32
235.1 --- a/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c Thu Apr 16 17:42:00 2009 +0100
235.2 +++ b/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c Thu Apr 16 19:10:32 2009 -0700
235.3 @@ -1,5 +1,5 @@
235.4 /*
235.5 - * Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
235.6 + * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved.
235.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
235.8 *
235.9 * This code is free software; you can redistribute it and/or modify it
235.10 @@ -625,17 +625,15 @@
235.11 j2d_glPixelStorei(GL_PACK_ALIGNMENT, 4);
235.12
235.13 // the pixels read from the surface are already premultiplied
235.14 - // REMIND: commented until translucent window support is integrated
235.15 -// hBitmap = BitmapUtil_CreateBitmapFromARGBPre(w, h, scanStride,
235.16 -// (int*)pDst);
235.17 + hBitmap = BitmapUtil_CreateBitmapFromARGBPre(w, h, scanStride,
235.18 + (int*)pDst);
235.19 free(pDst);
235.20
235.21 if (hBitmap == NULL) {
235.22 return JNI_FALSE;
235.23 }
235.24
235.25 - // REMIND: commented until translucent window support is integrated
235.26 - // AwtWindow_UpdateWindow(env, peer, w, h, hBitmap);
235.27 + AwtWindow_UpdateWindow(env, peer, w, h, hBitmap);
235.28
235.29 // hBitmap is released in UpdateWindow
235.30
236.1 --- a/src/windows/native/sun/windows/ComCtl32Util.cpp Thu Apr 16 17:42:00 2009 +0100
236.2 +++ b/src/windows/native/sun/windows/ComCtl32Util.cpp Thu Apr 16 19:10:32 2009 -0700
236.3 @@ -27,6 +27,7 @@
236.4 #include "ComCtl32Util.h"
236.5
236.6 ComCtl32Util::ComCtl32Util() {
236.7 + m_bToolTipControlInitialized = FALSE;
236.8 }
236.9
236.10 ComCtl32Util::~ComCtl32Util() {
236.11 @@ -36,7 +37,8 @@
236.12 INITCOMMONCONTROLSEX iccex;
236.13 memset(&iccex, 0, sizeof(INITCOMMONCONTROLSEX));
236.14 iccex.dwSize = sizeof(INITCOMMONCONTROLSEX);
236.15 - ::InitCommonControlsEx(&iccex);
236.16 + iccex.dwICC = ICC_TAB_CLASSES;
236.17 + m_bToolTipControlInitialized = ::InitCommonControlsEx(&iccex);
236.18 }
236.19
236.20 WNDPROC ComCtl32Util::SubclassHWND(HWND hwnd, WNDPROC _WindowProc) {
237.1 --- a/src/windows/native/sun/windows/ComCtl32Util.h Thu Apr 16 17:42:00 2009 +0100
237.2 +++ b/src/windows/native/sun/windows/ComCtl32Util.h Thu Apr 16 19:10:32 2009 -0700
237.3 @@ -40,6 +40,10 @@
237.4
237.5 void InitLibraries();
237.6
237.7 + INLINE BOOL IsToolTipControlInitialized() {
237.8 + return m_bToolTipControlInitialized;
237.9 + }
237.10 +
237.11 WNDPROC SubclassHWND(HWND hwnd, WNDPROC _WindowProc);
237.12 // DefWindowProc is the same as returned from SubclassHWND
237.13 void UnsubclassHWND(HWND hwnd, WNDPROC _WindowProc, WNDPROC _DefWindowProc);
237.14 @@ -50,6 +54,8 @@
237.15 ComCtl32Util();
237.16 ~ComCtl32Util();
237.17
237.18 + BOOL m_bToolTipControlInitialized;
237.19 +
237.20 // comctl32.dll version 6 window proc
237.21 static LRESULT CALLBACK SharedWindowProc(HWND hwnd, UINT message,
237.22 WPARAM wParam, LPARAM lParam,
238.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
238.2 +++ b/src/windows/native/sun/windows/DllUtil.cpp Thu Apr 16 19:10:32 2009 -0700
238.3 @@ -0,0 +1,87 @@
238.4 +/*
238.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
238.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
238.7 + *
238.8 + * This code is free software; you can redistribute it and/or modify it
238.9 + * under the terms of the GNU General Public License version 2 only, as
238.10 + * published by the Free Software Foundation. Sun designates this
238.11 + * particular file as subject to the "Classpath" exception as provided
238.12 + * by Sun in the LICENSE file that accompanied this code.
238.13 + *
238.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
238.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
238.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
238.17 + * version 2 for more details (a copy is included in the LICENSE file that
238.18 + * accompanied this code).
238.19 + *
238.20 + * You should have received a copy of the GNU General Public License version
238.21 + * 2 along with this work; if not, write to the Free Software Foundation,
238.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
238.23 + *
238.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
238.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
238.26 + * have any questions.
238.27 + */
238.28 +
238.29 +
238.30 +#include "DllUtil.h"
238.31 +
238.32 +// Disable warning about using this in the initializer list.
238.33 +#pragma warning( disable : 4355)
238.34 +
238.35 +DllUtil::~DllUtil()
238.36 +{
238.37 + if (module != NULL) {
238.38 + ::FreeLibrary(module);
238.39 + module = NULL;
238.40 + }
238.41 +}
238.42 +
238.43 +HMODULE DllUtil::GetModule()
238.44 +{
238.45 + if (!module) {
238.46 + module = ::LoadLibrary(name);
238.47 + }
238.48 + return module;
238.49 +}
238.50 +
238.51 +FARPROC DllUtil::GetProcAddress(LPCSTR name)
238.52 +{
238.53 + if (GetModule()) {
238.54 + return ::GetProcAddress(GetModule(), name);
238.55 + }
238.56 + throw LibraryUnavailableException();
238.57 +}
238.58 +
238.59 +DwmAPI & DwmAPI::GetInstance()
238.60 +{
238.61 + static DwmAPI dll;
238.62 + return dll;
238.63 +}
238.64 +
238.65 +DwmAPI::DwmAPI() :
238.66 + DllUtil(_T("DWMAPI.DLL")),
238.67 + DwmIsCompositionEnabledFunction((DllUtil*)this, "DwmIsCompositionEnabled"),
238.68 + DwmGetWindowAttributeFunction((DllUtil*)this, "DwmGetWindowAttribute")
238.69 +{
238.70 +}
238.71 +
238.72 +HRESULT DwmAPI::DwmIsCompositionEnabled(BOOL * pfEnabled)
238.73 +{
238.74 + if (GetInstance().DwmIsCompositionEnabledFunction()) {
238.75 + return GetInstance().DwmIsCompositionEnabledFunction()(pfEnabled);
238.76 + }
238.77 + throw FunctionUnavailableException();
238.78 +}
238.79 +
238.80 +HRESULT DwmAPI::DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute,
238.81 + PVOID pvAttribute, DWORD cbAttribute)
238.82 +{
238.83 + if (GetInstance().DwmGetWindowAttributeFunction()) {
238.84 + return GetInstance().DwmGetWindowAttributeFunction()(hwnd, dwAttribute,
238.85 + pvAttribute, cbAttribute);
238.86 + }
238.87 + throw FunctionUnavailableException();
238.88 +}
238.89 +
238.90 +
239.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
239.2 +++ b/src/windows/native/sun/windows/DllUtil.h Thu Apr 16 19:10:32 2009 -0700
239.3 @@ -0,0 +1,97 @@
239.4 +/*
239.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
239.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
239.7 + *
239.8 + * This code is free software; you can redistribute it and/or modify it
239.9 + * under the terms of the GNU General Public License version 2 only, as
239.10 + * published by the Free Software Foundation. Sun designates this
239.11 + * particular file as subject to the "Classpath" exception as provided
239.12 + * by Sun in the LICENSE file that accompanied this code.
239.13 + *
239.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
239.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
239.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
239.17 + * version 2 for more details (a copy is included in the LICENSE file that
239.18 + * accompanied this code).
239.19 + *
239.20 + * You should have received a copy of the GNU General Public License version
239.21 + * 2 along with this work; if not, write to the Free Software Foundation,
239.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
239.23 + *
239.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
239.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
239.26 + * have any questions.
239.27 + */
239.28 +
239.29 +#ifndef DLLUTIL_H
239.30 +#define DLLUTIL_H
239.31 +
239.32 +#include <tchar.h>
239.33 +#include <windows.h>
239.34 +
239.35 +/**
239.36 + * Utility class to handle dynamically loadable libraries.
239.37 + *
239.38 + * NOTE: THIS CLASS IS NOT THREAD-SAFE!
239.39 + */
239.40 +class DllUtil {
239.41 + public:
239.42 + class Exception {};
239.43 + class LibraryUnavailableException : public Exception {};
239.44 + class FunctionUnavailableException : public Exception {};
239.45 +
239.46 + FARPROC GetProcAddress(LPCSTR name);
239.47 +
239.48 + protected:
239.49 + DllUtil(const TCHAR * name) : name(name), module(NULL) {}
239.50 + virtual ~DllUtil();
239.51 +
239.52 + HMODULE GetModule();
239.53 +
239.54 + template <class FunctionType> class Function {
239.55 + public:
239.56 + Function(DllUtil * dll, LPCSTR name) :
239.57 + dll(dll), name(name), function(NULL) {}
239.58 +
239.59 + inline FunctionType operator () () {
239.60 + if (!function) {
239.61 + function = (FunctionType)dll->GetProcAddress(name);
239.62 + }
239.63 + return function;
239.64 + }
239.65 +
239.66 + private:
239.67 + DllUtil * const dll;
239.68 + LPCSTR name;
239.69 +
239.70 + FunctionType function;
239.71 + };
239.72 +
239.73 + private:
239.74 + const TCHAR * const name;
239.75 + HMODULE module;
239.76 +};
239.77 +
239.78 +class DwmAPI : public DllUtil {
239.79 + public:
239.80 + // See DWMWINDOWATTRIBUTE enum in dwmapi.h
239.81 + static const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9;
239.82 +
239.83 + static HRESULT DwmIsCompositionEnabled(BOOL * pfEnabled);
239.84 + static HRESULT DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute,
239.85 + PVOID pvAttribute, DWORD cbAttribute);
239.86 +
239.87 + private:
239.88 + static DwmAPI & GetInstance();
239.89 + DwmAPI();
239.90 +
239.91 + typedef HRESULT (WINAPI *DwmIsCompositionEnabledType)(BOOL*);
239.92 + Function<DwmIsCompositionEnabledType> DwmIsCompositionEnabledFunction;
239.93 +
239.94 + typedef HRESULT (WINAPI *DwmGetWindowAttributeType)(HWND hwnd, DWORD dwAttribute,
239.95 + PVOID pvAttribute, DWORD cbAttribute);
239.96 + Function<DwmGetWindowAttributeType> DwmGetWindowAttributeFunction;
239.97 +};
239.98 +
239.99 +#endif // DLLUTIL_H
239.100 +
240.1 --- a/src/windows/native/sun/windows/ShellFolder2.cpp Thu Apr 16 17:42:00 2009 +0100
240.2 +++ b/src/windows/native/sun/windows/ShellFolder2.cpp Thu Apr 16 19:10:32 2009 -0700
240.3 @@ -225,6 +225,34 @@
240.4 FID_folderType = env->GetFieldID(cls, "folderType", "Ljava/lang/String;");
240.5 }
240.6
240.7 +
240.8 +/*
240.9 +* Class: sun_awt_shell_Win32ShellFolderManager2
240.10 +* Method: initializeCom
240.11 +* Signature: ()V
240.12 +*/
240.13 +JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolderManager2_initializeCom
240.14 + (JNIEnv* env, jclass cls)
240.15 +{
240.16 + HRESULT hr = ::CoInitialize(NULL);
240.17 + if (FAILED(hr)) {
240.18 + char c[64];
240.19 + sprintf(c, "Could not initialize COM: HRESULT=0x%08X", hr);
240.20 + JNU_ThrowInternalError(env, c);
240.21 + }
240.22 +}
240.23 +
240.24 +/*
240.25 +* Class: sun_awt_shell_Win32ShellFolderManager2
240.26 +* Method: uninitializeCom
240.27 +* Signature: ()V
240.28 +*/
240.29 +JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolderManager2_uninitializeCom
240.30 + (JNIEnv* env, jclass cls)
240.31 +{
240.32 + ::CoUninitialize();
240.33 +}
240.34 +
240.35 static IShellIcon* getIShellIcon(IShellFolder* pIShellFolder) {
240.36 // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp
240.37 HRESULT hres;
240.38 @@ -239,29 +267,6 @@
240.39 return (IShellIcon*)NULL;
240.40 }
240.41
240.42 -// Fixed 6263669
240.43 -//
240.44 -// CoInitialize wrapper
240.45 -// call CoInitialize to initialize COM in STA mode and check result
240.46 -// RPC_E_CHANGED_MODE means COM has already been initialized in MTA mode,
240.47 -// so don't set the flag to call CoUninitialize later
240.48 -
240.49 -BOOL CoInit(BOOL& doCoUninit) { // returns TRUE if initialized successfully
240.50 - switch(::CoInitialize(NULL)) {
240.51 - case S_OK:
240.52 - case S_FALSE:
240.53 - doCoUninit = TRUE;
240.54 - return TRUE;
240.55 - break;
240.56 - case RPC_E_CHANGED_MODE:
240.57 - doCoUninit = FALSE;
240.58 - return TRUE;
240.59 - break;
240.60 - default:
240.61 - return FALSE;
240.62 - }
240.63 -}
240.64 -
240.65
240.66 /*
240.67 * Class: sun_awt_shell_Win32ShellFolder2
240.68 @@ -507,10 +512,10 @@
240.69
240.70 /*
240.71 * Class: sun_awt_shell_Win32ShellFolder2
240.72 - * Method: getFileSystemPath
240.73 + * Method: getFileSystemPath0
240.74 * Signature: (I)Ljava/lang/String;
240.75 */
240.76 -JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileSystemPath__I
240.77 +JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileSystemPath0
240.78 (JNIEnv* env, jclass cls, jint csidl)
240.79 {
240.80 LPITEMIDLIST relPIDL;
240.81 @@ -611,18 +616,6 @@
240.82 if (SUCCEEDED (hr)) {
240.83 return (jlong)pFolder;
240.84 }
240.85 - if (IS_WINVISTA) {
240.86 - BOOL doCoUninit;
240.87 - if (CoInit(doCoUninit)) {
240.88 - hr = pParent->BindToObject(pidl, NULL, IID_IShellFolder, (void**)&pFolder);
240.89 - if (doCoUninit) {
240.90 - ::CoUninitialize();
240.91 - }
240.92 - if (SUCCEEDED (hr)) {
240.93 - return (jlong)pFolder;
240.94 - }
240.95 - }
240.96 - }
240.97 return 0;
240.98 }
240.99
240.100 @@ -650,7 +643,10 @@
240.101 return NULL;
240.102 }
240.103
240.104 - pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret);
240.105 + hres = pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret);
240.106 + if (FAILED(hres)) {
240.107 + return NULL;
240.108 + }
240.109
240.110 switch (strret.uType) {
240.111 case STRRET_CSTR :
240.112 @@ -669,10 +665,6 @@
240.113 break;
240.114 }
240.115
240.116 - BOOL doCoUninit;
240.117 - if (!CoInit(doCoUninit)) {
240.118 - return 0;
240.119 - }
240.120 IShellLinkW* psl;
240.121 hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID *)&psl);
240.122 if (SUCCEEDED(hres)) {
240.123 @@ -692,10 +684,10 @@
240.124 }
240.125 psl->Release();
240.126 }
240.127 - if (doCoUninit) {
240.128 - ::CoUninitialize();
240.129 +
240.130 + if (strret.uType == STRRET_WSTR) {
240.131 + CoTaskMemFree(strret.pOleStr);
240.132 }
240.133 -
240.134 if (SUCCEEDED(hres)) {
240.135 return (jlong)pidl;
240.136 } else {
240.137 @@ -741,7 +733,7 @@
240.138 /*
240.139 * Class: sun_awt_shell_Win32ShellFolder2
240.140 * Method: getDisplayNameOf
240.141 - * Signature: (JJ)Ljava/lang/String;
240.142 + * Signature: (JJI)Ljava/lang/String;
240.143 */
240.144 JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getDisplayNameOf
240.145 (JNIEnv* env, jclass cls, jlong parentIShellFolder, jlong relativePIDL, jint attrs)
240.146 @@ -758,7 +750,11 @@
240.147 if (pParent->GetDisplayNameOf(pidl, attrs, &strret) != S_OK) {
240.148 return NULL;
240.149 }
240.150 - return jstringFromSTRRET(env, pidl, &strret);
240.151 + jstring result = jstringFromSTRRET(env, pidl, &strret);
240.152 + if (strret.uType == STRRET_WSTR) {
240.153 + CoTaskMemFree(strret.pOleStr);
240.154 + }
240.155 + return result;
240.156 }
240.157
240.158 /*
240.159 @@ -833,10 +829,6 @@
240.160 }
240.161
240.162 INT index = -1;
240.163 - BOOL doCoUninit;
240.164 - if (!CoInit(doCoUninit)) {
240.165 - return (jint)index;
240.166 - }
240.167
240.168 HRESULT hres;
240.169 // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp
240.170 @@ -844,9 +836,6 @@
240.171 hres = pIShellIcon->GetIconOf(pidl, GIL_FORSHELL, &index);
240.172 }
240.173
240.174 - if (doCoUninit) {
240.175 - ::CoUninitialize();
240.176 - }
240.177 return (jint)index;
240.178 }
240.179
240.180 @@ -866,10 +855,6 @@
240.181 }
240.182
240.183 HICON hIcon = NULL;
240.184 - BOOL doCoUninit;
240.185 - if (!CoInit(doCoUninit)) {
240.186 - return (jlong)hIcon;
240.187 - }
240.188
240.189 HRESULT hres;
240.190 IExtractIconW* pIcon;
240.191 @@ -894,9 +879,6 @@
240.192 }
240.193 pIcon->Release();
240.194 }
240.195 - if (doCoUninit) {
240.196 - ::CoUninitialize();
240.197 - }
240.198 return (jlong)hIcon;
240.199 }
240.200
240.201 @@ -994,14 +976,10 @@
240.202 HINSTANCE libComCtl32;
240.203 HINSTANCE libShell32;
240.204
240.205 -
240.206 libShell32 = LoadLibrary(TEXT("shell32.dll"));
240.207 if (libShell32 != NULL) {
240.208 - long osVersion = GetVersion();
240.209 - BOOL isVista = (!(osVersion & 0x80000000) && (LOBYTE(LOWORD(osVersion)) >= 6));
240.210 -
240.211 hBitmap = (HBITMAP)LoadImage(libShell32,
240.212 - isVista ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
240.213 + IS_WINVISTA ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216),
240.214 IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
240.215 }
240.216 if (hBitmap == NULL) {
240.217 @@ -1095,46 +1073,6 @@
240.218 }
240.219
240.220
240.221 -// Helper functions for workaround COM initialization:
240.222 -
240.223 -static HRESULT GetDetailsOfFolder(
240.224 - IShellFolder2 *folder,
240.225 - LPCITEMIDLIST pidl,
240.226 - UINT column,
240.227 - SHELLDETAILS *psd)
240.228 -{
240.229 - HRESULT hr = folder->GetDetailsOf(pidl, column, psd);
240.230 - if (IS_WINVISTA && FAILED (hr)) {
240.231 - BOOL doCoUninit;
240.232 - if (CoInit(doCoUninit)) {
240.233 - hr = folder->GetDetailsOf(pidl, column, psd);
240.234 - if (doCoUninit) {
240.235 - ::CoUninitialize();
240.236 - }
240.237 - }
240.238 - }
240.239 - return hr;
240.240 -}
240.241 -
240.242 -static HRESULT GetDetailsOf(
240.243 - IShellDetails *details,
240.244 - LPCITEMIDLIST pidl,
240.245 - UINT column,
240.246 - SHELLDETAILS *psd)
240.247 -{
240.248 - HRESULT hr = details->GetDetailsOf(pidl, column, psd);
240.249 - if (IS_WINVISTA && FAILED (hr)) {
240.250 - BOOL doCoUninit;
240.251 - if (CoInit(doCoUninit)) {
240.252 - hr = details->GetDetailsOf(pidl, column, psd);
240.253 - if (doCoUninit) {
240.254 - ::CoUninitialize();
240.255 - }
240.256 - }
240.257 - }
240.258 - return hr;
240.259 -}
240.260 -
240.261 /*
240.262 * Helper function for creating Java column info object
240.263 */
240.264 @@ -1187,7 +1125,7 @@
240.265 int colNum = -1;
240.266 hr = S_OK;
240.267 do{
240.268 - hr = GetDetailsOfFolder(pIShellFolder2, NULL, ++colNum, &sd);
240.269 + hr = pIShellFolder2->GetDetailsOf(NULL, ++colNum, &sd);
240.270 } while (SUCCEEDED (hr));
240.271
240.272 jobjectArray columns =
240.273 @@ -1202,7 +1140,7 @@
240.274 colNum = 0;
240.275 hr = S_OK;
240.276 while (SUCCEEDED (hr)) {
240.277 - hr = GetDetailsOfFolder(pIShellFolder2, NULL, colNum, &sd);
240.278 + hr = pIShellFolder2->GetDetailsOf(NULL, colNum, &sd);
240.279
240.280 if (SUCCEEDED (hr)) {
240.281 hr = pIShellFolder2->GetDefaultColumnState(colNum, &csFlags);
240.282 @@ -1232,7 +1170,7 @@
240.283 int colNum = -1;
240.284 hr = S_OK;
240.285 do{
240.286 - hr = GetDetailsOf(pIShellDetails, NULL, ++colNum, &sd);
240.287 + hr = pIShellDetails->GetDetailsOf(NULL, ++colNum, &sd);
240.288 } while (SUCCEEDED (hr));
240.289
240.290 jobjectArray columns =
240.291 @@ -1246,7 +1184,7 @@
240.292 colNum = 0;
240.293 hr = S_OK;
240.294 while (SUCCEEDED (hr)) {
240.295 - hr = GetDetailsOf(pIShellDetails, NULL, colNum, &sd);
240.296 + hr = pIShellDetails->GetDetailsOf(NULL, colNum, &sd);
240.297 if (SUCCEEDED (hr)) {
240.298 jobject column = CreateColumnInfo(env,
240.299 &columnClass, &columnConstructor,
240.300 @@ -1288,7 +1226,7 @@
240.301 if(SUCCEEDED (hr)) {
240.302 // The folder exposes IShellFolder2 interface
240.303 IShellFolder2 *pIShellFolder2 = (IShellFolder2*) pIUnknown;
240.304 - hr = GetDetailsOfFolder(pIShellFolder2, pidl, (UINT)columnIdx, &sd);
240.305 + hr = pIShellFolder2->GetDetailsOf(pidl, (UINT)columnIdx, &sd);
240.306 pIShellFolder2->Release();
240.307 if (SUCCEEDED (hr)) {
240.308 STRRET strRet = sd.str;
240.309 @@ -1300,7 +1238,7 @@
240.310 if(SUCCEEDED (hr)) {
240.311 // The folder exposes IShellDetails interface
240.312 IShellDetails *pIShellDetails = (IShellDetails*) pIUnknown;
240.313 - hr = GetDetailsOf(pIShellDetails, pidl, (UINT)columnIdx, &sd);
240.314 + hr = pIShellDetails->GetDetailsOf(pidl, (UINT)columnIdx, &sd);
240.315 pIShellDetails->Release();
240.316 if (SUCCEEDED (hr)) {
240.317 STRRET strRet = sd.str;
241.1 --- a/src/windows/native/sun/windows/awt.rc Thu Apr 16 17:42:00 2009 +0100
241.2 +++ b/src/windows/native/sun/windows/awt.rc Thu Apr 16 19:10:32 2009 -0700
241.3 @@ -35,6 +35,13 @@
241.4 AWT_ICON ICON DISCARDABLE "awt.ico"
241.5 CHECK_BITMAP BITMAP DISCARDABLE "check.bmp"
241.6
241.7 +// Note: the number of icons used is specified in the
241.8 +// securityWarningIconCounter constant in awt_Toolkit.cpp.
241.9 +SECURITY_WARNING_0 ICON DISCARDABLE "security_warning_bw.ico"
241.10 +SECURITY_WARNING_1 ICON DISCARDABLE "security_warning_int.ico"
241.11 +SECURITY_WARNING_2 ICON DISCARDABLE "security_warning.ico"
241.12 +
241.13 +
241.14 /////////////////////////////////////////////////////////////////////////////
241.15 //
241.16 // Version
242.1 --- a/src/windows/native/sun/windows/awt_BitmapUtil.cpp Thu Apr 16 17:42:00 2009 +0100
242.2 +++ b/src/windows/native/sun/windows/awt_BitmapUtil.cpp Thu Apr 16 19:10:32 2009 -0700
242.3 @@ -1,5 +1,5 @@
242.4 /*
242.5 - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
242.6 + * Copyright 2006-2009 Sun Microsystems, Inc. All Rights Reserved.
242.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
242.8 *
242.9 * This code is free software; you can redistribute it and/or modify it
242.10 @@ -28,9 +28,14 @@
242.11 #include <windowsx.h>
242.12 #include <zmouse.h>
242.13
242.14 +#include "GraphicsPrimitiveMgr.h"
242.15 +
242.16 #include "awt.h"
242.17 #include "awt_BitmapUtil.h"
242.18
242.19 +// Platform-dependent RECT_[EQ | SET | INC_HEIGHT] macros
242.20 +#include "utility/rect.h"
242.21 +
242.22 HBITMAP BitmapUtil::CreateTransparencyMaskFromARGB(int width, int height, int* imageData)
242.23 {
242.24 //Scan lines should be aligned to word boundary
242.25 @@ -148,3 +153,222 @@
242.26 ::GdiFlush();
242.27 return hBitmap;
242.28 }
242.29 +
242.30 +/*
242.31 + * Creates 32-bit premultiplied ARGB bitmap from specified ARGBPre data.
242.32 + * This function may not work on OS prior to Win95.
242.33 + * See MSDN articles for CreateDIBitmap, BITMAPINFOHEADER,
242.34 + * BITMAPV4HEADER, BITMAPV5HEADER for additional info.
242.35 + */
242.36 +HBITMAP BitmapUtil::CreateBitmapFromARGBPre(int width, int height,
242.37 + int srcStride,
242.38 + int* imageData)
242.39 +{
242.40 + BITMAPINFOHEADER bmi;
242.41 + void *bitmapBits = NULL;
242.42 +
242.43 + ZeroMemory(&bmi, sizeof(bmi));
242.44 + bmi.biSize = sizeof(bmi);
242.45 + bmi.biWidth = width;
242.46 + bmi.biHeight = -height;
242.47 + bmi.biPlanes = 1;
242.48 + bmi.biBitCount = 32;
242.49 + bmi.biCompression = BI_RGB;
242.50 +
242.51 + HBITMAP hBitmap =
242.52 + ::CreateDIBSection(NULL, (BITMAPINFO *) & bmi, DIB_RGB_COLORS,
242.53 + &bitmapBits, NULL, 0);
242.54 +
242.55 + if (!bitmapBits) {
242.56 + return NULL;
242.57 + }
242.58 +
242.59 + int dstStride = width * 4;
242.60 +
242.61 + if (srcStride == dstStride) {
242.62 + memcpy(bitmapBits, (void*)imageData, srcStride * height);
242.63 + } else if (height > 0) {
242.64 + void *pSrcPixels = (void*)imageData;
242.65 + void *pDstPixels = bitmapBits;
242.66 + do {
242.67 + memcpy(pDstPixels, pSrcPixels, dstStride);
242.68 + pSrcPixels = PtrAddBytes(pSrcPixels, srcStride);
242.69 + pDstPixels = PtrAddBytes(pDstPixels, dstStride);
242.70 + } while (--height > 0);
242.71 + }
242.72 +
242.73 + return hBitmap;
242.74 +}
242.75 +
242.76 +extern "C" {
242.77 +
242.78 +/**
242.79 + * This method is called from the WGL pipeline when it needs to create a bitmap
242.80 + * needed to update the layered window.
242.81 + */
242.82 +HBITMAP BitmapUtil_CreateBitmapFromARGBPre(int width, int height,
242.83 + int srcStride,
242.84 + int* imageData)
242.85 +{
242.86 + return BitmapUtil::CreateBitmapFromARGBPre(width, height,
242.87 + srcStride, imageData);
242.88 +
242.89 +}
242.90 +
242.91 +} /* extern "C" */
242.92 +
242.93 +
242.94 +/**
242.95 + * Transforms the given bitmap into an HRGN representing the transparency
242.96 + * of the bitmap. The bitmap MUST BE 32bpp. Alpha value == 0 is considered
242.97 + * transparent, alpha > 0 - opaque.
242.98 + */
242.99 +HRGN BitmapUtil::BitmapToRgn(HBITMAP hBitmap)
242.100 +{
242.101 + HDC hdc = ::CreateCompatibleDC(NULL);
242.102 + ::SelectObject(hdc, hBitmap);
242.103 +
242.104 + BITMAPINFOEX bi;
242.105 + ::ZeroMemory(&bi, sizeof(bi));
242.106 +
242.107 + bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
242.108 +
242.109 + BOOL r = ::GetDIBits(hdc, hBitmap, 0, 0, NULL,
242.110 + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
242.111 +
242.112 + if (!r || bi.bmiHeader.biBitCount != 32)
242.113 + {
242.114 + ::DeleteDC(hdc);
242.115 + return NULL;
242.116 + }
242.117 +
242.118 + UINT width = bi.bmiHeader.biWidth;
242.119 + UINT height = abs(bi.bmiHeader.biHeight);
242.120 +
242.121 + BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage);
242.122 + bi.bmiHeader.biHeight = -height;
242.123 + ::GetDIBits(hdc, hBitmap, 0, height, buf,
242.124 + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
242.125 +
242.126 + /* reserving memory for the worst case */
242.127 + RGNDATA * pRgnData = (RGNDATA *) safe_Malloc(sizeof(RGNDATAHEADER) +
242.128 + sizeof(RECT) * (width / 2 + 1) * height);
242.129 + RGNDATAHEADER * pRgnHdr = (RGNDATAHEADER *) pRgnData;
242.130 + pRgnHdr->dwSize = sizeof(RGNDATAHEADER);
242.131 + pRgnHdr->iType = RDH_RECTANGLES;
242.132 + pRgnHdr->nRgnSize = 0;
242.133 + pRgnHdr->rcBound.top = 0;
242.134 + pRgnHdr->rcBound.left = 0;
242.135 + pRgnHdr->rcBound.bottom = height;
242.136 + pRgnHdr->rcBound.right = width;
242.137 +
242.138 + pRgnHdr->nCount = BitmapToYXBandedRectangles(32, width, height, buf,
242.139 + (RECT_T *) (((BYTE *) pRgnData) + sizeof(RGNDATAHEADER)));
242.140 +
242.141 + HRGN rgn = ::ExtCreateRegion(NULL,
242.142 + sizeof(RGNDATAHEADER) + sizeof(RECT_T) * pRgnHdr->nCount,
242.143 + pRgnData);
242.144 +
242.145 + free(pRgnData);
242.146 + ::DeleteDC(hdc);
242.147 + free(buf);
242.148 +
242.149 + return rgn;
242.150 +}
242.151 +
242.152 +/**
242.153 + * Makes a copy of the given bitmap. Blends every pixel of the source
242.154 + * with the given blendColor and alpha. If alpha == 0, the function
242.155 + * simply makes a plain copy of the source without any blending.
242.156 + */
242.157 +HBITMAP BitmapUtil::BlendCopy(HBITMAP hSrcBitmap, COLORREF blendColor,
242.158 + BYTE alpha)
242.159 +{
242.160 + HDC hdc = ::CreateCompatibleDC(NULL);
242.161 + HBITMAP oldBitmap = (HBITMAP)::SelectObject(hdc, hSrcBitmap);
242.162 +
242.163 + BITMAPINFOEX bi;
242.164 + ::ZeroMemory(&bi, sizeof(bi));
242.165 +
242.166 + bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
242.167 +
242.168 + BOOL r = ::GetDIBits(hdc, hSrcBitmap, 0, 0, NULL,
242.169 + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
242.170 +
242.171 + if (!r || bi.bmiHeader.biBitCount != 32)
242.172 + {
242.173 + ::DeleteDC(hdc);
242.174 + return NULL;
242.175 + }
242.176 +
242.177 + UINT width = bi.bmiHeader.biWidth;
242.178 + UINT height = abs(bi.bmiHeader.biHeight);
242.179 +
242.180 + BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage);
242.181 + bi.bmiHeader.biHeight = -height;
242.182 + ::GetDIBits(hdc, hSrcBitmap, 0, height, buf,
242.183 + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS);
242.184 +
242.185 + UINT widthBytes = width * bi.bmiHeader.biBitCount / 8;
242.186 + UINT alignedWidth = (((widthBytes - 1) / 4) + 1) * 4;
242.187 + UINT i, j;
242.188 +
242.189 + for (j = 0; j < height; j++) {
242.190 + BYTE *pSrc = (BYTE *) buf + j * alignedWidth;
242.191 + for (i = 0; i < width; i++, pSrc += 4) {
242.192 + // Note: if the current alpha is zero, the other three color
242.193 + // components may (theoretically) contain some uninitialized
242.194 + // data. The developer does not expect to display them,
242.195 + // hence we handle this situation differently.
242.196 + if (pSrc[3] == 0) {
242.197 + pSrc[0] = GetBValue(blendColor) * alpha / 255;
242.198 + pSrc[1] = GetGValue(blendColor) * alpha / 255;
242.199 + pSrc[2] = GetRValue(blendColor) * alpha / 255;
242.200 + pSrc[3] = alpha;
242.201 + } else {
242.202 + pSrc[0] = (GetBValue(blendColor) * alpha / 255) +
242.203 + (pSrc[0] * (255 - alpha) / 255);
242.204 + pSrc[1] = (GetGValue(blendColor) * alpha / 255) +
242.205 + (pSrc[1] * (255 - alpha) / 255);
242.206 + pSrc[2] = (GetRValue(blendColor) * alpha / 255) +
242.207 + (pSrc[2] * (255 - alpha) / 255);
242.208 + pSrc[3] = (alpha * alpha / 255) +
242.209 + (pSrc[3] * (255 - alpha) / 255);
242.210 + }
242.211 + }
242.212 + }
242.213 +
242.214 + HBITMAP hDstBitmap = ::CreateDIBitmap(hdc,
242.215 + reinterpret_cast<BITMAPINFOHEADER*>(&bi),
242.216 + CBM_INIT,
242.217 + buf,
242.218 + reinterpret_cast<BITMAPINFO*>(&bi),
242.219 + DIB_RGB_COLORS
242.220 + );
242.221 +
242.222 + ::SelectObject(hdc, oldBitmap);
242.223 + ::DeleteDC(hdc);
242.224 + free(buf);
242.225 +
242.226 + return hDstBitmap;
242.227 +}
242.228 +
242.229 +/**
242.230 + * Creates a 32 bit ARGB bitmap. Returns the bitmap handle. The *bitmapBits
242.231 + * contains the pointer to the bitmap data or NULL if an error occured.
242.232 + */
242.233 +HBITMAP BitmapUtil::CreateARGBBitmap(int width, int height, void ** bitmapBitsPtr)
242.234 +{
242.235 + BITMAPINFOHEADER bmi;
242.236 +
242.237 + ::ZeroMemory(&bmi, sizeof(bmi));
242.238 + bmi.biSize = sizeof(BITMAPINFOHEADER);
242.239 + bmi.biWidth = width;
242.240 + bmi.biHeight = -height;
242.241 + bmi.biPlanes = 1;
242.242 + bmi.biBitCount = 32;
242.243 + bmi.biCompression = BI_RGB;
242.244 +
242.245 + return ::CreateDIBSection(NULL, (BITMAPINFO *) & bmi, DIB_RGB_COLORS,
242.246 + bitmapBitsPtr, NULL, 0);
242.247 +}
243.1 --- a/src/windows/native/sun/windows/awt_BitmapUtil.h Thu Apr 16 17:42:00 2009 +0100
243.2 +++ b/src/windows/native/sun/windows/awt_BitmapUtil.h Thu Apr 16 19:10:32 2009 -0700
243.3 @@ -1,5 +1,5 @@
243.4 /*
243.5 - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
243.6 + * Copyright 2006-2009 Sun Microsystems, Inc. All Rights Reserved.
243.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
243.8 *
243.9 * This code is free software; you can redistribute it and/or modify it
243.10 @@ -45,6 +45,32 @@
243.11 */
243.12 static HBITMAP CreateV4BitmapFromARGB(int width, int height, int* imageData);
243.13
243.14 + /**
243.15 + * Creates 32-bit premultiplied ARGB V4 Bitmap (Win95-compatible) from
243.16 + * specified ARGB Pre input data.
243.17 + */
243.18 + static HBITMAP CreateBitmapFromARGBPre(int width, int height,
243.19 + int srcStride,
243.20 + int* imageData);
243.21 +
243.22 + /**
243.23 + * Transforms the given bitmap into an HRGN representing the transparency
243.24 + * of the bitmap.
243.25 + */
243.26 + static HRGN BitmapToRgn(HBITMAP hBitmap);
243.27 +
243.28 + /**
243.29 + * Makes a copy of the given bitmap. Blends every pixel of the source
243.30 + * with the given blendColor and alpha. If alpha == 0, the function
243.31 + * simply makes a plain copy of the source without any blending.
243.32 + */
243.33 + static HBITMAP BlendCopy(HBITMAP hSrcBitmap, COLORREF blendColor, BYTE alpha);
243.34 +
243.35 + /**
243.36 + * Creates a 32 bit ARGB bitmap. Returns the bitmap handle.
243.37 + * The pointer to the bitmap data is stored into bitmapBitsPtr.
243.38 + */
243.39 + static HBITMAP CreateARGBBitmap(int width, int height, void ** bitmapBitsPtr);
243.40 };
243.41
243.42 #endif
244.1 --- a/src/windows/native/sun/windows/awt_Button.cpp Thu Apr 16 17:42:00 2009 +0100
244.2 +++ b/src/windows/native/sun/windows/awt_Button.cpp Thu Apr 16 19:10:32 2009 -0700
244.3 @@ -1,5 +1,5 @@
244.4 /*
244.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
244.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
244.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
244.8 *
244.9 * This code is free software; you can redistribute it and/or modify it
244.10 @@ -30,7 +30,6 @@
244.11 #include "awt_Button.h"
244.12 #include "awt_Canvas.h"
244.13 #include "awt_Window.h"
244.14 -#include "awt_KeyboardFocusManager.h"
244.15
244.16 /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
244.17 */
244.18 @@ -143,19 +142,6 @@
244.19 return c;
244.20 }
244.21
244.22 -BOOL AwtButton::ActMouseMessage(MSG * pMsg) {
244.23 - if (!IsFocusingMessage(pMsg->message)) {
244.24 - return FALSE;
244.25 - }
244.26 -
244.27 - if (pMsg->message == WM_LBUTTONDOWN) {
244.28 - SendMessage(BM_SETSTATE, TRUE, 0);
244.29 - } else if (pMsg->message == WM_LBUTTONUP) {
244.30 - SendMessage(BM_SETSTATE, FALSE, 0);
244.31 - }
244.32 - return TRUE;
244.33 -}
244.34 -
244.35 MsgRouting
244.36 AwtButton::WmMouseDown(UINT flags, int x, int y, int button)
244.37 {
244.38 @@ -204,23 +190,6 @@
244.39 (jint)AwtComponent::GetJavaModifiers());
244.40 }
244.41
244.42 -/* 4531849 fix. Previous to 1.4, mouse clicks and typing space bar on a
244.43 - * Button would notify ActionListeners via WM_COMMAND/WmNotify(). In 1.4, mouse
244.44 - * grabs are done for all presses in order to correctly send drag and release
244.45 - * events. However, WM_COMMAND message aren't sent when the mouse is grabbed,
244.46 - * so ActionListeners for mouse clicks are sent via WmMouseUp/WmNotify().
244.47 - * For some reason, if the right mouse button is held down when left-clicking
244.48 - * on a Button, WM_COMMAND _IS_ sent. This resulted in two ActionEvents being
244.49 - * sent in this case. To fix the problem, we handle typing space bar similar to
244.50 - * left clicks - in WmKeyUp(), and do nothing for WM_COMMAND. -bchristi
244.51 - */
244.52 -MsgRouting
244.53 -AwtButton::WmKeyUp(UINT wkey, UINT repCnt, UINT flags, BOOL system)
244.54 -{
244.55 - MsgRouting mrResult = AwtComponent::WmKeyUp(wkey, repCnt, flags, system);
244.56 - return mrResult;
244.57 -}
244.58 -
244.59 MsgRouting
244.60 AwtButton::OwnerDrawItem(UINT /*ctrlId*/, DRAWITEMSTRUCT& drawInfo)
244.61 {
244.62 @@ -293,18 +262,26 @@
244.63 return mrDoDefault;
244.64 }
244.65
244.66 +BOOL AwtButton::IsFocusingMouseMessage(MSG *pMsg) {
244.67 + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP;
244.68 +}
244.69 +
244.70 +BOOL AwtButton::IsFocusingKeyMessage(MSG *pMsg) {
244.71 + return (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) &&
244.72 + pMsg->wParam == VK_SPACE;
244.73 +}
244.74 +
244.75 MsgRouting AwtButton::HandleEvent(MSG *msg, BOOL synthetic)
244.76 {
244.77 - if (AwtComponent::sm_focusOwner != GetHWnd() &&
244.78 - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
244.79 - {
244.80 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
244.81 - jobject target = GetTarget(env);
244.82 - env->CallStaticVoidMethod
244.83 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
244.84 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
244.85 - target, ((jlong)msg->time) & 0xFFFFFFFF);
244.86 - env->DeleteLocalRef(target);
244.87 + if (IsFocusingMouseMessage(msg)) {
244.88 + SendMessage(BM_SETSTATE, msg->message == WM_LBUTTONDOWN ? TRUE : FALSE, 0);
244.89 + delete msg;
244.90 + return mrConsume;
244.91 + }
244.92 + if (IsFocusingKeyMessage(msg)) {
244.93 + SendMessage(BM_SETSTATE, msg->message == WM_KEYDOWN ? TRUE : FALSE, 0);
244.94 + delete msg;
244.95 + return mrConsume;
244.96 }
244.97 return AwtComponent::HandleEvent(msg, synthetic);
244.98 }
245.1 --- a/src/windows/native/sun/windows/awt_Button.h Thu Apr 16 17:42:00 2009 +0100
245.2 +++ b/src/windows/native/sun/windows/awt_Button.h Thu Apr 16 19:10:32 2009 -0700
245.3 @@ -1,5 +1,5 @@
245.4 /*
245.5 - * Copyright 1996-2004 Sun Microsystems, Inc. All Rights Reserved.
245.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
245.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
245.8 *
245.9 * This code is free software; you can redistribute it and/or modify it
245.10 @@ -50,13 +50,13 @@
245.11 /* Windows message handler functions */
245.12 MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
245.13 MsgRouting WmMouseUp(UINT flags, int x, int y, int button);
245.14 - MsgRouting WmKeyUp(UINT vkey, UINT repCnt, UINT flags, BOOL system);
245.15 MsgRouting OwnerDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo);
245.16 MsgRouting WmPaint(HDC hDC);
245.17
245.18 MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
245.19
245.20 - BOOL ActMouseMessage(MSG * pMsg);
245.21 + BOOL IsFocusingMouseMessage(MSG *pMsg);
245.22 + BOOL IsFocusingKeyMessage(MSG *pMsg);
245.23
245.24 // called on Toolkit thread from JNI
245.25 static void _SetLabel(void *param);
246.1 --- a/src/windows/native/sun/windows/awt_Canvas.cpp Thu Apr 16 17:42:00 2009 +0100
246.2 +++ b/src/windows/native/sun/windows/awt_Canvas.cpp Thu Apr 16 19:10:32 2009 -0700
246.3 @@ -1,5 +1,5 @@
246.4 /*
246.5 - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
246.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
246.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
246.8 *
246.9 * This code is free software; you can redistribute it and/or modify it
246.10 @@ -26,7 +26,6 @@
246.11 #include "awt_Toolkit.h"
246.12 #include "awt_Canvas.h"
246.13 #include "awt_Win32GraphicsConfig.h"
246.14 -#include "awt_KeyboardFocusManager.h"
246.15 #include "awt_Window.h"
246.16
246.17 /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
246.18 @@ -176,27 +175,9 @@
246.19
246.20 MsgRouting AwtCanvas::HandleEvent(MSG *msg, BOOL synthetic)
246.21 {
246.22 - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
246.23 - /*
246.24 - * Fix for BugTraq ID 4041703: keyDown not being invoked.
246.25 - * Give the focus to a Canvas or Panel if it doesn't have heavyweight
246.26 - * subcomponents so that they will behave the same way as on Solaris
246.27 - * providing a possibility of giving keyboard focus to an empty Applet.
246.28 - * Since ScrollPane doesn't receive focus on mouse press on Solaris,
246.29 - * HandleEvent() is overriden there to do nothing with focus.
246.30 - */
246.31 - if (AwtComponent::sm_focusOwner != GetHWnd() &&
246.32 - ::GetWindow(GetHWnd(), GW_CHILD) == NULL)
246.33 - {
246.34 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
246.35 - jobject target = GetTarget(env);
246.36 - env->CallStaticVoidMethod
246.37 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
246.38 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
246.39 - target, ((jlong)msg->time) & 0xFFFFFFFF);
246.40 - env->DeleteLocalRef(target);
246.41 - AwtSetFocus();
246.42 - }
246.43 + if (IsFocusingMouseMessage(msg)) {
246.44 + delete msg;
246.45 + return mrConsume;
246.46 }
246.47 return AwtComponent::HandleEvent(msg, synthetic);
246.48 }
247.1 --- a/src/windows/native/sun/windows/awt_Checkbox.cpp Thu Apr 16 17:42:00 2009 +0100
247.2 +++ b/src/windows/native/sun/windows/awt_Checkbox.cpp Thu Apr 16 19:10:32 2009 -0700
247.3 @@ -26,7 +26,6 @@
247.4 #include "awt.h"
247.5 #include "awt_Toolkit.h"
247.6 #include "awt_Checkbox.h"
247.7 -#include "awt_KeyboardFocusManager.h"
247.8 #include "awt_Canvas.h"
247.9 #include "awt_Window.h"
247.10
247.11 @@ -143,17 +142,6 @@
247.12 return checkbox;
247.13 }
247.14
247.15 -BOOL AwtCheckbox::ActMouseMessage(MSG* pMsg) {
247.16 - if (!IsFocusingMessage(pMsg->message)) {
247.17 - return FALSE;
247.18 - }
247.19 -
247.20 - if (pMsg->message == WM_LBUTTONDOWN) {
247.21 - SendMessage(BM_SETSTATE, ~SendMessage(BM_GETSTATE, 0, 0), 0);
247.22 - }
247.23 - return TRUE;
247.24 -}
247.25 -
247.26 MsgRouting
247.27 AwtCheckbox::WmMouseUp(UINT flags, int x, int y, int button)
247.28 {
247.29 @@ -329,18 +317,32 @@
247.30 return mrDoDefault;
247.31 }
247.32
247.33 +BOOL AwtCheckbox::IsFocusingMouseMessage(MSG *pMsg) {
247.34 + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP;
247.35 +}
247.36 +
247.37 +BOOL AwtCheckbox::IsFocusingKeyMessage(MSG *pMsg) {
247.38 + return (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) &&
247.39 + pMsg->wParam == VK_SPACE;
247.40 +}
247.41 +
247.42 MsgRouting AwtCheckbox::HandleEvent(MSG *msg, BOOL synthetic)
247.43 {
247.44 - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd() &&
247.45 - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
247.46 - {
247.47 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
247.48 - jobject target = GetTarget(env);
247.49 - env->CallStaticVoidMethod
247.50 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
247.51 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
247.52 - target, ((jlong)msg->time) & 0xFFFFFFFF);
247.53 - env->DeleteLocalRef(target);
247.54 + if (IsFocusingMouseMessage(msg)) {
247.55 + SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_LBUTTONDOWN ? TRUE : FALSE));
247.56 + delete msg;
247.57 + return mrConsume;
247.58 + }
247.59 + if (IsFocusingKeyMessage(msg)) {
247.60 + SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_KEYDOWN ? TRUE : FALSE));
247.61 + if (msg->message == WM_KEYDOWN) {
247.62 + m_fLButtonDowned = TRUE;
247.63 + } else if (m_fLButtonDowned == TRUE) {
247.64 + WmNotify(BN_CLICKED);
247.65 + m_fLButtonDowned = TRUE;
247.66 + }
247.67 + delete msg;
247.68 + return mrConsume;
247.69 }
247.70 return AwtComponent::HandleEvent(msg, synthetic);
247.71 }
248.1 --- a/src/windows/native/sun/windows/awt_Checkbox.h Thu Apr 16 17:42:00 2009 +0100
248.2 +++ b/src/windows/native/sun/windows/awt_Checkbox.h Thu Apr 16 19:10:32 2009 -0700
248.3 @@ -69,7 +69,8 @@
248.4
248.5 MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
248.6
248.7 - BOOL ActMouseMessage(MSG* pMsg);
248.8 + BOOL IsFocusingMouseMessage(MSG *pMsg);
248.9 + BOOL IsFocusingKeyMessage(MSG *pMsg);
248.10
248.11 // called on Toolkit thread from JNI
248.12 static void _SetLabel(void *param);
249.1 --- a/src/windows/native/sun/windows/awt_Choice.cpp Thu Apr 16 17:42:00 2009 +0100
249.2 +++ b/src/windows/native/sun/windows/awt_Choice.cpp Thu Apr 16 19:10:32 2009 -0700
249.3 @@ -23,14 +23,17 @@
249.4 * have any questions.
249.5 */
249.6
249.7 +#include <windowsx.h>
249.8 +
249.9 #include "awt_Toolkit.h"
249.10 #include "awt_Choice.h"
249.11 -#include "awt_KeyboardFocusManager.h"
249.12 #include "awt_Canvas.h"
249.13
249.14 #include "awt_Dimension.h"
249.15 #include "awt_Container.h"
249.16
249.17 +#include "ComCtl32Util.h"
249.18 +
249.19 #include <java_awt_Toolkit.h>
249.20 #include <java_awt_FontMetrics.h>
249.21 #include <java_awt_event_InputEvent.h>
249.22 @@ -71,18 +74,31 @@
249.23 /* Bug #4338368: consume the spurious MouseUp when the choice loses focus */
249.24
249.25 BOOL AwtChoice::skipNextMouseUp = FALSE;
249.26 +
249.27 +BOOL AwtChoice::sm_isMouseMoveInList = FALSE;
249.28 +
249.29 +static const UINT MINIMUM_NUMBER_OF_VISIBLE_ITEMS = 8;
249.30 +
249.31 /*************************************************************************
249.32 * AwtChoice class methods
249.33 */
249.34
249.35 AwtChoice::AwtChoice() {
249.36 - killFocusRouting = mrPassAlong;
249.37 + m_hList = NULL;
249.38 + m_listDefWindowProc = NULL;
249.39 }
249.40
249.41 LPCTSTR AwtChoice::GetClassName() {
249.42 return TEXT("COMBOBOX"); /* System provided combobox class */
249.43 }
249.44
249.45 +void AwtChoice::Dispose() {
249.46 + if (m_hList != NULL && m_listDefWindowProc != NULL) {
249.47 + ComCtl32Util::GetInstance().UnsubclassHWND(m_hList, ListWindowProc, m_listDefWindowProc);
249.48 + }
249.49 + AwtComponent::Dispose();
249.50 +}
249.51 +
249.52 AwtChoice* AwtChoice::Create(jobject peer, jobject parent) {
249.53
249.54
249.55 @@ -162,6 +178,10 @@
249.56 env->SetIntField(target, AwtComponent::widthID, (jint) rc.right);
249.57 env->SetIntField(target, AwtComponent::heightID, (jint) rc.bottom);
249.58
249.59 + if (IS_WINXP) {
249.60 + ::SendMessage(c->GetHWnd(), CB_SETMINVISIBLE, (WPARAM) MINIMUM_NUMBER_OF_VISIBLE_ITEMS, 0);
249.61 + }
249.62 +
249.63 env->DeleteLocalRef(dimension);
249.64 }
249.65 } catch (...) {
249.66 @@ -175,24 +195,13 @@
249.67 return c;
249.68 }
249.69
249.70 -BOOL AwtChoice::ActMouseMessage(MSG* pMsg) {
249.71 - if (!IsFocusingMessage(pMsg->message)) {
249.72 - return FALSE;
249.73 - }
249.74 -
249.75 - if (pMsg->message == WM_LBUTTONDOWN) {
249.76 - SendMessage(CB_SHOWDROPDOWN, ~SendMessage(CB_GETDROPPEDSTATE, 0, 0), 0);
249.77 - }
249.78 - return TRUE;
249.79 -}
249.80 -
249.81 // calculate height of drop-down list part of the combobox
249.82 // to show all the items up to a maximum of eight
249.83 int AwtChoice::GetDropDownHeight()
249.84 {
249.85 int itemHeight =(int)::SendMessage(GetHWnd(), CB_GETITEMHEIGHT, (UINT)0,0);
249.86 int numItemsToShow = (int)::SendMessage(GetHWnd(), CB_GETCOUNT, 0,0);
249.87 - numItemsToShow = numItemsToShow > 8 ? 8 : numItemsToShow;
249.88 + numItemsToShow = min(MINIMUM_NUMBER_OF_VISIBLE_ITEMS, numItemsToShow);
249.89 // drop-down height snaps to nearest line, so add a
249.90 // fudge factor of 1/2 line to ensure last line shows
249.91 return itemHeight*numItemsToShow + itemHeight/2;
249.92 @@ -253,6 +262,7 @@
249.93 }
249.94 return;
249.95 }
249.96 +
249.97 // don't want to interfere with other controls
249.98 if (::GetCapture() == NULL) {
249.99 ::SetCapture(GetHWnd());
249.100 @@ -370,6 +380,58 @@
249.101 env->DeleteLocalRef(target);
249.102 }
249.103
249.104 +static int lastClickX = -1;
249.105 +static int lastClickY = -1;
249.106 +
249.107 +LRESULT CALLBACK AwtChoice::ListWindowProc(HWND hwnd, UINT message,
249.108 + WPARAM wParam, LPARAM lParam)
249.109 +{
249.110 + /*
249.111 + * We don't pass the choice WM_LBUTTONDOWN message. As the result the choice's list
249.112 + * doesn't forward mouse messages it captures. Below we do forward what we need.
249.113 + */
249.114 +
249.115 + TRY;
249.116 +
249.117 + DASSERT(::IsWindow(hwnd));
249.118 +
249.119 + switch (message) {
249.120 + case WM_LBUTTONDOWN: {
249.121 + DWORD curPos = ::GetMessagePos();
249.122 + lastClickX = GET_X_LPARAM(curPos);
249.123 + lastClickY = GET_Y_LPARAM(curPos);
249.124 + break;
249.125 + }
249.126 + case WM_MOUSEMOVE: {
249.127 + RECT rect;
249.128 + ::GetClientRect(hwnd, &rect);
249.129 +
249.130 + POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
249.131 + if (::PtInRect(&rect, pt)) {
249.132 + sm_isMouseMoveInList = TRUE;
249.133 + }
249.134 +
249.135 + POINT lastPt = {lastClickX, lastClickY};
249.136 + ::ScreenToClient(hwnd, &lastPt);
249.137 + if (::PtInRect(&rect, lastPt)) {
249.138 + break; // ignore when dragging inside the list
249.139 + }
249.140 + }
249.141 + case WM_LBUTTONUP: {
249.142 + lastClickX = -1;
249.143 + lastClickY = -1;
249.144 +
249.145 + AwtChoice *c = (AwtChoice *)::GetWindowLongPtr(hwnd, GWLP_USERDATA);
249.146 + if (c != NULL) {
249.147 + // forward the msg to the choice
249.148 + c->WindowProc(message, wParam, lParam);
249.149 + }
249.150 + }
249.151 + }
249.152 + return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam);
249.153 +
249.154 + CATCH_BAD_ALLOC_RET(0);
249.155 +}
249.156
249.157
249.158 MsgRouting AwtChoice::WmNotify(UINT notifyCode)
249.159 @@ -379,15 +441,24 @@
249.160 if (itemSelect != CB_ERR){
249.161 DoCallback("handleAction", "(I)V", itemSelect);
249.162 }
249.163 - } else if (notifyCode == CBN_DROPDOWN && !IsFocusable()) {
249.164 - // While non-focusable Choice is shown all WM_KILLFOCUS messages should be consumed.
249.165 - killFocusRouting = mrConsume;
249.166 - } else if (notifyCode == CBN_CLOSEUP && !IsFocusable()) {
249.167 - // When non-focusable Choice is about to close, send it synthetic WM_KILLFOCUS
249.168 - // message that should be processed by the native widget only. This will allow
249.169 - // the native widget to properly process WM_KILLFOCUS that was earlier consumed.
249.170 - killFocusRouting = mrDoDefault;
249.171 - ::PostMessage(GetHWnd(), WM_KILLFOCUS, (LPARAM)sm_focusOwner, 0);
249.172 + } else if (notifyCode == CBN_DROPDOWN) {
249.173 +
249.174 + if (m_hList == NULL) {
249.175 + COMBOBOXINFO cbi;
249.176 + cbi.cbSize = sizeof(COMBOBOXINFO);
249.177 + ::GetComboBoxInfo(GetHWnd(), &cbi);
249.178 + m_hList = cbi.hwndList;
249.179 + m_listDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(m_hList, ListWindowProc);
249.180 + DASSERT(::GetWindowLongPtr(m_hList, GWLP_USERDATA) == NULL);
249.181 + ::SetWindowLongPtr(m_hList, GWLP_USERDATA, (LONG_PTR)this);
249.182 + }
249.183 + sm_isMouseMoveInList = FALSE;
249.184 +
249.185 + // Clicking in the dropdown list steals focus from the proxy.
249.186 + // So, set the focus-restore flag up.
249.187 + SetRestoreFocus(TRUE);
249.188 + } else if (notifyCode == CBN_CLOSEUP) {
249.189 + SetRestoreFocus(FALSE);
249.190 }
249.191 return mrDoDefault;
249.192 }
249.193 @@ -414,19 +485,7 @@
249.194 AwtChoice::WmKillFocus(HWND hWndGotFocus)
249.195 {
249.196 skipNextMouseUp = TRUE;
249.197 -
249.198 - switch (killFocusRouting) {
249.199 - case mrConsume:
249.200 - return mrConsume;
249.201 - case mrDoDefault:
249.202 - killFocusRouting = mrPassAlong;
249.203 - return mrDoDefault;
249.204 - case mrPassAlong:
249.205 - return AwtComponent::WmKillFocus(hWndGotFocus);
249.206 - }
249.207 -
249.208 - DASSERT(false); // must never reach here
249.209 - return mrDoDefault;
249.210 + return AwtComponent::WmKillFocus(hWndGotFocus);
249.211 }
249.212
249.213 MsgRouting
249.214 @@ -441,27 +500,17 @@
249.215
249.216 MsgRouting AwtChoice::HandleEvent(MSG *msg, BOOL synthetic)
249.217 {
249.218 - /*
249.219 - * 6366006
249.220 - * Note: the event can be sent in two cases:
249.221 - * 1) The Choice is closed and user clicks on it to drop it down.
249.222 - * 2) The Choice is non-focusable, it's droped down, user
249.223 - * clicks on it (or outside) to close it.
249.224 - * So, if the Choice is in droped down state, we shouldn't call
249.225 - * heavyweightButtonDown() method. Otherwise it will set a typeahead marker
249.226 - * that won't be removed, because no focus events will be generated.
249.227 - */
249.228 - if (AwtComponent::sm_focusOwner != GetHWnd() &&
249.229 - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) &&
249.230 - !IsChoiceOpened())
249.231 + if (IsFocusingMouseMessage(msg)) {
249.232 + SendMessage(CB_SHOWDROPDOWN, ~SendMessage(CB_GETDROPPEDSTATE, 0, 0), 0);
249.233 + delete msg;
249.234 + return mrConsume;
249.235 + }
249.236 + // To simulate the native behavior, we close the list on WM_LBUTTONUP if
249.237 + // WM_MOUSEMOVE has been dedected on the list since it has been dropped down.
249.238 + if (msg->message == WM_LBUTTONUP && SendMessage(CB_GETDROPPEDSTATE, 0, 0) &&
249.239 + sm_isMouseMoveInList)
249.240 {
249.241 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
249.242 - jobject target = GetTarget(env);
249.243 - env->CallStaticVoidMethod
249.244 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
249.245 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
249.246 - target, ((jlong)msg->time) & 0xFFFFFFFF);
249.247 - env->DeleteLocalRef(target);
249.248 + SendMessage(CB_SHOWDROPDOWN, FALSE, 0);
249.249 }
249.250 return AwtComponent::HandleEvent(msg, synthetic);
249.251 }
249.252 @@ -618,6 +667,26 @@
249.253 env->DeleteGlobalRef(choice);
249.254 }
249.255
249.256 +void AwtChoice::_CloseList(void *param)
249.257 +{
249.258 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
249.259 +
249.260 + jobject choice = (jobject)param;
249.261 +
249.262 + AwtChoice *c = NULL;
249.263 +
249.264 + PDATA pData;
249.265 + JNI_CHECK_PEER_GOTO(choice, done);
249.266 +
249.267 + c = (AwtChoice *)pData;
249.268 + if (::IsWindow(c->GetHWnd()) && c->SendMessage(CB_GETDROPPEDSTATE, 0, 0)) {
249.269 + c->SendMessage(CB_SHOWDROPDOWN, FALSE, 0);
249.270 + }
249.271 +
249.272 +done:
249.273 + env->DeleteGlobalRef(choice);
249.274 +}
249.275 +
249.276 /************************************************************************
249.277 * WChoicePeer native methods
249.278 */
249.279 @@ -752,6 +821,23 @@
249.280 CATCH_BAD_ALLOC;
249.281 }
249.282
249.283 +/*
249.284 + * Class: sun_awt_windows_WChoicePeer
249.285 + * Method: closeList
249.286 + * Signature: ()V
249.287 + */
249.288 +JNIEXPORT void JNICALL
249.289 +Java_sun_awt_windows_WChoicePeer_closeList(JNIEnv *env, jobject self)
249.290 +{
249.291 + TRY;
249.292 +
249.293 + jobject selfGlobalRef = env->NewGlobalRef(self);
249.294 +
249.295 + AwtToolkit::GetInstance().SyncCall(AwtChoice::_CloseList, (void *)selfGlobalRef);
249.296 + // global ref is deleted in _CloseList
249.297 +
249.298 + CATCH_BAD_ALLOC;
249.299 +}
249.300 } /* extern "C" */
249.301
249.302
250.1 --- a/src/windows/native/sun/windows/awt_Choice.h Thu Apr 16 17:42:00 2009 +0100
250.2 +++ b/src/windows/native/sun/windows/awt_Choice.h Thu Apr 16 19:10:32 2009 -0700
250.3 @@ -43,6 +43,8 @@
250.4 virtual LPCTSTR GetClassName();
250.5 static AwtChoice* Create(jobject peer, jobject hParent);
250.6
250.7 + virtual void Dispose();
250.8 +
250.9 virtual void Reshape(int x, int y, int w, int h);
250.10 void ResetDropDownHeight();
250.11 int GetDropDownHeight();
250.12 @@ -75,9 +77,6 @@
250.13 virtual void SetDragCapture(UINT flags);
250.14 virtual void ReleaseDragCapture(UINT flags);
250.15
250.16 - BOOL ActMouseMessage(MSG * pMsg);
250.17 - INLINE BOOL AwtChoice::IsChoiceOpened() {return SendMessage(CB_GETDROPPEDSTATE, 0, 0);}
250.18 -
250.19 static BOOL mouseCapture;
250.20 static BOOL skipNextMouseUp;
250.21
250.22 @@ -87,11 +86,16 @@
250.23 static void _AddItems(void *param);
250.24 static void _Remove(void *param);
250.25 static void _RemoveAll(void *param);
250.26 + static void _CloseList(void *param);
250.27
250.28 private:
250.29 int GetFieldHeight();
250.30 int GetTotalHeight();
250.31 - MsgRouting killFocusRouting;
250.32 + static BOOL sm_isMouseMoveInList;
250.33 + HWND m_hList;
250.34 + WNDPROC m_listDefWindowProc;
250.35 + static LRESULT CALLBACK ListWindowProc(HWND hwnd, UINT message,
250.36 + WPARAM wParam, LPARAM lParam);
250.37 };
250.38
250.39 #endif /* AWT_CHOICE_H */
251.1 --- a/src/windows/native/sun/windows/awt_Component.cpp Thu Apr 16 17:42:00 2009 +0100
251.2 +++ b/src/windows/native/sun/windows/awt_Component.cpp Thu Apr 16 19:10:32 2009 -0700
251.3 @@ -1,5 +1,5 @@
251.4 /*
251.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
251.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
251.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
251.8 *
251.9 * This code is free software; you can redistribute it and/or modify it
251.10 @@ -38,7 +38,6 @@
251.11 #include "awt_InputTextInfor.h"
251.12 #include "awt_Insets.h"
251.13 #include "awt_KeyEvent.h"
251.14 -#include "awt_KeyboardFocusManager.h"
251.15 #include "awt_MenuItem.h"
251.16 #include "awt_MouseEvent.h"
251.17 #include "awt_Palette.h"
251.18 @@ -58,7 +57,6 @@
251.19 #include <java_awt_Event.h>
251.20 #include <java_awt_event_KeyEvent.h>
251.21 #include <java_awt_Insets.h>
251.22 -#include <java_awt_KeyboardFocusManager.h>
251.23 #include <sun_awt_windows_WPanelPeer.h>
251.24 #include <java_awt_event_InputEvent.h>
251.25 #include <java_awt_event_InputMethodEvent.h>
251.26 @@ -94,12 +92,13 @@
251.27 BOOL g_bUserHasChangedInputLang = FALSE;
251.28 }
251.29
251.30 -BOOL AwtComponent::sm_suppressFocusAndActivation;
251.31 -HWND AwtComponent::sm_focusOwner;
251.32 -HWND AwtComponent::sm_focusedWindow;
251.33 -HWND AwtComponent::sm_realFocusOpposite;
251.34 +BOOL AwtComponent::sm_suppressFocusAndActivation = FALSE;
251.35 +BOOL AwtComponent::sm_restoreFocusAndActivation = FALSE;
251.36 +HWND AwtComponent::sm_focusOwner = NULL;
251.37 +HWND AwtComponent::sm_focusedWindow = NULL;
251.38 BOOL AwtComponent::sm_bMenuLoop = FALSE;
251.39 AwtComponent* AwtComponent::sm_getComponentCache = NULL;
251.40 +BOOL AwtComponent::sm_inSynthesizeFocus = FALSE;
251.41
251.42 /************************************************************************/
251.43 // Struct for _Reshape() and ReshapeNoCheck() methods
251.44 @@ -123,15 +122,6 @@
251.45 jobject component;
251.46 jobject font;
251.47 };
251.48 -// Struct for _RequestFocus() method
251.49 -struct RequestFocusStruct {
251.50 - jobject component;
251.51 - jobject lightweightChild;
251.52 - jboolean temporary;
251.53 - jboolean focusedWindowChangeAllowed;
251.54 - jlong time;
251.55 - jobject cause;
251.56 -};
251.57 // Struct for _CreatePrintedPixels() method
251.58 struct CreatePrintedPixelsStruct {
251.59 jobject component;
251.60 @@ -149,6 +139,16 @@
251.61 jobject window;
251.62 RECT *insets;
251.63 };
251.64 +// Struct for _SetZOrder function
251.65 +struct SetZOrderStruct {
251.66 + jobject component;
251.67 + jlong above;
251.68 +};
251.69 +// Struct for _SetFocus function
251.70 +struct SetFocusStruct {
251.71 + jobject component;
251.72 + jboolean doSetFocus;
251.73 +};
251.74 /************************************************************************/
251.75
251.76 //////////////////////////////////////////////////////////////////////////
251.77 @@ -199,8 +199,7 @@
251.78 BOOL AwtComponent::sm_rtlReadingOrder =
251.79 PRIMARYLANGID(GetInputLanguage()) == LANG_ARABIC;
251.80
251.81 -UINT AwtComponent::sm_95WheelMessage = WM_NULL;
251.82 -UINT AwtComponent::sm_95WheelSupport = WM_NULL;
251.83 +BOOL AwtComponent::sm_PrimaryDynamicTableBuilt = FALSE;
251.84
251.85 HWND AwtComponent::sm_cursorOn;
251.86 BOOL AwtComponent::m_QueryNewPaletteCalled = FALSE;
251.87 @@ -208,8 +207,6 @@
251.88 CriticalSection windowMoveLock;
251.89 BOOL windowMoveLockHeld = FALSE;
251.90
251.91 -int AwtComponent::sm_wheelRotationAmount = 0;
251.92 -
251.93 /************************************************************************
251.94 * AwtComponent methods
251.95 */
251.96 @@ -237,7 +234,6 @@
251.97 m_InputMethod = NULL;
251.98 m_useNativeCompWindow = TRUE;
251.99 m_PendingLeadByte = 0;
251.100 - m_skipNextSetFocus = FALSE;
251.101 m_bitsCandType = 0;
251.102
251.103 windowMoveLockPosX = 0;
251.104 @@ -250,6 +246,12 @@
251.105 m_bSubclassed = FALSE;
251.106
251.107 m_MessagesProcessing = 0;
251.108 + m_wheelRotationAmount = 0;
251.109 + if (!sm_PrimaryDynamicTableBuilt) {
251.110 + // do it once.
251.111 + AwtComponent::BuildPrimaryDynamicTable();
251.112 + sm_PrimaryDynamicTableBuilt = TRUE;
251.113 + }
251.114 }
251.115
251.116 AwtComponent::~AwtComponent()
251.117 @@ -265,8 +267,7 @@
251.118 * the native one anymore. So we can safely destroy component's
251.119 * handle.
251.120 */
251.121 - AwtToolkit::DestroyComponentHWND(m_hwnd);
251.122 - m_hwnd = NULL;
251.123 + DestroyHWnd();
251.124
251.125 if (sm_getComponentCache == this) {
251.126 sm_getComponentCache = NULL;
251.127 @@ -275,15 +276,8 @@
251.128
251.129 void AwtComponent::Dispose()
251.130 {
251.131 - if (sm_focusOwner == GetHWnd()) {
251.132 - ::SetFocus(NULL);
251.133 - }
251.134 - if (sm_focusedWindow == GetHWnd()) {
251.135 - sm_focusedWindow = NULL;
251.136 - }
251.137 - if (sm_realFocusOpposite == GetHWnd()) {
251.138 - sm_realFocusOpposite = NULL;
251.139 - }
251.140 + // NOTE: in case the component/toplevel was focused, Java should
251.141 + // have already taken care of proper transfering it or clearing.
251.142
251.143 if (m_hdwp != NULL) {
251.144 // end any deferred window positioning, regardless
251.145 @@ -588,6 +582,17 @@
251.146 }
251.147
251.148 /*
251.149 + * Destroy this window's HWND
251.150 + */
251.151 +void AwtComponent::DestroyHWnd() {
251.152 + if (m_hwnd != NULL) {
251.153 + AwtToolkit::DestroyComponentHWND(m_hwnd);
251.154 + //AwtToolkit::DestroyComponent(this);
251.155 + m_hwnd = NULL;
251.156 + }
251.157 +}
251.158 +
251.159 +/*
251.160 * Returns hwnd for target on non Toolkit thread
251.161 */
251.162 HWND
251.163 @@ -888,27 +893,8 @@
251.164
251.165 void AwtComponent::Hide()
251.166 {
251.167 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.168 - jobject peer = GetPeer(env);
251.169 - BOOL oldValue = sm_suppressFocusAndActivation;
251.170 m_visible = false;
251.171 -
251.172 - // On disposal the focus owner actually loses focus at the moment of hiding.
251.173 - // So, focus change suppression (if requested) should be made here.
251.174 - if (GetHWnd() == sm_focusOwner &&
251.175 - !JNU_CallMethodByName(env, NULL, peer, "isAutoFocusTransferOnDisposal", "()Z").z)
251.176 - {
251.177 - sm_suppressFocusAndActivation = TRUE;
251.178 - // The native system may autotransfer focus on hiding to the parent
251.179 - // of the component. Nevertheless this focus change won't be posted
251.180 - // to the Java level, we're better to avoid this. Anyway, after
251.181 - // the disposal focus should be requested to the right component.
251.182 - ::SetFocus(NULL);
251.183 - sm_focusOwner = NULL;
251.184 - }
251.185 ::ShowWindow(GetHWnd(), SW_HIDE);
251.186 -
251.187 - sm_suppressFocusAndActivation = oldValue;
251.188 }
251.189
251.190 BOOL
251.191 @@ -1252,6 +1238,7 @@
251.192 WIN_MSG(WM_AWT_COMPONENT_SHOW)
251.193 WIN_MSG(WM_AWT_COMPONENT_HIDE)
251.194 WIN_MSG(WM_AWT_COMPONENT_SETFOCUS)
251.195 + WIN_MSG(WM_AWT_WINDOW_SETACTIVE)
251.196 WIN_MSG(WM_AWT_LIST_SETMULTISELECT)
251.197 WIN_MSG(WM_AWT_HANDLE_EVENT)
251.198 WIN_MSG(WM_AWT_PRINT_COMPONENT)
251.199 @@ -1503,67 +1490,54 @@
251.200 sm_bMenuLoop = FALSE;
251.201 break;
251.202
251.203 + // We don't expect any focus messages on non-proxy component,
251.204 + // except those that came from Java.
251.205 case WM_SETFOCUS:
251.206 - mr = (!sm_suppressFocusAndActivation && !m_skipNextSetFocus)
251.207 - ? WmSetFocus((HWND)wParam) : mrConsume;
251.208 - m_skipNextSetFocus = FALSE;
251.209 + if (sm_inSynthesizeFocus) {
251.210 + mr = WmSetFocus((HWND)wParam);
251.211 + } else {
251.212 + mr = mrConsume;
251.213 + }
251.214 break;
251.215 case WM_KILLFOCUS:
251.216 - mr = (!sm_suppressFocusAndActivation)
251.217 - ? WmKillFocus((HWND)wParam) : mrConsume;
251.218 + if (sm_inSynthesizeFocus) {
251.219 + mr = WmKillFocus((HWND)wParam);
251.220 + } else {
251.221 + mr = mrConsume;
251.222 + }
251.223 break;
251.224 - case WM_ACTIVATE:
251.225 - {
251.226 + case WM_ACTIVATE: {
251.227 UINT nState = LOWORD(wParam);
251.228 BOOL fMinimized = (BOOL)HIWORD(wParam);
251.229 + mr = mrConsume;
251.230 +
251.231 if (!sm_suppressFocusAndActivation &&
251.232 (!fMinimized || (nState == WA_INACTIVE)))
251.233 {
251.234 mr = WmActivate(nState, fMinimized, (HWND)lParam);
251.235 - m_skipNextSetFocus = FALSE;
251.236 +
251.237 // When the window is deactivated, send WM_IME_ENDCOMPOSITION
251.238 // message to deactivate the composition window so that
251.239 // it won't receive keyboard input focus.
251.240 if (ImmGetContext() != NULL) {
251.241 DefWindowProc(WM_IME_ENDCOMPOSITION, 0, 0);
251.242 }
251.243 - } else {
251.244 - if (!sm_suppressFocusAndActivation
251.245 - && fMinimized && (nState != WA_INACTIVE))
251.246 - {
251.247 - m_skipNextSetFocus = TRUE;
251.248 - }
251.249 - mr = mrConsume;
251.250 }
251.251 + break;
251.252 }
251.253 - break;
251.254 - case WM_MOUSEACTIVATE: {
251.255 - AwtWindow * window = (AwtWindow*)GetComponent((HWND)wParam);
251.256 - if (window != NULL) {
251.257 - if (!window->IsFocusableWindow()) {
251.258 - // if it is non-focusable window we can return
251.259 - // MA_NOACTIVATExxx and it will not be activated. We
251.260 - // return NOACTIVATE for a client part of the window so we
251.261 - // receive mouse event responsible for activation. We
251.262 - // return NOACTIVEA for Frame's non-client so user be able
251.263 - // to resize and move frames by title and borders. We
251.264 - // return NOACTIVATEANDEAT for Window non-client area as
251.265 - // there is noone to listen for this event.
251.266 - mr = mrConsume;
251.267 - if ((window == this) && LOWORD(lParam) != HTCLIENT ) {
251.268 - if (window->IsSimpleWindow()) {
251.269 - retValue = MA_NOACTIVATEANDEAT;
251.270 - } else {
251.271 - retValue = MA_NOACTIVATE;
251.272 - }
251.273 - } else {
251.274 - retValue = MA_NOACTIVATE;
251.275 - }
251.276 - }
251.277 - }
251.278 - break;
251.279 - }
251.280 -
251.281 + case WM_MOUSEACTIVATE: {
251.282 + AwtWindow *window = GetContainer();
251.283 + if (window && window->IsFocusableWindow()) {
251.284 + // AWT/Swing will later request focus to a proper component
251.285 + // on handling the Java mouse event. Anyway, we have to
251.286 + // activate the window here as it works both for AWT & Swing.
251.287 + // Do it in our own fassion,
251.288 + window->AwtSetActiveWindow(TRUE, LOWORD(lParam)/*hittest*/);
251.289 + }
251.290 + mr = mrConsume;
251.291 + retValue = MA_NOACTIVATE;
251.292 + break;
251.293 + }
251.294 case WM_CTLCOLORMSGBOX:
251.295 case WM_CTLCOLOREDIT:
251.296 case WM_CTLCOLORLISTBOX:
251.297 @@ -1920,7 +1894,15 @@
251.298 break;
251.299
251.300 case WM_AWT_COMPONENT_SETFOCUS:
251.301 - retValue = (LRESULT)WmComponentSetFocus((WmComponentSetFocusData *)wParam);
251.302 + if ((BOOL)wParam) {
251.303 + retValue = SynthesizeWmSetFocus(GetHWnd(), NULL);
251.304 + } else {
251.305 + retValue = SynthesizeWmKillFocus(GetHWnd(), NULL);
251.306 + }
251.307 + mr = mrConsume;
251.308 + break;
251.309 + case WM_AWT_WINDOW_SETACTIVE:
251.310 + retValue = (LRESULT)((AwtWindow*)this)->AwtSetActiveWindow((BOOL)wParam);
251.311 mr = mrConsume;
251.312 break;
251.313
251.314 @@ -2048,188 +2030,16 @@
251.315
251.316 MsgRouting AwtComponent::WmSetFocus(HWND hWndLostFocus)
251.317 {
251.318 - if (sm_focusOwner == GetHWnd()) {
251.319 - sm_realFocusOpposite = NULL;
251.320 - return mrConsume;
251.321 - }
251.322 -
251.323 - HWND toplevelHWnd = AwtComponent::GetTopLevelParentForWindow(GetHWnd());
251.324 - AwtComponent *comp = AwtComponent::GetComponent(toplevelHWnd);
251.325 -
251.326 - if (comp && comp->IsEmbeddedFrame() &&
251.327 - !((AwtFrame*)comp)->activateEmbeddedFrameOnSetFocus(hWndLostFocus))
251.328 - {
251.329 - // Fix for 6562716.
251.330 - // In order that AwtSetFocus() returns FALSE.
251.331 - sm_suppressFocusAndActivation = TRUE;
251.332 - ::SetFocus(NULL);
251.333 - sm_suppressFocusAndActivation = FALSE;
251.334 -
251.335 - return mrConsume;
251.336 - }
251.337 -
251.338 - sm_focusOwner = GetHWnd();
251.339 - sm_focusedWindow = toplevelHWnd;
251.340 -
251.341 - if (sm_realFocusOpposite != NULL) {
251.342 - hWndLostFocus = sm_realFocusOpposite;
251.343 - sm_realFocusOpposite = NULL;
251.344 - }
251.345 -
251.346 - sm_wheelRotationAmount = 0;
251.347 -
251.348 - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_GAINED, hWndLostFocus);
251.349 -
251.350 + m_wheelRotationAmount = 0;
251.351 return mrDoDefault;
251.352 }
251.353
251.354 MsgRouting AwtComponent::WmKillFocus(HWND hWndGotFocus)
251.355 {
251.356 - if (sm_focusOwner != NULL && sm_focusOwner == hWndGotFocus) {
251.357 - return mrConsume;
251.358 - }
251.359 -
251.360 - if (sm_focusOwner != GetHWnd()) {
251.361 - if (sm_focusOwner != NULL) {
251.362 - if (hWndGotFocus != NULL &&
251.363 - AwtComponent::GetComponent(hWndGotFocus) != NULL)
251.364 - {
251.365 - sm_realFocusOpposite = sm_focusOwner;
251.366 - }
251.367 - ::SendMessage(sm_focusOwner, WM_KILLFOCUS, (WPARAM)hWndGotFocus,
251.368 - 0);
251.369 - }
251.370 - return mrConsume;
251.371 - }
251.372 -
251.373 - AwtComponent *comp = AwtComponent::GetComponent(sm_focusedWindow);
251.374 -
251.375 - if (comp && comp->IsEmbeddedFrame()) {
251.376 - ((AwtFrame*)comp)->deactivateEmbeddedFrameOnKillFocus(hWndGotFocus);
251.377 - }
251.378 -
251.379 - sm_focusOwner = NULL;
251.380 - sm_wheelRotationAmount = 0;
251.381 -
251.382 - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_LOST, hWndGotFocus);
251.383 + m_wheelRotationAmount = 0;
251.384 return mrDoDefault;
251.385 }
251.386
251.387 -jboolean
251.388 -AwtComponent::WmComponentSetFocus(WmComponentSetFocusData *data)
251.389 -{
251.390 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.391 - if (env->EnsureLocalCapacity(1) < 0) {
251.392 - env->DeleteGlobalRef(data->lightweightChild);
251.393 - delete data;
251.394 - return JNI_FALSE;
251.395 - }
251.396 -
251.397 - jboolean result = JNI_FALSE;
251.398 -
251.399 - BOOL setSuppressFocusAndActivation = FALSE;
251.400 -
251.401 - /*
251.402 - * This is a fix for 4628933.
251.403 - * If sm_suppressFocusAndActivation is TRUE here then
251.404 - * this means that we dispatch WM_COMPONENT_SET_FOCUS inside
251.405 - * dispatching bounce activation, this unlikely but possible.
251.406 - * So we reset sm_suppressFocusAndActivation to give a chance
251.407 - * to dispatch focus events which will generate due this focus
251.408 - * request to Java.
251.409 - *
251.410 - * son@sparc.spb.su
251.411 - */
251.412 - if (sm_suppressFocusAndActivation) {
251.413 - sm_suppressFocusAndActivation = FALSE;
251.414 - setSuppressFocusAndActivation = TRUE;
251.415 - }
251.416 -
251.417 - jobject heavyweight = GetTarget(env);
251.418 - jint retval = env->CallStaticIntMethod
251.419 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
251.420 - AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID,
251.421 - heavyweight, data->lightweightChild, data->temporary,
251.422 - data->focusedWindowChangeAllowed, data->time, data->cause);
251.423 -
251.424 - if (retval == java_awt_KeyboardFocusManager_SNFH_SUCCESS_HANDLED) {
251.425 - result = JNI_TRUE;
251.426 - } else if (retval == java_awt_KeyboardFocusManager_SNFH_SUCCESS_PROCEED) {
251.427 - result = (AwtSetFocus()) ? JNI_TRUE : JNI_FALSE;
251.428 - if (result == JNI_FALSE) {
251.429 - env->CallStaticVoidMethod
251.430 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
251.431 - AwtKeyboardFocusManager::removeLastFocusRequestMID,
251.432 - heavyweight);
251.433 - }
251.434 - } else {
251.435 - DASSERT(retval == java_awt_KeyboardFocusManager_SNFH_FAILURE);
251.436 - result = JNI_FALSE;
251.437 - }
251.438 - env->DeleteLocalRef(heavyweight);
251.439 -
251.440 - /*
251.441 - * Set sm_suppressFocusAndActivation back to TRUE if needed.
251.442 - * Fix for 4628933 (son@sparc.spb.su)
251.443 - */
251.444 - if (setSuppressFocusAndActivation) {
251.445 - sm_suppressFocusAndActivation = TRUE;
251.446 - }
251.447 -
251.448 - env->DeleteGlobalRef(data->lightweightChild);
251.449 - delete data;
251.450 - return result;
251.451 -}
251.452 -
251.453 -BOOL
251.454 -AwtComponent::AwtSetFocus()
251.455 -{
251.456 - HWND hwnd = GetHWnd();
251.457 -
251.458 - if (sm_focusOwner == hwnd) {
251.459 - return TRUE;
251.460 - }
251.461 -
251.462 - HWND fgWindow = ::GetForegroundWindow();
251.463 - if (NULL != fgWindow) {
251.464 - DWORD fgProcessID;
251.465 - ::GetWindowThreadProcessId(fgWindow, &fgProcessID);
251.466 -
251.467 - if (fgProcessID != ::GetCurrentProcessId()
251.468 - && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID))
251.469 - {
251.470 - // fix for 6458497. we shouldn't request focus if it is out of both
251.471 - // our and embedder process.
251.472 - return FALSE;
251.473 - }
251.474 - }
251.475 -
251.476 - AwtWindow *pCont = GetContainer();
251.477 - AwtFrame *owner = pCont ? pCont->GetOwningFrameOrDialog() : NULL;
251.478 -
251.479 - if (owner == NULL) {
251.480 - ::SetFocus(hwnd);
251.481 - if (::GetFocus() != hwnd) {
251.482 - return FALSE;
251.483 - }
251.484 - } else {
251.485 - HWND oldFocusOwner = sm_focusOwner;
251.486 - if (oldFocusOwner != NULL) {
251.487 - ::SendMessage(oldFocusOwner, WM_KILLFOCUS, (WPARAM)hwnd, 0);
251.488 - }
251.489 -
251.490 - sm_suppressFocusAndActivation = TRUE;
251.491 - ::SetActiveWindow(owner->GetHWnd());
251.492 - ::SetFocus(owner->GetProxyFocusOwner());
251.493 - sm_suppressFocusAndActivation = FALSE;
251.494 -
251.495 - sm_focusedWindow = GetTopLevelParentForWindow(GetHWnd());
251.496 - ::SendMessage(hwnd, WM_SETFOCUS, (WPARAM)oldFocusOwner, 0);
251.497 - }
251.498 -
251.499 - return TRUE;
251.500 -}
251.501 -
251.502 MsgRouting AwtComponent::WmCtlColor(HDC hDC, HWND hCtrl,
251.503 UINT ctlColor, HBRUSH& retBrush)
251.504 {
251.505 @@ -2524,7 +2334,6 @@
251.506 AwtWindow::GetGrabbedWindow()->Ungrab();
251.507 }
251.508 }
251.509 -
251.510 return mrConsume;
251.511 }
251.512
251.513 @@ -2638,11 +2447,11 @@
251.514 BOOL result;
251.515 UINT platformLines;
251.516
251.517 - sm_wheelRotationAmount += wheelRotation;
251.518 + m_wheelRotationAmount += wheelRotation;
251.519
251.520 // AWT interprets wheel rotation differently than win32, so we need to
251.521 // decode wheel amount.
251.522 - jint roundedWheelRotation = sm_wheelRotationAmount / (-1 * WHEEL_DELTA);
251.523 + jint roundedWheelRotation = m_wheelRotationAmount / (-1 * WHEEL_DELTA);
251.524 jdouble preciseWheelRotation = (jdouble) wheelRotation / (-1 * WHEEL_DELTA);
251.525
251.526 MSG msg;
251.527 @@ -2668,7 +2477,9 @@
251.528 eventPt.x, eventPt.y, GetJavaModifiers(), 0, 0, scrollType,
251.529 scrollLines, roundedWheelRotation, preciseWheelRotation, &msg);
251.530
251.531 - sm_wheelRotationAmount %= WHEEL_DELTA;
251.532 + m_wheelRotationAmount %= WHEEL_DELTA;
251.533 + // this message could be propagated up to the parent chain
251.534 + // by the mouse message post processors
251.535 return mrConsume;
251.536 }
251.537
251.538 @@ -3088,6 +2899,19 @@
251.539 {0,0}
251.540 };
251.541
251.542 +// The full map of the current keyboard state including
251.543 +// windows virtual key, scancode, java virtual key, and unicode
251.544 +// for this key sans modifiers.
251.545 +// All but first element may be 0.
251.546 +// XXX in the update releases this is an addition to the unchanged existing code
251.547 +struct DynPrimaryKeymapEntry {
251.548 + UINT wkey;
251.549 + UINT scancode;
251.550 + UINT jkey;
251.551 + WCHAR unicode;
251.552 +};
251.553 +
251.554 +static DynPrimaryKeymapEntry dynPrimaryKeymap[256];
251.555
251.556 void
251.557 AwtComponent::InitDynamicKeyMapTable()
251.558 @@ -3096,6 +2920,8 @@
251.559
251.560 if (!kbdinited) {
251.561 AwtComponent::BuildDynamicKeyMapTable();
251.562 + // We cannot build it here since JNI is not available yet:
251.563 + //AwtComponent::BuildPrimaryDynamicTable();
251.564 kbdinited = TRUE;
251.565 }
251.566 }
251.567 @@ -3321,7 +3147,11 @@
251.568
251.569 for (int j = 0; dynamicKeyMapTable[j].windowsKey != 0; j++) {
251.570 if (dynamicKeyMapTable[j].windowsKey == windowsKey) {
251.571 - return dynamicKeyMapTable[j].javaKey;
251.572 + if (dynamicKeyMapTable[j].javaKey != java_awt_event_KeyEvent_VK_UNDEFINED) {
251.573 + return dynamicKeyMapTable[j].javaKey;
251.574 + }else{
251.575 + break;
251.576 + }
251.577 }
251.578 }
251.579
251.580 @@ -3398,6 +3228,122 @@
251.581
251.582 return FALSE;
251.583 }
251.584 +static void
251.585 +resetKbdState( BYTE kstate[256]) {
251.586 + BYTE tmpState[256];
251.587 + WCHAR wc[2];
251.588 + memmove(tmpState, kstate, sizeof(kstate));
251.589 + tmpState[VK_SHIFT] = 0;
251.590 + tmpState[VK_CONTROL] = 0;
251.591 + tmpState[VK_MENU] = 0;
251.592 +
251.593 + ::ToUnicodeEx(VK_SPACE,::MapVirtualKey(VK_SPACE, 0), tmpState, wc, 2, 0, GetKeyboardLayout(0));
251.594 +}
251.595 +
251.596 +// XXX in the update releases this is an addition to the unchanged existing code
251.597 +// After the call, a table will have a unicode associated with a windows virtual keycode
251.598 +// sans modifiers. With some further simplification, one can
251.599 +// derive java keycode from it, and anyway we will pass this unicode value
251.600 +// all the way up in a comment to a KeyEvent.
251.601 +void
251.602 +AwtComponent::BuildPrimaryDynamicTable() {
251.603 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.604 + // XXX: how about that?
251.605 + //CriticalSection::Lock l(GetLock());
251.606 + //if (GetPeer(env) == NULL) {
251.607 + // /* event received during termination. */
251.608 + // return;
251.609 + //}
251.610 +
251.611 + HKL hkl = GetKeyboardLayout();
251.612 + UINT sc = 0;
251.613 + BYTE kbdState[AwtToolkit::KB_STATE_SIZE];
251.614 + memset(kbdState, 0, sizeof (kbdState));
251.615 +
251.616 + // Use JNI call to obtain java key code. We should keep a list
251.617 + // of currently available keycodes in a single place.
251.618 + static jclass extKeyCodesCls;
251.619 + if( extKeyCodesCls == NULL) {
251.620 + jclass extKeyCodesClsLocal = env->FindClass("sun/awt/ExtendedKeyCodes");
251.621 + DASSERT(extKeyCodesClsLocal);
251.622 + if (extKeyCodesClsLocal == NULL) {
251.623 + /* exception already thrown */
251.624 + return;
251.625 + }
251.626 + extKeyCodesCls = (jclass)env->NewGlobalRef(extKeyCodesClsLocal);
251.627 + env->DeleteLocalRef(extKeyCodesClsLocal);
251.628 + }
251.629 + static jmethodID getExtendedKeyCodeForChar;
251.630 + if (getExtendedKeyCodeForChar == NULL) {
251.631 + getExtendedKeyCodeForChar =
251.632 + env->GetStaticMethodID(extKeyCodesCls, "getExtendedKeyCodeForChar", "(I)I");
251.633 + DASSERT(getExtendedKeyCodeForChar);
251.634 + }
251.635 + jint extJKC; //extended Java key code
251.636 +
251.637 + for (UINT i = 0; i < 256; i++) {
251.638 + dynPrimaryKeymap[i].wkey = i;
251.639 + dynPrimaryKeymap[i].jkey = java_awt_event_KeyEvent_VK_UNDEFINED;
251.640 + dynPrimaryKeymap[i].unicode = 0;
251.641 +
251.642 + if ((sc = MapVirtualKey (i, 0)) == 0) {
251.643 + dynPrimaryKeymap[i].scancode = 0;
251.644 + continue;
251.645 + }
251.646 + dynPrimaryKeymap[i].scancode = sc;
251.647 +
251.648 + // XXX process cases like VK_SHIFT etc.
251.649 + kbdState[i] = 0x80; // "key pressed".
251.650 + WCHAR wc[16];
251.651 + int k = ::ToUnicodeEx(i, sc, kbdState, wc, 16, 0, hkl);
251.652 + if (k == 1) {
251.653 + // unicode
251.654 + dynPrimaryKeymap[i].unicode = wc[0];
251.655 + if (dynPrimaryKeymap[i].jkey == java_awt_event_KeyEvent_VK_UNDEFINED) {
251.656 + // Convert unicode to java keycode.
251.657 + //dynPrimaryKeymap[i].jkey = ((UINT)(wc[0]) + 0x01000000);
251.658 + //
251.659 + //XXX If this key in on the keypad, we should force a special value equal to
251.660 + //XXX an old java keycode: but how to say if it is a keypad key?
251.661 + //XXX We'll do it in WmKeyUp/Down.
251.662 + extJKC = env->CallStaticIntMethod(extKeyCodesCls,
251.663 + getExtendedKeyCodeForChar, (jint)(wc[0]));
251.664 + dynPrimaryKeymap[i].jkey = extJKC;
251.665 + }
251.666 + }else if (k == -1) {
251.667 + // dead key: use charToDeadVKTable
251.668 + dynPrimaryKeymap[i].unicode = wc[0];
251.669 + resetKbdState( kbdState );
251.670 + for (const CharToVKEntry *map = charToDeadVKTable; map->c != 0; ++map) {
251.671 + if (wc[0] == map->c) {
251.672 + dynPrimaryKeymap[i].jkey = map->javaKey;
251.673 + break;
251.674 + }
251.675 + }
251.676 + } else if (k == 0) {
251.677 + // reset
251.678 + resetKbdState( kbdState );
251.679 + }else {
251.680 + printf ("++++Whats that? wkey 0x%x (%d)\n", i,i);
251.681 + }
251.682 + kbdState[i] = 0; // "key unpressed"
251.683 + }
251.684 +}
251.685 +void
251.686 +AwtComponent::UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers)
251.687 +{
251.688 + if( wkey && wkey < 256 ) {
251.689 + if(keyLocation == java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD) {
251.690 + // At the creation time,
251.691 + // dynPrimaryKeymap cannot distinguish between e.g. "/" and "NumPad /"
251.692 + dynPrimaryKeymap[wkey].jkey = jkeyLegacy;
251.693 + }
251.694 + if(dynPrimaryKeymap[wkey].jkey == java_awt_event_KeyEvent_VK_UNDEFINED) {
251.695 + // E.g. it is non-unicode key
251.696 + dynPrimaryKeymap[wkey].jkey = jkeyLegacy;
251.697 + }
251.698 + }
251.699 +}
251.700
251.701 UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops)
251.702 {
251.703 @@ -3554,10 +3500,12 @@
251.704 jint keyLocation = GetKeyLocation(wkey, flags);
251.705 UINT jkey = WindowsKeyToJavaKey(wkey, modifiers);
251.706 UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE);
251.707 + UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
251.708 +
251.709
251.710 SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_PRESSED,
251.711 TimeHelper::windowsToUTC(msg.time), jkey, character,
251.712 - modifiers, keyLocation, &msg);
251.713 + modifiers, keyLocation, (jlong)wkey, &msg);
251.714
251.715 // bugid 4724007: Windows does not create a WM_CHAR for the Del key
251.716 // for some reason, so we need to create the KEY_TYPED event on the
251.717 @@ -3569,7 +3517,7 @@
251.718 TimeHelper::windowsToUTC(msg.time),
251.719 java_awt_event_KeyEvent_VK_UNDEFINED,
251.720 character, modifiers,
251.721 - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN);
251.722 + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0);
251.723 }
251.724
251.725 return mrConsume;
251.726 @@ -3594,10 +3542,11 @@
251.727 jint keyLocation = GetKeyLocation(wkey, flags);
251.728 UINT jkey = WindowsKeyToJavaKey(wkey, modifiers);
251.729 UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD);
251.730 + UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
251.731
251.732 SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED,
251.733 TimeHelper::windowsToUTC(msg.time), jkey, character,
251.734 - modifiers, keyLocation, &msg);
251.735 + modifiers, keyLocation, (jlong)wkey, &msg);
251.736 return mrConsume;
251.737 }
251.738
251.739 @@ -3613,6 +3562,7 @@
251.740 m_idLang = LOWORD(hKeyboardLayout); // lower word of HKL is LANGID
251.741 m_CodePage = LangToCodePage(m_idLang);
251.742 BuildDynamicKeyMapTable(); // compute new mappings for VK_OEM
251.743 + BuildPrimaryDynamicTable();
251.744 return mrConsume; // do not propagate to children
251.745 }
251.746
251.747 @@ -3643,7 +3593,7 @@
251.748 TimeHelper::windowsToUTC(msg.time),
251.749 java_awt_event_KeyEvent_VK_UNDEFINED,
251.750 unicodeChar, modifiers,
251.751 - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
251.752 + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
251.753 &msg);
251.754 return mrConsume;
251.755 }
251.756 @@ -3712,7 +3662,7 @@
251.757 TimeHelper::windowsToUTC(msg.time),
251.758 java_awt_event_KeyEvent_VK_UNDEFINED,
251.759 unicodeChar, modifiers,
251.760 - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
251.761 + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
251.762 &msg);
251.763 return mrConsume;
251.764 }
251.765 @@ -4033,14 +3983,15 @@
251.766
251.767 HWND AwtComponent::GetProxyFocusOwner()
251.768 {
251.769 - AwtWindow * window = GetContainer();
251.770 + AwtWindow *window = GetContainer();
251.771 if (window != 0) {
251.772 - AwtFrame * owner = window->GetOwningFrameOrDialog();
251.773 + AwtFrame *owner = window->GetOwningFrameOrDialog();
251.774 if (owner != 0) {
251.775 return owner->GetProxyFocusOwner();
251.776 + } else if (!window->IsSimpleWindow()) { // isn't an owned simple window
251.777 + return ((AwtFrame*)window)->GetProxyFocusOwner();
251.778 }
251.779 }
251.780 -
251.781 return (HWND)NULL;
251.782 }
251.783
251.784 @@ -4562,6 +4513,25 @@
251.785 return hdc;
251.786 }
251.787
251.788 +void AwtComponent::FillBackground(HDC hMemoryDC, SIZE &size)
251.789 +{
251.790 + RECT eraseR = { 0, 0, size.cx, size.cy };
251.791 + VERIFY(::FillRect(hMemoryDC, &eraseR, GetBackgroundBrush()));
251.792 +}
251.793 +
251.794 +void AwtComponent::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha)
251.795 +{
251.796 + if (bitmapBits) {
251.797 + DWORD* dest = (DWORD*)bitmapBits;
251.798 + //XXX: might be optimized to use one loop (cy*cx -> 0).
251.799 + for (int i = 0; i < size.cy; i++ ) {
251.800 + for (int j = 0; j < size.cx; j++ ) {
251.801 + ((BYTE*)(dest++))[3] = alpha;
251.802 + }
251.803 + }
251.804 + }
251.805 +}
251.806 +
251.807 jintArray AwtComponent::CreatePrintedPixels(SIZE &loc, SIZE &size) {
251.808 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.809
251.810 @@ -4619,26 +4589,53 @@
251.811 return pixelArray;
251.812 }
251.813
251.814 -void *
251.815 -AwtComponent::GetNativeFocusOwner() {
251.816 +void* AwtComponent::SetNativeFocusOwner(void *self) {
251.817 + if (self == NULL) {
251.818 + // It means that the KFM wants to set focus to null
251.819 + sm_focusOwner = NULL;
251.820 + return NULL;
251.821 + }
251.822 +
251.823 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.824 +
251.825 + AwtComponent *c = NULL;
251.826 + jobject peer = (jobject)self;
251.827 +
251.828 + PDATA pData;
251.829 + JNI_CHECK_NULL_GOTO(peer, "peer", ret);
251.830 + pData = JNI_GET_PDATA(peer);
251.831 + if (pData == NULL) {
251.832 + goto ret;
251.833 + }
251.834 + c = (AwtComponent *)pData;
251.835 +
251.836 +ret:
251.837 + if (c && ::IsWindow(c->GetHWnd())) {
251.838 + sm_focusOwner = c->GetHWnd();
251.839 + AwtFrame *owner = (AwtFrame*)GetComponent(c->GetProxyToplevelContainer());
251.840 + if (owner) {
251.841 + owner->SetLastProxiedFocusOwner(sm_focusOwner);
251.842 + }
251.843 + } else {
251.844 + sm_focusOwner = NULL;
251.845 + }
251.846 + env->DeleteGlobalRef(peer);
251.847 + return NULL;
251.848 +}
251.849 +
251.850 +void* AwtComponent::GetNativeFocusedWindow() {
251.851 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.852 + AwtComponent *comp =
251.853 + AwtComponent::GetComponent(AwtComponent::GetFocusedWindow());
251.854 + return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL;
251.855 +}
251.856 +
251.857 +void* AwtComponent::GetNativeFocusOwner() {
251.858 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.859 AwtComponent *comp =
251.860 AwtComponent::GetComponent(AwtComponent::sm_focusOwner);
251.861 return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL;
251.862 }
251.863 -void *
251.864 -AwtComponent::GetNativeFocusedWindow() {
251.865 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.866 - AwtComponent *comp =
251.867 - AwtComponent::GetComponent(AwtComponent::sm_focusedWindow);
251.868 - return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL;
251.869 -}
251.870 -void
251.871 -AwtComponent::ClearGlobalFocusOwner() {
251.872 - if (AwtComponent::sm_focusOwner != NULL) {
251.873 - ::SetFocus(NULL);
251.874 - }
251.875 -}
251.876
251.877 AwtComponent* AwtComponent::SearchChild(UINT id) {
251.878 ChildListItem* child;
251.879 @@ -4674,7 +4671,7 @@
251.880 }
251.881
251.882 void AwtComponent::SendKeyEvent(jint id, jlong when, jint raw, jint cooked,
251.883 - jint modifiers, jint keyLocation, MSG *pMsg)
251.884 + jint modifiers, jint keyLocation, jlong nativeCode, MSG *pMsg)
251.885 {
251.886 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.887 CriticalSection::Lock l(GetLock());
251.888 @@ -4711,6 +4708,18 @@
251.889 if (safe_ExceptionOccurred(env)) env->ExceptionDescribe();
251.890 DASSERT(!safe_ExceptionOccurred(env));
251.891 DASSERT(keyEvent != NULL);
251.892 + env->SetLongField(keyEvent, AwtKeyEvent::rawCodeID, nativeCode);
251.893 + if( nativeCode && nativeCode < 256 ) {
251.894 + env->SetLongField(keyEvent, AwtKeyEvent::primaryLevelUnicodeID, (jlong)(dynPrimaryKeymap[nativeCode].unicode));
251.895 + env->SetLongField(keyEvent, AwtKeyEvent::extendedKeyCodeID, (jlong)(dynPrimaryKeymap[nativeCode].jkey));
251.896 + if( nativeCode < 255 ) {
251.897 + env->SetLongField(keyEvent, AwtKeyEvent::scancodeID, (jlong)(dynPrimaryKeymap[nativeCode].scancode));
251.898 + }else if( pMsg != NULL ) {
251.899 + // unknown key with virtual keycode 0xFF.
251.900 + // Its scancode is not in the table, pickup it from the message.
251.901 + env->SetLongField(keyEvent, AwtKeyEvent::scancodeID, (jlong)(HIWORD(pMsg->lParam) & 0xFF));
251.902 + }
251.903 + }
251.904 if (pMsg != NULL) {
251.905 AwtAWTEvent::saveMSG(env, pMsg, keyEvent);
251.906 }
251.907 @@ -4724,16 +4733,17 @@
251.908 AwtComponent::SendKeyEventToFocusOwner(jint id, jlong when,
251.909 jint raw, jint cooked,
251.910 jint modifiers, jint keyLocation,
251.911 + jlong nativeCode,
251.912 MSG *msg)
251.913 {
251.914 /*
251.915 * if focus owner is null, but focused window isn't
251.916 * we will send key event to focused window
251.917 */
251.918 - HWND hwndTarget = ((sm_focusOwner != NULL) ? sm_focusOwner : sm_focusedWindow);
251.919 + HWND hwndTarget = ((sm_focusOwner != NULL) ? sm_focusOwner : AwtComponent::GetFocusedWindow());
251.920
251.921 if (hwndTarget == GetHWnd()) {
251.922 - SendKeyEvent(id, when, raw, cooked, modifiers, keyLocation, msg);
251.923 + SendKeyEvent(id, when, raw, cooked, modifiers, keyLocation, nativeCode, msg);
251.924 } else {
251.925 AwtComponent *target = NULL;
251.926 if (hwndTarget != NULL) {
251.927 @@ -4744,7 +4754,7 @@
251.928 }
251.929 if (target != NULL) {
251.930 target->SendKeyEvent(id, when, raw, cooked, modifiers,
251.931 - keyLocation, msg);
251.932 + keyLocation, nativeCode, msg);
251.933 }
251.934 }
251.935 }
251.936 @@ -5158,14 +5168,7 @@
251.937 jint x = (env)->GetIntField(mouseEvent, AwtMouseEvent::xID);
251.938 jint y = (env)->GetIntField(mouseEvent, AwtMouseEvent::yID);
251.939 MSG* msg = CreateMessage(message, wParam, MAKELPARAM(x, y), x, y);
251.940 - // If the window is not focusable but if this is a focusing
251.941 - // message we should skip it then and perform our own actions.
251.942 - AwtWindow *pCont = GetContainer();
251.943 - if ((pCont && pCont->IsFocusableWindow()) || !ActMouseMessage(msg)) {
251.944 - PostHandleEventMessage(msg, TRUE);
251.945 - } else {
251.946 - delete msg;
251.947 - }
251.948 + PostHandleEventMessage(msg, TRUE);
251.949 }
251.950
251.951 BOOL AwtComponent::InheritsNativeMouseWheelBehavior() {return false;}
251.952 @@ -5251,15 +5254,14 @@
251.953
251.954 void AwtComponent::Enable(BOOL bEnable)
251.955 {
251.956 - sm_suppressFocusAndActivation = TRUE;
251.957 -
251.958 if (bEnable && IsTopLevel()) {
251.959 // we should not enable blocked toplevels
251.960 bEnable = !::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()));
251.961 }
251.962 + // Shouldn't trigger native focus change
251.963 + // (only the proxy may be the native focus owner).
251.964 ::EnableWindow(GetHWnd(), bEnable);
251.965
251.966 - sm_suppressFocusAndActivation = FALSE;
251.967 CriticalSection::Lock l(GetLock());
251.968 VerifyState();
251.969 }
251.970 @@ -5286,23 +5288,12 @@
251.971 }
251.972 }
251.973
251.974 -/**
251.975 - * Special procedure responsible for performing the actions which
251.976 - * usually happen with component when mouse buttons are being
251.977 - * pressed. It is required in case of non-focusable components - we
251.978 - * don't pass mouse messages directly to the windows because otherwise
251.979 - * it will try to focus component first which we don't want. This
251.980 - * function receives MSG and should return TRUE if it processed the
251.981 - * message and no furhter processing is allowed, FALSE otherwise.
251.982 - * Default implementation returns TRUE it is the message on which
251.983 - * Windows try to focus the component. Descendant components write
251.984 - * their own implementation of this procedure.
251.985 - */
251.986 -BOOL AwtComponent::ActMouseMessage(MSG * pMsg) {
251.987 - if (IsFocusingMessage(pMsg->message)) {
251.988 - return TRUE;
251.989 - }
251.990 - return FALSE;
251.991 +BOOL AwtComponent::IsFocusingMouseMessage(MSG *pMsg) {
251.992 + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK;
251.993 +}
251.994 +
251.995 +BOOL AwtComponent::IsFocusingKeyMessage(MSG *pMsg) {
251.996 + return pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SPACE;
251.997 }
251.998
251.999 void AwtComponent::_Show(void *param)
251.1000 @@ -5640,22 +5631,12 @@
251.1001 return;
251.1002 }
251.1003
251.1004 - /* Post the message directly to the subclassed component. */
251.1005 - if (self && (pData = JNI_GET_PDATA(self))) {
251.1006 - AwtComponent* p = (AwtComponent*)pData;
251.1007 - // If the window is not focusable but if this is a focusing
251.1008 - // message we should skip it then and perform our own actions.
251.1009 - AwtWindow *pCont = (AwtWindow*)(p->GetContainer());
251.1010 - if ((pCont && pCont->IsFocusableWindow()) ||
251.1011 - !p->ActMouseMessage(&msg))
251.1012 - {
251.1013 - // Create copy for local msg
251.1014 - MSG* pCopiedMsg = new MSG;
251.1015 - memmove(pCopiedMsg, &msg, sizeof(MSG));
251.1016 - // Event handler deletes msg
251.1017 - p->PostHandleEventMessage(pCopiedMsg, FALSE);
251.1018 - }
251.1019 - }
251.1020 + // Create copy for local msg
251.1021 + MSG* pCopiedMsg = new MSG;
251.1022 + memmove(pCopiedMsg, &msg, sizeof(MSG));
251.1023 + // Event handler deletes msg
251.1024 + p->PostHandleEventMessage(pCopiedMsg, FALSE);
251.1025 +
251.1026 env->DeleteGlobalRef(self);
251.1027 env->DeleteGlobalRef(event);
251.1028 delete nhes;
251.1029 @@ -5777,19 +5758,15 @@
251.1030 delete sfs;
251.1031 }
251.1032
251.1033 -jboolean AwtComponent::_RequestFocus(void *param)
251.1034 +// Sets or kills focus for a component.
251.1035 +void AwtComponent::_SetFocus(void *param)
251.1036 {
251.1037 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.1038
251.1039 - RequestFocusStruct *rfs = (RequestFocusStruct *)param;
251.1040 - jobject self = rfs->component;
251.1041 - jobject lightweightChild = rfs->lightweightChild;
251.1042 - jboolean temporary = rfs->temporary;
251.1043 - jboolean focusedWindowChangeAllowed = rfs->focusedWindowChangeAllowed;
251.1044 - jlong time = rfs->time;
251.1045 - jobject cause = rfs->cause;
251.1046 -
251.1047 - jboolean result = JNI_FALSE;
251.1048 + SetFocusStruct *sfs = (SetFocusStruct *)param;
251.1049 + jobject self = sfs->component;
251.1050 + jboolean doSetFocus = sfs->doSetFocus;
251.1051 +
251.1052 AwtComponent *c = NULL;
251.1053
251.1054 PDATA pData;
251.1055 @@ -5801,25 +5778,13 @@
251.1056 }
251.1057
251.1058 c = (AwtComponent *)pData;
251.1059 - if (::IsWindow(c->GetHWnd()))
251.1060 - {
251.1061 - WmComponentSetFocusData *data = new WmComponentSetFocusData;
251.1062 - data->lightweightChild = env->NewGlobalRef(lightweightChild);
251.1063 - data->temporary = temporary;
251.1064 - data->focusedWindowChangeAllowed = focusedWindowChangeAllowed;
251.1065 - data->time = time;
251.1066 - data->cause = cause;
251.1067 - result = (jboolean)c->SendMessage(WM_AWT_COMPONENT_SETFOCUS, (WPARAM)data, 0);
251.1068 - // data and global ref in it are deleted in WmComponentSetFocus
251.1069 + if (::IsWindow(c->GetHWnd())) {
251.1070 + c->SendMessage(WM_AWT_COMPONENT_SETFOCUS, (WPARAM)doSetFocus, 0);
251.1071 }
251.1072 ret:
251.1073 env->DeleteGlobalRef(self);
251.1074 - env->DeleteGlobalRef(lightweightChild);
251.1075 - env->DeleteGlobalRef(cause);
251.1076 -
251.1077 - delete rfs;
251.1078 -
251.1079 - return result;
251.1080 +
251.1081 + delete sfs;
251.1082 }
251.1083
251.1084 void AwtComponent::_Start(void *param)
251.1085 @@ -6082,9 +6047,9 @@
251.1086 HWND selfWnd = comps[0]->GetHWnd();
251.1087 HWND parentWnd = comps[1]->GetHWnd();
251.1088 if (::IsWindow(selfWnd) && ::IsWindow(parentWnd)) {
251.1089 - sm_suppressFocusAndActivation = TRUE;
251.1090 + // Shouldn't trigger native focus change
251.1091 + // (only the proxy may be the native focus owner).
251.1092 ::SetParent(selfWnd, parentWnd);
251.1093 - sm_suppressFocusAndActivation = FALSE;
251.1094 }
251.1095 }
251.1096 delete[] comps;
251.1097 @@ -6107,15 +6072,12 @@
251.1098
251.1099 AwtComponent *c = NULL;
251.1100
251.1101 -
251.1102 -
251.1103 PDATA pData;
251.1104 JNI_CHECK_PEER_GOTO(self, ret);
251.1105 +
251.1106 c = (AwtComponent *)pData;
251.1107 - if (::IsWindow(c->GetHWnd()))
251.1108 - {
251.1109 + if (::IsWindow(c->GetHWnd())) {
251.1110 HRGN hRgn = NULL;
251.1111 -
251.1112 if (region || x1 || x2 || y1 || y2) {
251.1113 // If all the params are zeros, the shape must be simply reset.
251.1114 // Otherwise, convert it into a region.
251.1115 @@ -6157,6 +6119,33 @@
251.1116 delete data;
251.1117 }
251.1118
251.1119 +void AwtComponent::_SetZOrder(void *param) {
251.1120 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.1121 +
251.1122 + SetZOrderStruct *data = (SetZOrderStruct *)param;
251.1123 + jobject self = data->component;
251.1124 + HWND above = HWND_TOP;
251.1125 + if (data->above != 0) {
251.1126 + above = reinterpret_cast<HWND>(data->above);
251.1127 + }
251.1128 +
251.1129 + AwtComponent *c = NULL;
251.1130 +
251.1131 + PDATA pData;
251.1132 + JNI_CHECK_PEER_GOTO(self, ret);
251.1133 +
251.1134 + c = (AwtComponent *)pData;
251.1135 + if (::IsWindow(c->GetHWnd())) {
251.1136 + ::SetWindowPos(c->GetHWnd(), above, 0, 0, 0, 0,
251.1137 + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS);
251.1138 + }
251.1139 +
251.1140 +ret:
251.1141 + env->DeleteGlobalRef(self);
251.1142 +
251.1143 + delete data;
251.1144 +}
251.1145 +
251.1146 void AwtComponent::PostUngrabEvent() {
251.1147 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
251.1148 jobject target = GetTarget(env);
251.1149 @@ -6173,6 +6162,14 @@
251.1150 }
251.1151 }
251.1152
251.1153 +void AwtComponent::SetFocusedWindow(HWND window)
251.1154 +{
251.1155 + HWND old = sm_focusedWindow;
251.1156 + sm_focusedWindow = window;
251.1157 +
251.1158 + AwtWindow::FocusedWindowChanged(old, window);
251.1159 +}
251.1160 +
251.1161 /************************************************************************
251.1162 * Component native methods
251.1163 */
251.1164 @@ -6587,31 +6584,25 @@
251.1165
251.1166 /*
251.1167 * Class: sun_awt_windows_WComponentPeer
251.1168 - * Method: requestFocus
251.1169 - * Signature: (Ljava/awt/Component;ZZJ)Z
251.1170 + * Method: focusGained
251.1171 + * Signature: (Z)
251.1172 */
251.1173 -JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WComponentPeer__1requestFocus
251.1174 - (JNIEnv *env, jobject self, jobject lightweightChild, jboolean temporary,
251.1175 - jboolean focusedWindowChangeAllowed, jlong time, jobject cause)
251.1176 +JNIEXPORT void JNICALL Java_sun_awt_windows_WComponentPeer_setFocus
251.1177 + (JNIEnv *env, jobject self, jboolean doSetFocus)
251.1178 {
251.1179 TRY;
251.1180
251.1181 jobject selfGlobalRef = env->NewGlobalRef(self);
251.1182 - jobject lightweightChildGlobalRef = env->NewGlobalRef(lightweightChild);
251.1183 -
251.1184 - RequestFocusStruct *rfs = new RequestFocusStruct;
251.1185 - rfs->component = selfGlobalRef;
251.1186 - rfs->lightweightChild = lightweightChildGlobalRef;
251.1187 - rfs->temporary = temporary;
251.1188 - rfs->focusedWindowChangeAllowed = focusedWindowChangeAllowed;
251.1189 - rfs->time = time;
251.1190 - rfs->cause = env->NewGlobalRef(cause);
251.1191 -
251.1192 - return (jboolean)AwtToolkit::GetInstance().SyncCall(
251.1193 - (void*(*)(void*))AwtComponent::_RequestFocus, rfs);
251.1194 - // global refs and rfs are deleted in _RequestFocus
251.1195 -
251.1196 - CATCH_BAD_ALLOC_RET(JNI_FALSE);
251.1197 +
251.1198 + SetFocusStruct *sfs = new SetFocusStruct;
251.1199 + sfs->component = selfGlobalRef;
251.1200 + sfs->doSetFocus = doSetFocus;
251.1201 +
251.1202 + AwtToolkit::GetInstance().SyncCall(
251.1203 + (void*(*)(void*))AwtComponent::_SetFocus, sfs);
251.1204 + // global refs and self are deleted in _SetFocus
251.1205 +
251.1206 + CATCH_BAD_ALLOC;
251.1207 }
251.1208
251.1209 /*
251.1210 @@ -6823,25 +6814,6 @@
251.1211 CATCH_BAD_ALLOC_RET(NULL);
251.1212 }
251.1213
251.1214 -JNIEXPORT jboolean JNICALL
251.1215 -Java_sun_awt_windows_WComponentPeer_processSynchronousLightweightTransfer(JNIEnv *env, jclass cls,
251.1216 - jobject heavyweight,
251.1217 - jobject descendant,
251.1218 - jboolean temporary,
251.1219 - jboolean focusedWindowChangeAllowed,
251.1220 - jlong time)
251.1221 -{
251.1222 - TRY;
251.1223 -
251.1224 - return env->CallStaticBooleanMethod(AwtKeyboardFocusManager::keyboardFocusManagerCls,
251.1225 - AwtKeyboardFocusManager::processSynchronousTransfer,
251.1226 - heavyweight, descendant, temporary,
251.1227 - focusedWindowChangeAllowed,
251.1228 - time);
251.1229 -
251.1230 - CATCH_BAD_ALLOC_RET(JNI_TRUE);
251.1231 -}
251.1232 -
251.1233 JNIEXPORT void JNICALL
251.1234 Java_sun_awt_windows_WComponentPeer_pSetParent(JNIEnv* env, jobject self, jobject parent) {
251.1235 TRY;
251.1236 @@ -6883,6 +6855,21 @@
251.1237 CATCH_BAD_ALLOC;
251.1238 }
251.1239
251.1240 +JNIEXPORT void JNICALL
251.1241 +Java_sun_awt_windows_WComponentPeer_setZOrder(JNIEnv* env, jobject self, jlong above)
251.1242 +{
251.1243 + TRY;
251.1244 +
251.1245 + SetZOrderStruct * data = new SetZOrderStruct;
251.1246 + data->component = env->NewGlobalRef(self);
251.1247 + data->above = above;
251.1248 +
251.1249 + AwtToolkit::GetInstance().SyncCall(AwtComponent::_SetZOrder, data);
251.1250 + // global refs and data are deleted in _SetLower
251.1251 +
251.1252 + CATCH_BAD_ALLOC;
251.1253 +}
251.1254 +
251.1255 } /* extern "C" */
251.1256
251.1257
252.1 --- a/src/windows/native/sun/windows/awt_Component.h Thu Apr 16 17:42:00 2009 +0100
252.2 +++ b/src/windows/native/sun/windows/awt_Component.h Thu Apr 16 19:10:32 2009 -0700
252.3 @@ -1,5 +1,5 @@
252.4 /*
252.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
252.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
252.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
252.8 *
252.9 * This code is free software; you can redistribute it and/or modify it
252.10 @@ -78,8 +78,6 @@
252.11
252.12 class AwtDropTarget;
252.13
252.14 -struct WmComponentSetFocusData;
252.15 -
252.16 /*
252.17 * Message routing codes
252.18 */
252.19 @@ -139,12 +137,13 @@
252.20 virtual void RegisterClass();
252.21 virtual void UnregisterClass();
252.22
252.23 - void CreateHWnd(JNIEnv *env, LPCWSTR title,
252.24 + virtual void CreateHWnd(JNIEnv *env, LPCWSTR title,
252.25 DWORD windowStyle, DWORD windowExStyle,
252.26 int x, int y, int w, int h,
252.27 HWND hWndParent, HMENU hMenu,
252.28 COLORREF colorForeground, COLORREF colorBackground,
252.29 jobject peer);
252.30 + virtual void DestroyHWnd();
252.31 void InitPeerGraphicsConfig(JNIEnv *env, jobject peer);
252.32
252.33 virtual void Dispose();
252.34 @@ -221,17 +220,10 @@
252.35 virtual BOOL IsContainer() { return FALSE;} // Plain components can't
252.36
252.37 /**
252.38 - * Perform some actions which by default are being performed by Default Window procedure of
252.39 - * this window class
252.40 - * For detailed comments see implementation in awt_Component.cpp
252.41 + * Returns TRUE if this message will trigger native focus change, FALSE otherwise.
252.42 */
252.43 - virtual BOOL ActMouseMessage(MSG * pMsg);
252.44 - /**
252.45 - * Returns TRUE if this message will this component to become focused. Returns FALSE otherwise.
252.46 - */
252.47 - inline BOOL IsFocusingMessage(UINT message) {
252.48 - return message == WM_LBUTTONDOWN || message == WM_LBUTTONUP || message == WM_LBUTTONDBLCLK;
252.49 - }
252.50 + virtual BOOL IsFocusingKeyMessage(MSG *pMsg);
252.51 + virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
252.52
252.53 BOOL IsFocusable();
252.54
252.55 @@ -373,7 +365,7 @@
252.56 }
252.57
252.58 void SendKeyEventToFocusOwner(jint id, jlong when, jint raw, jint cooked,
252.59 - jint modifiers, jint keyLocation,
252.60 + jint modifiers, jint keyLocation, jlong nativeCode,
252.61 MSG *msg = NULL);
252.62 /*
252.63 * Allocate and initialize a new java.awt.event.KeyEvent, and
252.64 @@ -381,7 +373,7 @@
252.65 * from the target.
252.66 */
252.67 void SendKeyEvent(jint id, jlong when, jint raw, jint cooked,
252.68 - jint modifiers, jint keyLocation,
252.69 + jint modifiers, jint keyLocation, jlong nativeCode,
252.70 MSG *msg = NULL);
252.71
252.72 /*
252.73 @@ -431,13 +423,6 @@
252.74 */
252.75 virtual BOOL InheritsNativeMouseWheelBehavior();
252.76
252.77 - /* Functions for MouseWheel support on Windows95
252.78 - * These should only be called if running on 95
252.79 - */
252.80 - static void Wheel95Init();
252.81 - INLINE static UINT Wheel95GetMsg() {return sm_95WheelMessage;}
252.82 - static UINT Wheel95GetScrLines();
252.83 -
252.84 /* Determines whether the component is obscured by another window */
252.85 // Called on Toolkit thread
252.86 static jboolean _IsObscured(void *param);
252.87 @@ -457,6 +442,7 @@
252.88 static UINT GetButtonMK(int mouseButton);
252.89 static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers);
252.90 static void JavaKeyToWindowsKey(UINT javaKey, UINT *windowsKey, UINT *modifiers, UINT originalWindowsKey);
252.91 + static void UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers);
252.92
252.93 INLINE static void AwtComponent::JavaKeyToWindowsKey(UINT javaKey,
252.94 UINT *windowsKey, UINT *modifiers)
252.95 @@ -480,6 +466,12 @@
252.96 HIMC ImmGetContext();
252.97 HIMC ImmAssociateContext(HIMC himc);
252.98 HWND GetProxyFocusOwner();
252.99 +
252.100 + INLINE HWND GetProxyToplevelContainer() {
252.101 + HWND proxyHWnd = GetProxyFocusOwner();
252.102 + return ::GetAncestor(proxyHWnd, GA_ROOT); // a browser in case of EmbeddedFrame
252.103 + }
252.104 +
252.105 void CallProxyDefWindowProc(UINT message,
252.106 WPARAM wParam,
252.107 LPARAM lParam,
252.108 @@ -517,11 +509,6 @@
252.109 virtual MsgRouting WmShowWindow(BOOL show, UINT status);
252.110 virtual MsgRouting WmSetFocus(HWND hWndLost);
252.111 virtual MsgRouting WmKillFocus(HWND hWndGot);
252.112 - jboolean WmComponentSetFocus(WmComponentSetFocusData *data);
252.113 - // Use instead of ::SetFocus to maintain special focusing semantics for
252.114 - // Windows which are not Frames/Dialogs.
252.115 - BOOL AwtSetFocus();
252.116 -
252.117 virtual MsgRouting WmCtlColor(HDC hDC, HWND hCtrl,
252.118 UINT ctlColor, HBRUSH& retBrush);
252.119 virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar);
252.120 @@ -611,10 +598,6 @@
252.121
252.122 jintArray CreatePrintedPixels(SIZE &loc, SIZE &size);
252.123
252.124 - static void * GetNativeFocusOwner();
252.125 - static void * GetNativeFocusedWindow();
252.126 - static void ClearGlobalFocusOwner();
252.127 -
252.128 /*
252.129 * HWND, AwtComponent and Java Peer interaction
252.130 *
252.131 @@ -673,7 +656,6 @@
252.132 static void _SetForeground(void *param);
252.133 static void _SetBackground(void *param);
252.134 static void _SetFont(void *param);
252.135 - static jboolean _RequestFocus(void *param);
252.136 static void _Start(void *param);
252.137 static void _BeginValidate(void *param);
252.138 static void _EndValidate(void *param);
252.139 @@ -683,10 +665,40 @@
252.140 static jintArray _CreatePrintedPixels(void *param);
252.141 static jboolean _NativeHandlesWheelScrolling(void *param);
252.142 static void _SetRectangularShape(void *param);
252.143 + static void _SetZOrder(void *param);
252.144
252.145 static HWND sm_focusOwner;
252.146 +
252.147 +private:
252.148 static HWND sm_focusedWindow;
252.149
252.150 +public:
252.151 + static inline HWND GetFocusedWindow() { return sm_focusedWindow; }
252.152 + static void SetFocusedWindow(HWND window);
252.153 +
252.154 + static void _SetFocus(void *param);
252.155 +
252.156 + static void *SetNativeFocusOwner(void *self);
252.157 + static void *GetNativeFocusedWindow();
252.158 + static void *GetNativeFocusOwner();
252.159 +
252.160 + static BOOL sm_inSynthesizeFocus;
252.161 +
252.162 + // Execute on Toolkit only.
252.163 + INLINE static LRESULT SynthesizeWmSetFocus(HWND targetHWnd, HWND oppositeHWnd) {
252.164 + sm_inSynthesizeFocus = TRUE;
252.165 + LRESULT res = ::SendMessage(targetHWnd, WM_SETFOCUS, (WPARAM)oppositeHWnd, 0);
252.166 + sm_inSynthesizeFocus = FALSE;
252.167 + return res;
252.168 + }
252.169 + // Execute on Toolkit only.
252.170 + INLINE static LRESULT SynthesizeWmKillFocus(HWND targetHWnd, HWND oppositeHWnd) {
252.171 + sm_inSynthesizeFocus = TRUE;
252.172 + LRESULT res = ::SendMessage(targetHWnd, WM_KILLFOCUS, (WPARAM)oppositeHWnd, 0);
252.173 + sm_inSynthesizeFocus = FALSE;
252.174 + return res;
252.175 + }
252.176 +
252.177 static BOOL sm_bMenuLoop;
252.178 static INLINE BOOL isMenuLoopActive() {
252.179 return sm_bMenuLoop;
252.180 @@ -710,14 +722,25 @@
252.181 BOOL m_visible; /* copy of Component.visible */
252.182
252.183 static BOOL sm_suppressFocusAndActivation;
252.184 - static HWND sm_realFocusOpposite;
252.185 + static BOOL sm_restoreFocusAndActivation;
252.186 +
252.187 + /*
252.188 + * The function sets the focus-restore flag ON/OFF.
252.189 + * When the flag is ON, focus is restored immidiately after the proxy loses it.
252.190 + * All focus messages are suppressed. It's also assumed that sm_focusedWindow and
252.191 + * sm_focusOwner don't change after the flag is set ON and before it's set OFF.
252.192 + */
252.193 + static INLINE void SetRestoreFocus(BOOL doSet) {
252.194 + sm_suppressFocusAndActivation = doSet;
252.195 + sm_restoreFocusAndActivation = doSet;
252.196 + }
252.197
252.198 virtual void SetDragCapture(UINT flags);
252.199 virtual void ReleaseDragCapture(UINT flags);
252.200
252.201 - // 95 support for mouse wheel
252.202 - static UINT sm_95WheelMessage;
252.203 - static UINT sm_95WheelSupport;
252.204 + //These functions are overridden in AwtWindow to handle non-opaque windows.
252.205 + virtual void FillBackground(HDC hMemoryDC, SIZE &size);
252.206 + virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha);
252.207
252.208 private:
252.209 /* A bitmask keeps the button's numbers as MK_LBUTTON, MK_MBUTTON, MK_RBUTTON
252.210 @@ -761,6 +784,8 @@
252.211 static BOOL sm_rtl;
252.212 static BOOL sm_rtlReadingOrder;
252.213
252.214 + static BOOL sm_PrimaryDynamicTableBuilt;
252.215 +
252.216 jobject m_InputMethod;
252.217 BOOL m_useNativeCompWindow;
252.218 LPARAM m_bitsCandType;
252.219 @@ -780,8 +805,6 @@
252.220
252.221 static BOOL m_QueryNewPaletteCalled;
252.222
252.223 - BOOL m_skipNextSetFocus;
252.224 -
252.225 static AwtComponent* sm_getComponentCache; // a cache for the GetComponent(..) method.
252.226
252.227 int windowMoveLockPosX;
252.228 @@ -790,7 +813,7 @@
252.229 int windowMoveLockPosCY;
252.230
252.231 // 6524352: support finer-resolution
252.232 - static int sm_wheelRotationAmount;
252.233 + int m_wheelRotationAmount;
252.234
252.235 /*
252.236 * The association list of children's IDs and corresponding components.
252.237 @@ -826,6 +849,7 @@
252.238 AwtComponent* SearchChild(UINT id);
252.239 void RemoveChild(UINT id) ;
252.240 static BOOL IsNavigationKey(UINT wkey);
252.241 + static void BuildPrimaryDynamicTable();
252.242
252.243 ChildListItem* m_childList;
252.244
252.245 @@ -876,14 +900,6 @@
252.246 void RealizePalettes(int screen);
252.247 };
252.248
252.249 -struct WmComponentSetFocusData {
252.250 - jobject lightweightChild;
252.251 - jboolean temporary;
252.252 - jboolean focusedWindowChangeAllowed;
252.253 - jlong time;
252.254 - jobject cause;
252.255 -};
252.256 -
252.257 void ReleaseDCList(HWND hwnd, DCList &list);
252.258 void MoveDCToPassiveList(HDC hDC);
252.259
253.1 --- a/src/windows/native/sun/windows/awt_Dialog.cpp Thu Apr 16 17:42:00 2009 +0100
253.2 +++ b/src/windows/native/sun/windows/awt_Dialog.cpp Thu Apr 16 19:10:32 2009 -0700
253.3 @@ -230,25 +230,8 @@
253.4 if (::IsIconic(hWnd)) {
253.5 ::ShowWindow(hWnd, SW_RESTORE);
253.6 }
253.7 - HWND topMostBlocker = blocker;
253.8 - HWND toolkitHWnd = AwtToolkit::GetInstance().GetHWnd();
253.9 - while (::IsWindow(blocker)) {
253.10 - topMostBlocker = blocker;
253.11 - // fix for 6494032: restore the blocker if it was minimized
253.12 - // together with its parent frame; in such cases the check
253.13 - // ::IsIconic() for the blocker returns false, so we use
253.14 - // ::IsWindowVisible() instead
253.15 - if (!::IsWindowVisible(topMostBlocker) &&
253.16 - (topMostBlocker != toolkitHWnd))
253.17 - {
253.18 - ::ShowWindow(topMostBlocker, SW_SHOWNA);
253.19 - }
253.20 - ::BringWindowToTop(blocker);
253.21 - blocker = AwtWindow::GetModalBlocker(blocker);
253.22 - }
253.23 - if (topMostBlocker != toolkitHWnd) {
253.24 - ::SetForegroundWindow(topMostBlocker);
253.25 - }
253.26 + PopupAllDialogs(blocker, TRUE, ::GetForegroundWindow(), FALSE);
253.27 + // return 1 to prevent the system from allowing the operation
253.28 return 1;
253.29 }
253.30 return CallNextHookEx(0, code, wParam, lParam);
253.31 @@ -271,30 +254,11 @@
253.32 (wParam == WM_NCRBUTTONDOWN))
253.33 {
253.34 HWND blocker = AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(hWnd));
253.35 - HWND topMostBlocker = blocker;
253.36 - HWND prevForegroundWindow = ::GetForegroundWindow();
253.37 if (::IsWindow(blocker)) {
253.38 - ::BringWindowToTop(hWnd);
253.39 - }
253.40 - while (::IsWindow(blocker)) {
253.41 - topMostBlocker = blocker;
253.42 - ::BringWindowToTop(blocker);
253.43 - blocker = AwtWindow::GetModalBlocker(blocker);
253.44 - }
253.45 - if (::IsWindow(topMostBlocker)) {
253.46 - // no beep/flash if the mouse was clicked in the taskbar menu
253.47 - // or the dialog is currently inactive
253.48 - if ((::WindowFromPoint(mhs->pt) == hWnd) &&
253.49 - (prevForegroundWindow == topMostBlocker))
253.50 - {
253.51 - ::MessageBeep(MB_OK);
253.52 - // some heuristics: 3 times x 64 milliseconds
253.53 - AwtWindow::FlashWindowEx(topMostBlocker, 3, 64, FLASHW_CAPTION);
253.54 - }
253.55 - if (topMostBlocker != AwtToolkit::GetInstance().GetHWnd()) {
253.56 - ::BringWindowToTop(topMostBlocker);
253.57 - ::SetForegroundWindow(topMostBlocker);
253.58 - }
253.59 + BOOL onTaskbar = !(::WindowFromPoint(mhs->pt) == hWnd);
253.60 + PopupAllDialogs(hWnd, FALSE, ::GetForegroundWindow(), onTaskbar);
253.61 + // return a nonzero value to prevent the system from passing
253.62 + // the message to the target window procedure
253.63 return 1;
253.64 }
253.65 }
253.66 @@ -303,6 +267,63 @@
253.67 return CallNextHookEx(0, nCode, wParam, lParam);
253.68 }
253.69
253.70 +/*
253.71 + * The function goes through the heirarchy of the blocker dialogs and
253.72 + * popups all the dialogs. Note that the function starts from the top
253.73 + * blocker dialog and goes down to the dialog which is the bottom dialog.
253.74 + * Using another traversal may cause to the flickering issue as a bottom
253.75 + * dialog will cover a top dialog for some period of time.
253.76 + */
253.77 +void AwtDialog::PopupAllDialogs(HWND dialog, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar)
253.78 +{
253.79 + HWND blocker = AwtWindow::GetModalBlocker(dialog);
253.80 + BOOL isBlocked = ::IsWindow(blocker);
253.81 + if (isBlocked) {
253.82 + PopupAllDialogs(blocker, isModalHook, prevFGWindow, onTaskbar);
253.83 + }
253.84 + PopupOneDialog(dialog, blocker, isModalHook, prevFGWindow, onTaskbar);
253.85 +}
253.86 +
253.87 +/*
253.88 + * The function popups the dialog, it distinguishes non-blocked dialogs
253.89 + * and activates the dialogs (sets as foreground window). If the dialog is
253.90 + * blocked, then it changes the Z-order of the dialog.
253.91 + */
253.92 +void AwtDialog::PopupOneDialog(HWND dialog, HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar)
253.93 +{
253.94 + if (dialog == AwtToolkit::GetInstance().GetHWnd()) {
253.95 + return;
253.96 + }
253.97 +
253.98 + // fix for 6494032
253.99 + if (isModalHook && !::IsWindowVisible(dialog)) {
253.100 + ::ShowWindow(dialog, SW_SHOWNA);
253.101 + }
253.102 +
253.103 + BOOL isBlocked = ::IsWindow(blocker);
253.104 + UINT flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE;
253.105 +
253.106 + if (isBlocked) {
253.107 + ::SetWindowPos(dialog, blocker, 0, 0, 0, 0, flags);
253.108 + } else {
253.109 + ::SetWindowPos(dialog, HWND_TOP, 0, 0, 0, 0, flags);
253.110 + // no beep/flash if the mouse was clicked in the taskbar menu
253.111 + // or the dialog is currently inactive
253.112 + if (!isModalHook && !onTaskbar && (dialog == prevFGWindow)) {
253.113 + AnimateModalBlocker(dialog);
253.114 + }
253.115 + ::BringWindowToTop(dialog);
253.116 + ::SetForegroundWindow(dialog);
253.117 + }
253.118 +}
253.119 +
253.120 +void AwtDialog::AnimateModalBlocker(HWND window)
253.121 +{
253.122 + ::MessageBeep(MB_OK);
253.123 + // some heuristics: 3 times x 64 milliseconds
253.124 + AwtWindow::FlashWindowEx(window, 3, 64, FLASHW_CAPTION);
253.125 +}
253.126 +
253.127 LRESULT CALLBACK AwtDialog::MouseHookProc_NonTT(int nCode,
253.128 WPARAM wParam, LPARAM lParam)
253.129 {
254.1 --- a/src/windows/native/sun/windows/awt_Dialog.h Thu Apr 16 17:42:00 2009 +0100
254.2 +++ b/src/windows/native/sun/windows/awt_Dialog.h Thu Apr 16 19:10:32 2009 -0700
254.3 @@ -76,7 +76,7 @@
254.4 * Thus we don't have to perform any transitive (a blocker of a blocker) checks.
254.5 */
254.6 INLINE virtual BOOL IsFocusedWindowModalBlocker() {
254.7 - return (sm_focusedWindow != NULL) && (GetModalBlocker(sm_focusedWindow) == GetHWnd());
254.8 + return (AwtComponent::GetFocusedWindow() != NULL) && (GetModalBlocker(AwtComponent::GetFocusedWindow()) == GetHWnd());
254.9 }
254.10
254.11 // finds and activates some window after the modal dialog is hidden
254.12 @@ -113,6 +113,9 @@
254.13 */
254.14 static void ModalPerformActivation(HWND hWnd);
254.15
254.16 + static void PopupAllDialogs(HWND dialog, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar);
254.17 + static void PopupOneDialog(HWND dialog, HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar);
254.18 +
254.19 public:
254.20
254.21 // WH_CBT hook procedure used in modality, prevents modal
254.22 @@ -129,6 +132,8 @@
254.23 // example on browser's thread when running in Java Plugin
254.24 static LRESULT CALLBACK MouseHookProc_NonTT(int code,
254.25 WPARAM wParam, LPARAM lParam);
254.26 +
254.27 + static void AnimateModalBlocker(HWND window);
254.28 };
254.29
254.30 #endif /* AWT_DIALOG_H */
255.1 --- a/src/windows/native/sun/windows/awt_FileDialog.cpp Thu Apr 16 17:42:00 2009 +0100
255.2 +++ b/src/windows/native/sun/windows/awt_FileDialog.cpp Thu Apr 16 19:10:32 2009 -0700
255.3 @@ -101,7 +101,8 @@
255.4 }
255.5 }
255.6
255.7 - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam);
255.8 + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
255.9 + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
255.10 }
255.11
255.12 static UINT_PTR CALLBACK
255.13 @@ -135,16 +136,19 @@
255.14 }
255.15
255.16 // subclass dialog's parent to receive additional messages
255.17 - ComCtl32Util::GetInstance().SubclassHWND(parent,
255.18 - FileDialogWndProc);
255.19 + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(parent,
255.20 + FileDialogWndProc);
255.21 + ::SetProp(parent, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc));
255.22
255.23 break;
255.24 }
255.25 case WM_DESTROY: {
255.26 + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(parent, NativeDialogWndProcProp));
255.27 ComCtl32Util::GetInstance().UnsubclassHWND(parent,
255.28 FileDialogWndProc,
255.29 - NULL);
255.30 + lpfnWndProc);
255.31 ::RemoveProp(parent, ModalDialogPeerProp);
255.32 + ::RemoveProp(parent, NativeDialogWndProcProp);
255.33 break;
255.34 }
255.35 case WM_NOTIFY: {
256.1 --- a/src/windows/native/sun/windows/awt_Frame.cpp Thu Apr 16 17:42:00 2009 +0100
256.2 +++ b/src/windows/native/sun/windows/awt_Frame.cpp Thu Apr 16 19:10:32 2009 -0700
256.3 @@ -1,5 +1,5 @@
256.4 /*
256.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
256.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
256.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
256.8 *
256.9 * This code is free software; you can redistribute it and/or modify it
256.10 @@ -39,8 +39,6 @@
256.11 #include <sun_awt_windows_WEmbeddedFramePeer.h>
256.12
256.13
256.14 -BOOL isAppActive = FALSE;
256.15 -
256.16 /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
256.17 */
256.18
256.19 @@ -90,8 +88,10 @@
256.20 */
256.21
256.22 jfieldID AwtFrame::handleID;
256.23 -jfieldID AwtFrame::stateID;
256.24 +
256.25 jfieldID AwtFrame::undecoratedID;
256.26 +jmethodID AwtFrame::getExtendedStateMID;
256.27 +jmethodID AwtFrame::setExtendedStateMID;
256.28
256.29 jmethodID AwtFrame::activateEmbeddingTopLevelMID;
256.30
256.31 @@ -110,6 +110,7 @@
256.32 m_isInputMethodWindow = FALSE;
256.33 m_isUndecorated = FALSE;
256.34 m_proxyFocusOwner = NULL;
256.35 + m_lastProxiedFocusOwner = NULL;
256.36 m_actualFocusedWindow = NULL;
256.37 m_iconic = FALSE;
256.38 m_zoomed = FALSE;
256.39 @@ -232,7 +233,7 @@
256.40 frame->InitPeerGraphicsConfig(env, self);
256.41 AwtToolkit::GetInstance().RegisterEmbedderProcessId(hwndParent);
256.42 } else {
256.43 - jint state = env->GetIntField(target, AwtFrame::stateID);
256.44 + jint state = env->CallIntMethod(self, AwtFrame::getExtendedStateMID);
256.45 DWORD exStyle;
256.46 DWORD style;
256.47
256.48 @@ -285,7 +286,6 @@
256.49 ::GetSysColor(COLOR_WINDOWTEXT),
256.50 ::GetSysColor(COLOR_WINDOWFRAME),
256.51 self);
256.52 -
256.53 /*
256.54 * Reshape here instead of during create, so that a
256.55 * WM_NCCALCSIZE is sent.
256.56 @@ -319,12 +319,13 @@
256.57 AwtComponent::GetComponentImpl(::GetParent(hwnd));
256.58
256.59 if (!parent || parent->GetProxyFocusOwner() != hwnd ||
256.60 - message == AwtComponent::WmAwtIsComponent)
256.61 + message == AwtComponent::WmAwtIsComponent ||
256.62 + message == WM_GETOBJECT)
256.63 {
256.64 return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam);
256.65 }
256.66
256.67 - AwtComponent *p = NULL;
256.68 + AwtComponent *focusOwner = NULL;
256.69 // IME and input language related messages need to be sent to a window
256.70 // which has the Java input focus
256.71 switch (message) {
256.72 @@ -342,16 +343,37 @@
256.73 case WM_IME_KEYUP:
256.74 case WM_INPUTLANGCHANGEREQUEST:
256.75 case WM_INPUTLANGCHANGE:
256.76 - p = AwtComponent::GetComponent(sm_focusOwner);
256.77 - if (p != NULL) {
256.78 - return p->WindowProc(message, wParam, lParam);
256.79 + // TODO: when a Choice's list is dropped down and we're scrolling in
256.80 + // the list WM_MOUSEWHEEL messages come to the poxy, not to the list. Why?
256.81 + case WM_MOUSEWHEEL:
256.82 + focusOwner = AwtComponent::GetComponent(parent->GetLastProxiedFocusOwner());
256.83 + if (focusOwner != NULL) {
256.84 + return focusOwner->WindowProc(message, wParam, lParam);
256.85 }
256.86 break;
256.87 + case WM_SETFOCUS:
256.88 + if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) {
256.89 + parent->AwtSetActiveWindow();
256.90 + }
256.91 + return 0;
256.92 + case WM_KILLFOCUS:
256.93 + if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) {
256.94 + AwtWindow::SynthesizeWmActivate(FALSE, parent->GetHWnd(), NULL);
256.95 +
256.96 + } else if (sm_restoreFocusAndActivation) {
256.97 + if (AwtComponent::GetFocusedWindow() != NULL) {
256.98 + AwtWindow *focusedWindow = (AwtWindow*)GetComponent(AwtComponent::GetFocusedWindow());
256.99 + if (focusedWindow != NULL) {
256.100 + // Will just silently restore native focus & activation.
256.101 + focusedWindow->AwtSetActiveWindow();
256.102 + }
256.103 + }
256.104 + }
256.105 + return 0;
256.106 case 0x0127: // WM_CHANGEUISTATE
256.107 case 0x0128: // WM_UPDATEUISTATE
256.108 return 0;
256.109 }
256.110 -
256.111 return parent->WindowProc(message, wParam, lParam);
256.112
256.113 CATCH_BAD_ALLOC_RET(0);
256.114 @@ -554,7 +576,6 @@
256.115 if (m_grabbedWindow != NULL/* && !m_grabbedWindow->IsOneOfOwnersOf(this)*/) {
256.116 m_grabbedWindow->Ungrab();
256.117 }
256.118 -
256.119 if (!IsFocusableWindow() && (button & LEFT_BUTTON)) {
256.120 switch (hitTest) {
256.121 case HTTOP:
256.122 @@ -586,11 +607,6 @@
256.123 return AwtWindow::WmNcMouseDown(hitTest, x, y, button);
256.124 }
256.125
256.126 -MsgRouting AwtFrame::WmWindowPosChanged(LPARAM windowPos) {
256.127 - return mrDoDefault;
256.128 -}
256.129 -
256.130 -
256.131 // Override AwtWindow::Reshape() to handle minimized/maximized
256.132 // frames (see 6525850, 4065534)
256.133 void AwtFrame::Reshape(int x, int y, int width, int height)
256.134 @@ -827,6 +843,11 @@
256.135
256.136 MsgRouting AwtFrame::WmSize(UINT type, int w, int h)
256.137 {
256.138 + currentWmSizeState = type;
256.139 + if (currentWmSizeState == SIZE_MINIMIZED) {
256.140 + UpdateSecurityWarningVisibility();
256.141 + }
256.142 +
256.143 if (m_ignoreWmSize) {
256.144 return mrDoDefault;
256.145 }
256.146 @@ -883,6 +904,11 @@
256.147 if (changed != 0) {
256.148 DTRACE_PRINTLN2("AwtFrame::WmSize: reporting state change %x -> %x",
256.149 oldState, newState);
256.150 +
256.151 + // sync target with peer
256.152 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
256.153 + env->CallVoidMethod(GetPeer(env), AwtFrame::setExtendedStateMID, newState);
256.154 +
256.155 // report (de)iconification to old clients
256.156 if (changed & java_awt_Frame_ICONIFIED) {
256.157 if (newState & java_awt_Frame_ICONIFIED) {
256.158 @@ -907,33 +933,16 @@
256.159 MsgRouting AwtFrame::WmActivate(UINT nState, BOOL fMinimized, HWND opposite)
256.160 {
256.161 jint type;
256.162 - BOOL doActivateFrame = TRUE;
256.163
256.164 if (nState != WA_INACTIVE) {
256.165 - if (!::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()))) {
256.166 - ::SetFocus(NULL); // The KeyboardFocusManager will set focus later
256.167 - type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS;
256.168 - isAppActive = TRUE;
256.169 - sm_focusedWindow = GetHWnd();
256.170 + if (::IsWindow(AwtWindow::GetModalBlocker(GetHWnd())) ||
256.171 + CheckActivateActualFocusedWindow(opposite))
256.172 + {
256.173 + return mrConsume;
256.174 + }
256.175 + type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS;
256.176 + AwtComponent::SetFocusedWindow(GetHWnd());
256.177
256.178 - /*
256.179 - * Fix for 4823903.
256.180 - * If the window to be focused is actually not this Frame
256.181 - * and it's visible then send it WM_ACTIVATE.
256.182 - */
256.183 - if (m_actualFocusedWindow != NULL) {
256.184 - HWND hwnd = m_actualFocusedWindow->GetHWnd();
256.185 -
256.186 - if (hwnd != NULL && ::IsWindowVisible(hwnd)) {
256.187 -
256.188 - ::SendMessage(hwnd, WM_ACTIVATE, MAKEWPARAM(nState, fMinimized), (LPARAM)opposite);
256.189 - doActivateFrame = FALSE;
256.190 - }
256.191 - m_actualFocusedWindow = NULL;
256.192 - }
256.193 - } else {
256.194 - doActivateFrame = FALSE;
256.195 - }
256.196 } else {
256.197 if (!::IsWindow(AwtWindow::GetModalBlocker(opposite))) {
256.198 // If deactivation happens because of press on grabbing
256.199 @@ -955,37 +964,63 @@
256.200 }
256.201 }
256.202 }
256.203 -
256.204 - // If actual focused window is not this Frame
256.205 - if (sm_focusedWindow != GetHWnd()) {
256.206 -
256.207 - // Check that the Frame is going to be really inactive (i.e. the opposite is not its owned window)
256.208 - if (opposite != NULL) {
256.209 - AwtWindow *wOpposite = (AwtWindow *)AwtComponent::GetComponent(opposite);
256.210 -
256.211 - if (wOpposite != NULL &&
256.212 - wOpposite->GetOwningFrameOrDialog() != this)
256.213 - {
256.214 - AwtWindow *window = (AwtWindow *)AwtComponent::GetComponent(sm_focusedWindow);
256.215 -
256.216 - // If actual focused window is one of Frame's owned windows
256.217 - if (window != NULL && window->GetOwningFrameOrDialog() == this) {
256.218 - m_actualFocusedWindow = window;
256.219 - }
256.220 - }
256.221 - }
256.222 - }
256.223 + CheckRetainActualFocusedWindow(opposite);
256.224
256.225 type = java_awt_event_WindowEvent_WINDOW_LOST_FOCUS;
256.226 - isAppActive = FALSE;
256.227 - sm_focusedWindow = NULL;
256.228 + AwtComponent::SetFocusedWindow(NULL);
256.229 + sm_focusOwner = NULL;
256.230 }
256.231 }
256.232
256.233 - if (doActivateFrame) {
256.234 - SendWindowEvent(type, opposite);
256.235 + SendWindowEvent(type, opposite);
256.236 + return mrConsume;
256.237 +}
256.238 +
256.239 +BOOL AwtFrame::CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd)
256.240 +{
256.241 + if (m_actualFocusedWindow != NULL) {
256.242 + HWND hwnd = m_actualFocusedWindow->GetHWnd();
256.243 + if (hwnd != NULL && ::IsWindowVisible(hwnd)) {
256.244 + SynthesizeWmActivate(TRUE, hwnd, deactivatedOpositeHWnd);
256.245 + return TRUE;
256.246 + }
256.247 + m_actualFocusedWindow = NULL;
256.248 }
256.249 - return mrConsume;
256.250 + return FALSE;
256.251 +}
256.252 +
256.253 +void AwtFrame::CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd)
256.254 +{
256.255 + // If actual focused window is not this Frame
256.256 + if (AwtComponent::GetFocusedWindow() != GetHWnd()) {
256.257 + // Make sure the actual focused window is an owned window of this frame
256.258 + AwtWindow *focusedWindow = (AwtWindow *)AwtComponent::GetComponent(AwtComponent::GetFocusedWindow());
256.259 + if (focusedWindow != NULL && focusedWindow->GetOwningFrameOrDialog() == this) {
256.260 +
256.261 + // Check that the opposite window is not this frame, nor an owned window of this frame
256.262 + if (activatedOpositeHWnd != NULL) {
256.263 + AwtWindow *oppositeWindow = (AwtWindow *)AwtComponent::GetComponent(activatedOpositeHWnd);
256.264 + if (oppositeWindow && oppositeWindow != this &&
256.265 + oppositeWindow->GetOwningFrameOrDialog() != this)
256.266 + {
256.267 + m_actualFocusedWindow = focusedWindow;
256.268 + }
256.269 + } else {
256.270 + m_actualFocusedWindow = focusedWindow;
256.271 + }
256.272 + }
256.273 + }
256.274 +}
256.275 +
256.276 +BOOL AwtFrame::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest)
256.277 +{
256.278 + if (hittest == HTCLIENT) {
256.279 + // Don't let the actualFocusedWindow to steal focus if:
256.280 + // a) the frame is clicked in its client area;
256.281 + // b) focus is requested to some of the frame's child.
256.282 + m_actualFocusedWindow = NULL;
256.283 + }
256.284 + return AwtWindow::AwtSetActiveWindow(isMouseEventCause);
256.285 }
256.286
256.287 MsgRouting AwtFrame::WmEnterMenuLoop(BOOL isTrackPopupMenu)
256.288 @@ -1161,60 +1196,6 @@
256.289 return 0L;
256.290 }
256.291
256.292 -/*
256.293 - * hWndLostFocus - the opposite component
256.294 - * Returns TRUE if WM_SETFOCUS may be processed further, otherwise FALSE.
256.295 - */
256.296 -BOOL AwtFrame::activateEmbeddedFrameOnSetFocus(HWND hWndLostFocus) {
256.297 -
256.298 - // If the EmbeddedFrame is not yet active, then this is either:
256.299 - // - requesting focus on smth in the EmbeddedFrame, or
256.300 - // - Alt hitting in IE while its menu is active (see 6374321).
256.301 - // In both these cases we get WM_SETFOCUS without WM_ACTIVATE
256.302 - // on the EmbeddedFrame.
256.303 - if (sm_focusedWindow != GetHWnd()) {
256.304 - HWND oppositeToplevelHWnd = AwtComponent::GetTopLevelParentForWindow(hWndLostFocus);
256.305 -
256.306 - // As we get WM_SETFOCUS from the native system we expect
256.307 - // the native toplevel be set to the active window.
256.308 - HWND activeWindowHWnd = ::GetActiveWindow();
256.309 - DASSERT(activeWindowHWnd == ::GetAncestor(GetHWnd(), GA_ROOT));
256.310 -
256.311 - // See 6538154.
256.312 - ::BringWindowToTop(activeWindowHWnd);
256.313 - ::SetForegroundWindow(activeWindowHWnd);
256.314 -
256.315 - SynthesizeWmActivate(TRUE, oppositeToplevelHWnd);
256.316 -
256.317 - return FALSE;
256.318 - }
256.319 - // If the EmbeddedFrame is already active, then this is a mouse click
256.320 - // or activation (by Alt-Tab, start etc).
256.321 - return TRUE;
256.322 -}
256.323 -
256.324 -/*
256.325 - * hWndGotFocus - the opposite component
256.326 - * Returns TRUE if WM_KILLFOCUS may be processed further, otherwise FALSE.
256.327 - */
256.328 -BOOL AwtFrame::deactivateEmbeddedFrameOnKillFocus(HWND hWndGotFocus) {
256.329 - HWND oppositeToplevelHWnd = AwtComponent::GetTopLevelParentForWindow(hWndGotFocus);
256.330 -
256.331 - if (oppositeToplevelHWnd != sm_focusedWindow) {
256.332 - SynthesizeWmActivate(FALSE, oppositeToplevelHWnd);
256.333 - }
256.334 - return TRUE;
256.335 -}
256.336 -
256.337 -/*
256.338 - * Execute on Toolkit only.
256.339 - */
256.340 -void AwtFrame::SynthesizeWmActivate(BOOL doActivate, HWND opposite) {
256.341 - if (::IsWindowVisible(GetHWnd())) {
256.342 - ::SendMessage(GetHWnd(), WM_ACTIVATE, MAKEWPARAM(doActivate ? WA_ACTIVE : WA_INACTIVE, FALSE), (LPARAM) opposite);
256.343 - }
256.344 -}
256.345 -
256.346 void AwtFrame::_SynthesizeWmActivate(void *param)
256.347 {
256.348 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
256.349 @@ -1229,7 +1210,7 @@
256.350 JNI_CHECK_PEER_GOTO(self, ret);
256.351 frame = (AwtFrame *)pData;
256.352
256.353 - frame->SynthesizeWmActivate(doActivate, NULL);
256.354 + SynthesizeWmActivate(doActivate, frame->GetHWnd(), NULL);
256.355 ret:
256.356 env->DeleteGlobalRef(self);
256.357
256.358 @@ -1594,7 +1575,7 @@
256.359 extern "C" {
256.360
256.361 /*
256.362 - * Class: sun_awt_windows_WFramePeer
256.363 + * Class: java_awt_Frame
256.364 * Method: initIDs
256.365 * Signature: ()V
256.366 */
256.367 @@ -1603,9 +1584,6 @@
256.368 {
256.369 TRY;
256.370
256.371 - AwtFrame::stateID = env->GetFieldID(cls, "state", "I");
256.372 - DASSERT(AwtFrame::stateID != NULL);
256.373 -
256.374 AwtFrame::undecoratedID = env->GetFieldID(cls,"undecorated","Z");
256.375 DASSERT(AwtFrame::undecoratedID != NULL);
256.376
256.377 @@ -1614,6 +1592,25 @@
256.378
256.379 /*
256.380 * Class: sun_awt_windows_WFramePeer
256.381 + * Method: initIDs
256.382 + * Signature: ()V
256.383 + */
256.384 +JNIEXPORT void JNICALL
256.385 +Java_sun_awt_windows_WFramePeer_initIDs(JNIEnv *env, jclass cls)
256.386 +{
256.387 + TRY;
256.388 +
256.389 + AwtFrame::setExtendedStateMID = env->GetMethodID(cls, "setExtendedState", "(I)V");
256.390 + AwtFrame::getExtendedStateMID = env->GetMethodID(cls, "getExtendedState", "()I");
256.391 +
256.392 + DASSERT(AwtFrame::setExtendedStateMID);
256.393 + DASSERT(AwtFrame::getExtendedStateMID);
256.394 +
256.395 + CATCH_BAD_ALLOC;
256.396 +}
256.397 +
256.398 +/*
256.399 + * Class: sun_awt_windows_WFramePeer
256.400 * Method: setState
256.401 * Signature: (I)V
256.402 */
257.1 --- a/src/windows/native/sun/windows/awt_Frame.h Thu Apr 16 17:42:00 2009 +0100
257.2 +++ b/src/windows/native/sun/windows/awt_Frame.h Thu Apr 16 19:10:32 2009 -0700
257.3 @@ -1,5 +1,5 @@
257.4 /*
257.5 - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
257.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
257.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
257.8 *
257.9 * This code is free software; you can redistribute it and/or modify it
257.10 @@ -48,14 +48,14 @@
257.11 FRAME_SETMENUBAR
257.12 };
257.13
257.14 - /* int handle field for sun.awt.windows.WEmbeddedFrame */
257.15 + /* java.awt.Frame fields and method IDs */
257.16 + static jfieldID undecoratedID;
257.17 +
257.18 + /* sun.awt.windows.WEmbeddedFrame fields and method IDs */
257.19 static jfieldID handleID;
257.20
257.21 - /* int state field for java.awt.Frame */
257.22 - static jfieldID stateID;
257.23 -
257.24 - /* boolean undecorated field for java.awt.Frame */
257.25 - static jfieldID undecoratedID;
257.26 + static jmethodID setExtendedStateMID;
257.27 + static jmethodID getExtendedStateMID;
257.28
257.29 /* method id for WEmbeddedFrame.requestActivate() method */
257.30 static jmethodID activateEmbeddingTopLevelMID;
257.31 @@ -108,7 +108,6 @@
257.32 MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button);
257.33 MsgRouting WmNcMouseUp(WPARAM hitTest, int x, int y, int button);
257.34 MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal);
257.35 - MsgRouting WmWindowPosChanged(LPARAM windowPos);
257.36 MsgRouting WmShowWindow(BOOL show, UINT status);
257.37
257.38 virtual MsgRouting WmSysCommand(UINT uCmdType, int xPos, int yPos);
257.39 @@ -133,11 +132,6 @@
257.40 // adjusts the IME candidate window position if needed
257.41 void AdjustCandidateWindowPos();
257.42
257.43 - void SynthesizeWmActivate(BOOL doActivate, HWND opposite);
257.44 -
257.45 - BOOL activateEmbeddedFrameOnSetFocus(HWND hWndLostFocus);
257.46 - BOOL deactivateEmbeddedFrameOnKillFocus(HWND hWndGotFocus);
257.47 -
257.48 // invoked on Toolkit thread
257.49 static jobject _GetBoundsPrivate(void *param);
257.50
257.51 @@ -153,6 +147,14 @@
257.52
257.53 virtual void Reshape(int x, int y, int width, int height);
257.54
257.55 + virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT);
257.56 +
257.57 + void CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd);
257.58 + BOOL CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd);
257.59 +
257.60 + INLINE HWND GetLastProxiedFocusOwner() { return m_lastProxiedFocusOwner; }
257.61 + INLINE void SetLastProxiedFocusOwner(HWND hwnd) { m_lastProxiedFocusOwner = hwnd; }
257.62 +
257.63 protected:
257.64 /* The frame is undecorated. */
257.65 BOOL m_isUndecorated;
257.66 @@ -189,6 +191,10 @@
257.67 or an AwtDialog (or one of its children) has the logical input focus. */
257.68 HWND m_proxyFocusOwner;
257.69
257.70 + /* Retains the last/current sm_focusOwner proxied. Actually, it should be
257.71 + * a component of an owned window last/currently active. */
257.72 + HWND m_lastProxiedFocusOwner;
257.73 +
257.74 /*
257.75 * Fix for 4823903.
257.76 * Retains a focus proxied window to set the focus correctly
258.1 --- a/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Apr 16 17:42:00 2009 +0100
258.2 +++ b/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Apr 16 19:10:32 2009 -0700
258.3 @@ -1,5 +1,5 @@
258.4 /*
258.5 - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
258.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
258.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
258.8 *
258.9 * This code is free software; you can redistribute it and/or modify it
258.10 @@ -176,7 +176,7 @@
258.11 java_awt_event_KeyEvent_CHAR_UNDEFINED,
258.12 unicodeChar,
258.13 modifiers,
258.14 - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
258.15 + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0,
258.16 &msg);
258.17 } else {
258.18 MSG* pCopiedMsg = new MSG;
259.1 --- a/src/windows/native/sun/windows/awt_KeyEvent.cpp Thu Apr 16 17:42:00 2009 +0100
259.2 +++ b/src/windows/native/sun/windows/awt_KeyEvent.cpp Thu Apr 16 19:10:32 2009 -0700
259.3 @@ -1,5 +1,5 @@
259.4 /*
259.5 - * Copyright 1998-1999 Sun Microsystems, Inc. All Rights Reserved.
259.6 + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved.
259.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
259.8 *
259.9 * This code is free software; you can redistribute it and/or modify it
259.10 @@ -32,6 +32,10 @@
259.11
259.12 jfieldID AwtKeyEvent::keyCodeID;
259.13 jfieldID AwtKeyEvent::keyCharID;
259.14 +jfieldID AwtKeyEvent::rawCodeID;
259.15 +jfieldID AwtKeyEvent::primaryLevelUnicodeID;
259.16 +jfieldID AwtKeyEvent::scancodeID;
259.17 +jfieldID AwtKeyEvent::extendedKeyCodeID;
259.18
259.19 /************************************************************************
259.20 * AwtKeyEvent native methods
259.21 @@ -45,9 +49,18 @@
259.22
259.23 AwtKeyEvent::keyCodeID = env->GetFieldID(cls, "keyCode", "I");
259.24 AwtKeyEvent::keyCharID = env->GetFieldID(cls, "keyChar", "C");
259.25 + AwtKeyEvent::rawCodeID = env->GetFieldID(cls, "rawCode", "J");
259.26 + AwtKeyEvent::primaryLevelUnicodeID = env->GetFieldID(cls, "primaryLevelUnicode", "J");
259.27 + AwtKeyEvent::scancodeID = env->GetFieldID(cls, "scancode", "J");
259.28 + AwtKeyEvent::extendedKeyCodeID = env->GetFieldID(cls, "extendedKeyCode", "J");
259.29 +
259.30
259.31 DASSERT(AwtKeyEvent::keyCodeID != NULL);
259.32 DASSERT(AwtKeyEvent::keyCharID != NULL);
259.33 + DASSERT(AwtKeyEvent::rawCodeID != NULL);
259.34 + DASSERT(AwtKeyEvent::primaryLevelUnicodeID != NULL);
259.35 + DASSERT(AwtKeyEvent::scancodeID != NULL);
259.36 + DASSERT(AwtKeyEvent::extendedKeyCodeID != NULL);
259.37
259.38 CATCH_BAD_ALLOC;
259.39 }
260.1 --- a/src/windows/native/sun/windows/awt_KeyEvent.h Thu Apr 16 17:42:00 2009 +0100
260.2 +++ b/src/windows/native/sun/windows/awt_KeyEvent.h Thu Apr 16 19:10:32 2009 -0700
260.3 @@ -39,7 +39,10 @@
260.4 /* java.awt.KeyEvent field ids */
260.5 static jfieldID keyCodeID;
260.6 static jfieldID keyCharID;
260.7 -
260.8 + static jfieldID rawCodeID;
260.9 + static jfieldID primaryLevelUnicodeID;
260.10 + static jfieldID scancodeID;
260.11 + static jfieldID extendedKeyCodeID;
260.12 };
260.13
260.14 #endif // AWT_KEYEVENT_H
261.1 --- a/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp Thu Apr 16 17:42:00 2009 +0100
261.2 +++ b/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp Thu Apr 16 19:10:32 2009 -0700
261.3 @@ -1,5 +1,5 @@
261.4 /*
261.5 - * Copyright 2000-2004 Sun Microsystems, Inc. All Rights Reserved.
261.6 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
261.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
261.8 *
261.9 * This code is free software; you can redistribute it and/or modify it
261.10 @@ -24,30 +24,20 @@
261.11 */
261.12
261.13 #include "awt.h"
261.14 -#include "awt_KeyboardFocusManager.h"
261.15 #include "awt_Component.h"
261.16 #include "awt_Toolkit.h"
261.17 #include <java_awt_KeyboardFocusManager.h>
261.18 -
261.19 -jclass AwtKeyboardFocusManager::keyboardFocusManagerCls;
261.20 -jmethodID AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID;
261.21 -jmethodID AwtKeyboardFocusManager::heavyweightButtonDownMID;
261.22 -jmethodID AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID;
261.23 -jmethodID AwtKeyboardFocusManager::removeLastFocusRequestMID;
261.24 -jfieldID AwtKeyboardFocusManager::isProxyActive;
261.25 -jmethodID AwtKeyboardFocusManager::processSynchronousTransfer;
261.26 +#include <jni.h>
261.27
261.28 static jobject getNativeFocusState(JNIEnv *env, void*(*ftn)()) {
261.29 - jobject lFocusState = NULL;
261.30 + jobject gFocusState = (jobject)AwtToolkit::GetInstance().SyncCall(ftn);
261.31
261.32 - jobject gFocusState = reinterpret_cast<jobject>(AwtToolkit::GetInstance().
261.33 - InvokeFunction(ftn));
261.34 if (gFocusState != NULL) {
261.35 - lFocusState = env->NewLocalRef(gFocusState);
261.36 + jobject lFocusState = env->NewLocalRef(gFocusState);
261.37 env->DeleteGlobalRef(gFocusState);
261.38 + return lFocusState;
261.39 }
261.40 -
261.41 - return lFocusState;
261.42 + return NULL;
261.43 }
261.44
261.45 extern "C" {
261.46 @@ -61,53 +51,35 @@
261.47 Java_java_awt_KeyboardFocusManager_initIDs
261.48 (JNIEnv *env, jclass cls)
261.49 {
261.50 +}
261.51 +
261.52 +/*
261.53 + * Class: sun_awt_windows_WKeyboardFocusManagerPeer
261.54 + * Method: setNativeFocusOwner
261.55 + * Signature: (Lsun/awt/windows/WComponentPeer)
261.56 + */
261.57 +JNIEXPORT void JNICALL
261.58 +Java_sun_awt_windows_WKeyboardFocusManagerPeer_setNativeFocusOwner
261.59 + (JNIEnv *env, jclass cls, jobject compPeer)
261.60 +{
261.61 TRY;
261.62
261.63 - AwtKeyboardFocusManager::keyboardFocusManagerCls = (jclass)
261.64 - env->NewGlobalRef(cls);
261.65 - AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID =
261.66 - env->GetStaticMethodID(cls, "shouldNativelyFocusHeavyweight",
261.67 - "(Ljava/awt/Component;Ljava/awt/Component;ZZJLsun/awt/CausedFocusEvent$Cause;)I");
261.68 - AwtKeyboardFocusManager::heavyweightButtonDownMID =
261.69 - env->GetStaticMethodID(cls, "heavyweightButtonDown",
261.70 - "(Ljava/awt/Component;J)V");
261.71 - AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID =
261.72 - env->GetStaticMethodID(cls, "markClearGlobalFocusOwner",
261.73 - "()Ljava/awt/Window;");
261.74 - AwtKeyboardFocusManager::removeLastFocusRequestMID =
261.75 - env->GetStaticMethodID(cls, "removeLastFocusRequest",
261.76 - "(Ljava/awt/Component;)V");
261.77 + jobject peerGlobalRef = env->NewGlobalRef(compPeer);
261.78
261.79 - AwtKeyboardFocusManager::processSynchronousTransfer =
261.80 - env->GetStaticMethodID(cls, "processSynchronousLightweightTransfer",
261.81 - "(Ljava/awt/Component;Ljava/awt/Component;ZZJ)Z");
261.82 + AwtToolkit::GetInstance().SyncCall(AwtComponent::SetNativeFocusOwner,
261.83 + (void*)peerGlobalRef);
261.84 + // peerGlobalRef is deleted in SetNativeFocusOwner
261.85
261.86 - jclass keyclass = env->FindClass("java/awt/event/KeyEvent");
261.87 - DASSERT (keyclass != NULL);
261.88 -
261.89 - AwtKeyboardFocusManager::isProxyActive =
261.90 - env->GetFieldID(keyclass, "isProxyActive", "Z");
261.91 -
261.92 - env->DeleteLocalRef(keyclass);
261.93 -
261.94 - DASSERT(AwtKeyboardFocusManager::keyboardFocusManagerCls != NULL);
261.95 - DASSERT(AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID !=
261.96 - NULL);
261.97 - DASSERT(AwtKeyboardFocusManager::heavyweightButtonDownMID != NULL);
261.98 - DASSERT(AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID != NULL);
261.99 - DASSERT(AwtKeyboardFocusManager::removeLastFocusRequestMID != NULL);
261.100 - DASSERT(AwtKeyboardFocusManager::processSynchronousTransfer != NULL);
261.101 CATCH_BAD_ALLOC;
261.102 }
261.103
261.104 -
261.105 /*
261.106 - * Class: sun_awt_KeyboardFocusManagerPeerImpl
261.107 + * Class: sun_awt_windows_WKeyboardFocusManagerPeer
261.108 * Method: getNativeFocusOwner
261.109 - * Signature: ()Ljava/awt/Component;
261.110 + * Signature: (Lsun/awt/windows/WComponentPeer)
261.111 */
261.112 JNIEXPORT jobject JNICALL
261.113 -Java_sun_awt_KeyboardFocusManagerPeerImpl_getNativeFocusOwner
261.114 +Java_sun_awt_windows_WKeyboardFocusManagerPeer_getNativeFocusOwner
261.115 (JNIEnv *env, jclass cls)
261.116 {
261.117 TRY;
261.118 @@ -118,12 +90,12 @@
261.119 }
261.120
261.121 /*
261.122 - * Class: sun_awt_KeyboardFocusManagerPeerImpl
261.123 + * Class: sun_awt_windows_WKeyboardFocusManagerPeer
261.124 * Method: getNativeFocusedWindow
261.125 * Signature: ()Ljava/awt/Window;
261.126 */
261.127 JNIEXPORT jobject JNICALL
261.128 -Java_sun_awt_KeyboardFocusManagerPeerImpl_getNativeFocusedWindow
261.129 +Java_sun_awt_windows_WKeyboardFocusManagerPeer_getNativeFocusedWindow
261.130 (JNIEnv *env, jclass cls)
261.131 {
261.132 TRY;
261.133 @@ -132,21 +104,4 @@
261.134
261.135 CATCH_BAD_ALLOC_RET(NULL);
261.136 }
261.137 -
261.138 -/*
261.139 - * Class: sun_awt_KeyboardFocusManagerPeerImpl
261.140 - * Method: clearNativeGlobalFocusOwner
261.141 - * Signature: (Ljava/awt/Window;)V
261.142 - */
261.143 -JNIEXPORT void JNICALL
261.144 -Java_sun_awt_KeyboardFocusManagerPeerImpl_clearNativeGlobalFocusOwner
261.145 - (JNIEnv *env, jobject self, jobject activeWindow)
261.146 -{
261.147 - TRY;
261.148 -
261.149 - AwtToolkit::GetInstance().InvokeFunction
261.150 - ((void*(*)(void))AwtComponent::ClearGlobalFocusOwner);
261.151 -
261.152 - CATCH_BAD_ALLOC;
261.153 }
261.154 -}
262.1 --- a/src/windows/native/sun/windows/awt_KeyboardFocusManager.h Thu Apr 16 17:42:00 2009 +0100
262.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
262.3 @@ -1,43 +0,0 @@
262.4 -/*
262.5 - * Copyright 2001-2002 Sun Microsystems, Inc. All Rights Reserved.
262.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
262.7 - *
262.8 - * This code is free software; you can redistribute it and/or modify it
262.9 - * under the terms of the GNU General Public License version 2 only, as
262.10 - * published by the Free Software Foundation. Sun designates this
262.11 - * particular file as subject to the "Classpath" exception as provided
262.12 - * by Sun in the LICENSE file that accompanied this code.
262.13 - *
262.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
262.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
262.16 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
262.17 - * version 2 for more details (a copy is included in the LICENSE file that
262.18 - * accompanied this code).
262.19 - *
262.20 - * You should have received a copy of the GNU General Public License version
262.21 - * 2 along with this work; if not, write to the Free Software Foundation,
262.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
262.23 - *
262.24 - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
262.25 - * CA 95054 USA or visit www.sun.com if you need additional information or
262.26 - * have any questions.
262.27 - */
262.28 -
262.29 -#ifndef AWT_KEYBOARDFOCUSMANAGER_H
262.30 -#define AWT_KEYBOARDFOCUSMANAGER_H
262.31 -
262.32 -#include <jni.h>
262.33 -
262.34 -class AwtKeyboardFocusManager {
262.35 -public:
262.36 -
262.37 - static jclass keyboardFocusManagerCls;
262.38 - static jmethodID shouldNativelyFocusHeavyweightMID;
262.39 - static jmethodID heavyweightButtonDownMID;
262.40 - static jmethodID markClearGlobalFocusOwnerMID;
262.41 - static jmethodID removeLastFocusRequestMID;
262.42 - static jfieldID isProxyActive;
262.43 - static jmethodID processSynchronousTransfer;
262.44 -};
262.45 -
262.46 -#endif // AWT_KEYBOARDFOCUSMANAGER_H
263.1 --- a/src/windows/native/sun/windows/awt_List.cpp Thu Apr 16 17:42:00 2009 +0100
263.2 +++ b/src/windows/native/sun/windows/awt_List.cpp Thu Apr 16 19:10:32 2009 -0700
263.3 @@ -1,5 +1,5 @@
263.4 /*
263.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
263.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
263.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
263.8 *
263.9 * This code is free software; you can redistribute it and/or modify it
263.10 @@ -24,7 +24,6 @@
263.11 */
263.12
263.13 #include "awt_List.h"
263.14 -#include "awt_KeyboardFocusManager.h"
263.15 #include "awt_Canvas.h"
263.16 #include "awt_Dimension.h"
263.17 #include "awt_Toolkit.h"
263.18 @@ -154,28 +153,6 @@
263.19 return c;
263.20 }
263.21
263.22 -BOOL AwtList::ActMouseMessage(MSG * pMsg) {
263.23 - if (!IsFocusingMessage(pMsg->message)) {
263.24 - return FALSE;
263.25 - }
263.26 -
263.27 - if (pMsg->message == WM_LBUTTONDOWN) {
263.28 - LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, pMsg->lParam));
263.29 - if (item != LB_ERR) {
263.30 - if (isMultiSelect) {
263.31 - if (IsItemSelected(item)) {
263.32 - Deselect(item);
263.33 - } else {
263.34 - Select(item);
263.35 - }
263.36 - } else {
263.37 - Select(item);
263.38 - }
263.39 - }
263.40 - }
263.41 - return TRUE;
263.42 -}
263.43 -
263.44 void AwtList::SetDragCapture(UINT flags)
263.45 {
263.46 // don't want to interfere with other controls
263.47 @@ -473,17 +450,11 @@
263.48 }
263.49
263.50 /*
263.51 - * Fix for 6240202. List being inside a non-focusable Window (or non-focusable List
263.52 - * being a single component inside a focusable Window) won't trigger ActionEvent by
263.53 - * double click. All focus events will be filtered (in the AWT focus hook) for such
263.54 - * a Window containing the List. In such a case OS Windows won't generate WM_COMMAND
263.55 - * (and no WmNotify() will be called for the List). Here we call WmCommand()
263.56 - * synthetically.
263.57 + * As we consume WM_LBUTONDOWN the list won't trigger ActionEvent by double click.
263.58 + * We trigger it ourselves. (see also 6240202)
263.59 */
263.60 int clickCount = GetClickCount();
263.61 - if (button == LEFT_BUTTON && clickCount >= 2 && clickCount % 2 == 0 &&
263.62 - !GetContainer()->IsFocusableWindow())
263.63 - {
263.64 + if (button == LEFT_BUTTON && clickCount >= 2 && clickCount % 2 == 0) {
263.65 WmCommand(0, GetListHandle(), LBN_DBLCLK);
263.66 }
263.67 return mrResult;
263.68 @@ -500,67 +471,32 @@
263.69 return mrConsume;
263.70 }
263.71
263.72 -// Override WmSetFocus and WmKillFocus so that they operate on the List handle
263.73 -// instead of the wrapper handle. Otherwise, the methods are the same as their
263.74 -// AwtComponent counterparts.
263.75 -
263.76 -MsgRouting AwtList::WmSetFocus(HWND hWndLostFocus) {
263.77 - if (sm_focusOwner == GetListHandle()) {
263.78 - sm_realFocusOpposite = NULL;
263.79 - return mrConsume;
263.80 - }
263.81 -
263.82 - sm_focusOwner = GetListHandle();
263.83 -
263.84 - if (sm_realFocusOpposite != NULL) {
263.85 - hWndLostFocus = sm_realFocusOpposite;
263.86 - sm_realFocusOpposite = NULL;
263.87 - }
263.88 -
263.89 - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_GAINED, hWndLostFocus);
263.90 -
263.91 - return mrDoDefault;
263.92 -}
263.93 -
263.94 -MsgRouting AwtList::WmKillFocus(HWND hWndGotFocus) {
263.95 - if (sm_focusOwner != NULL && sm_focusOwner == hWndGotFocus) {
263.96 - return mrConsume;
263.97 - }
263.98 -
263.99 - if (sm_focusOwner != GetListHandle()) {
263.100 - if (sm_focusOwner != NULL) {
263.101 - if (hWndGotFocus != NULL &&
263.102 - AwtComponent::GetComponent(hWndGotFocus) != NULL)
263.103 - {
263.104 - sm_realFocusOpposite = sm_focusOwner;
263.105 - }
263.106 - ::SendMessage(sm_focusOwner, WM_KILLFOCUS, (WPARAM)hWndGotFocus,
263.107 - 0);
263.108 - }
263.109 - return mrConsume;
263.110 - }
263.111 -
263.112 - sm_focusOwner = NULL;
263.113 -
263.114 - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_LOST, hWndGotFocus);
263.115 -
263.116 - return mrDoDefault;
263.117 +BOOL AwtList::IsFocusingMouseMessage(MSG *pMsg)
263.118 +{
263.119 + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK;
263.120 }
263.121
263.122 MsgRouting AwtList::HandleEvent(MSG *msg, BOOL synthetic)
263.123 {
263.124 - if (AwtComponent::sm_focusOwner != GetListHandle() &&
263.125 - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
263.126 - {
263.127 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
263.128 - jobject target = GetTarget(env);
263.129 - env->CallStaticVoidMethod
263.130 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
263.131 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
263.132 - target, ((jlong)msg->time) & 0xFFFFFFFF);
263.133 - env->DeleteLocalRef(target);
263.134 + if (IsFocusingMouseMessage(msg)) {
263.135 + LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, msg->lParam));
263.136 + if (item != LB_ERR) {
263.137 + if (isMultiSelect) {
263.138 + if (IsItemSelected(item)) {
263.139 + Deselect(item);
263.140 + } else {
263.141 + Select(item);
263.142 + }
263.143 + } else {
263.144 + Select(item);
263.145 + }
263.146 + }
263.147 + delete msg;
263.148 + return mrConsume;
263.149 }
263.150 -
263.151 + if (msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) {
263.152 + WmNotify(LBN_DBLCLK);
263.153 + }
263.154 return AwtComponent::HandleEvent(msg, synthetic);
263.155 }
263.156
263.157 @@ -607,15 +543,6 @@
263.158 return mrDoDefault;
263.159 }
263.160
263.161 -MsgRouting
263.162 -AwtList::WmKeyDown(UINT wkey, UINT repCnt, UINT flags, BOOL system)
263.163 -{
263.164 - if (wkey == VK_RETURN) {
263.165 - WmNotify(LBN_DBLCLK);
263.166 - }
263.167 - return AwtComponent::WmKeyDown(wkey, repCnt, flags, system);
263.168 -}
263.169 -
263.170 BOOL AwtList::InheritsNativeMouseWheelBehavior() {return true;}
263.171
263.172 jint AwtList::_GetMaxWidth(void *param)
264.1 --- a/src/windows/native/sun/windows/awt_List.h Thu Apr 16 17:42:00 2009 +0100
264.2 +++ b/src/windows/native/sun/windows/awt_List.h Thu Apr 16 19:10:32 2009 -0700
264.3 @@ -1,5 +1,5 @@
264.4 /*
264.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
264.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
264.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
264.8 *
264.9 * This code is free software; you can redistribute it and/or modify it
264.10 @@ -97,8 +97,6 @@
264.11 }
264.12 }
264.13
264.14 - BOOL ActMouseMessage(MSG* pMsg);
264.15 -
264.16 // Netscape : Change the font on the list and redraw the
264.17 // items nicely.
264.18 virtual void SetFont(AwtFont *pFont);
264.19 @@ -116,7 +114,6 @@
264.20 MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
264.21 MsgRouting WmMouseUp(UINT flags, int x, int y, int button);
264.22 MsgRouting WmNotify(UINT notifyCode);
264.23 - MsgRouting WmKeyDown(UINT vkey, UINT repCnt, UINT flags, BOOL system);
264.24
264.25 /* for multifont list */
264.26 MsgRouting OwnerDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo);
264.27 @@ -127,8 +124,6 @@
264.28
264.29 MsgRouting WmCtlColor(HDC hDC, HWND hCtrl, UINT ctlColor,
264.30 HBRUSH& retBrush);
264.31 - MsgRouting WmSetFocus(HWND hWndLostFocus);
264.32 - MsgRouting WmKillFocus(HWND hWndGotFocus);
264.33
264.34 MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
264.35
264.36 @@ -170,6 +165,8 @@
264.37
264.38 virtual BOOL InheritsNativeMouseWheelBehavior();
264.39
264.40 + virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
264.41 +
264.42 // some methods called on Toolkit thread
264.43 static jint _GetMaxWidth(void *param);
264.44 static void _UpdateMaxItemWidth(void *param);
265.1 --- a/src/windows/native/sun/windows/awt_Panel.cpp Thu Apr 16 17:42:00 2009 +0100
265.2 +++ b/src/windows/native/sun/windows/awt_Panel.cpp Thu Apr 16 19:10:32 2009 -0700
265.3 @@ -34,70 +34,6 @@
265.4
265.5 jfieldID AwtPanel::insets_ID;
265.6
265.7 -static char* AWTPANEL_RESTACK_MSG_1 = "Peers array is null";
265.8 -static char* AWTPANEL_RESTACK_MSG_2 = "Peer null in JNI";
265.9 -static char* AWTPANEL_RESTACK_MSG_3 = "Native resources unavailable";
265.10 -static char* AWTPANEL_RESTACK_MSG_4 = "Child peer is null";
265.11 -
265.12 -void* AwtPanel::Restack(void * param) {
265.13 - TRY;
265.14 -
265.15 - JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
265.16 - jobjectArray peers = (jobjectArray)param;
265.17 -
265.18 - int peerCount = env->GetArrayLength(peers);
265.19 - if (peerCount < 1) {
265.20 - env->DeleteGlobalRef(peers);
265.21 - return AWTPANEL_RESTACK_MSG_1;
265.22 - }
265.23 -
265.24 - jobject self = env->GetObjectArrayElement(peers, 0);
265.25 - // It's entirely possible that our native resources have been destroyed
265.26 - // before our java peer - if we're dispose()d, for instance.
265.27 - // Alert caller w/ IllegalComponentStateException.
265.28 - if (self == NULL) {
265.29 - env->DeleteGlobalRef(peers);
265.30 - return AWTPANEL_RESTACK_MSG_2;
265.31 - }
265.32 - PDATA pData = JNI_GET_PDATA(self);
265.33 - if (pData == NULL) {
265.34 - env->DeleteGlobalRef(peers);
265.35 - env->DeleteLocalRef(self);
265.36 - return AWTPANEL_RESTACK_MSG_3;
265.37 - }
265.38 -
265.39 - AwtPanel* panel = (AwtPanel*)pData;
265.40 -
265.41 - HWND prevWindow = 0;
265.42 -
265.43 - for (int i = 1; i < peerCount; i++) {
265.44 - jobject peer = env->GetObjectArrayElement(peers, i);
265.45 - if (peer == NULL) {
265.46 - // Nonsense
265.47 - env->DeleteGlobalRef(peers);
265.48 - env->DeleteLocalRef(self);
265.49 - return AWTPANEL_RESTACK_MSG_4;
265.50 - }
265.51 - PDATA child_pData = JNI_GET_PDATA(peer);
265.52 - if (child_pData == NULL) {
265.53 - env->DeleteLocalRef(peer);
265.54 - env->DeleteGlobalRef(peers);
265.55 - env->DeleteLocalRef(self);
265.56 - return AWTPANEL_RESTACK_MSG_3;
265.57 - }
265.58 - AwtComponent* child_comp = (AwtComponent*)child_pData;
265.59 - ::SetWindowPos(child_comp->GetHWnd(), prevWindow, 0, 0, 0, 0,
265.60 - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS);
265.61 - prevWindow = child_comp->GetHWnd();
265.62 - env->DeleteLocalRef(peer);
265.63 - }
265.64 - env->DeleteGlobalRef(peers);
265.65 - env->DeleteLocalRef(self);
265.66 -
265.67 - CATCH_BAD_ALLOC_RET("Allocation error");
265.68 - return NULL;
265.69 -}
265.70 -
265.71 /************************************************************************
265.72 * AwtPanel native methods
265.73 */
265.74 @@ -116,18 +52,4 @@
265.75 CATCH_BAD_ALLOC;
265.76 }
265.77
265.78 -JNIEXPORT void JNICALL
265.79 -Java_sun_awt_windows_WPanelPeer_pRestack(JNIEnv *env, jobject self, jobjectArray peers) {
265.80 -
265.81 - TRY;
265.82 -
265.83 - const char * error = (const char*)AwtToolkit::GetInstance().InvokeFunction(AwtPanel::Restack, env->NewGlobalRef(peers));
265.84 - if (error != NULL) {
265.85 - JNU_ThrowByName(env, "java/awt/IllegalComponentStateException", error);
265.86 - }
265.87 -
265.88 - CATCH_BAD_ALLOC;
265.89 -}
265.90 -
265.91 -
265.92 } /* extern "C" */
266.1 --- a/src/windows/native/sun/windows/awt_Panel.h Thu Apr 16 17:42:00 2009 +0100
266.2 +++ b/src/windows/native/sun/windows/awt_Panel.h Thu Apr 16 19:10:32 2009 -0700
266.3 @@ -35,11 +35,8 @@
266.4
266.5 class AwtPanel {
266.6 public:
266.7 - static void* Restack(void * param);
266.8 -
266.9 /* java.awt.Panel field ids */
266.10 static jfieldID insets_ID;
266.11 -
266.12 };
266.13
266.14 #endif // AWT_PANEL_H
267.1 --- a/src/windows/native/sun/windows/awt_PrintDialog.cpp Thu Apr 16 17:42:00 2009 +0100
267.2 +++ b/src/windows/native/sun/windows/awt_PrintDialog.cpp Thu Apr 16 19:10:32 2009 -0700
267.3 @@ -65,7 +65,8 @@
267.4 }
267.5 }
267.6
267.7 - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam);
267.8 + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
267.9 + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
267.10 }
267.11
267.12 static UINT_PTR CALLBACK
267.13 @@ -87,7 +88,7 @@
267.14 DWORD style = ::GetClassLong(hdlg, GCL_STYLE);
267.15 ::SetClassLong(hdlg,GCL_STYLE, style & ~CS_SAVEBITS);
267.16
267.17 - ::SetFocus(hdlg);
267.18 + ::SetFocus(hdlg); // will not break synthetic focus as hdlg is a native toplevel
267.19
267.20 // set appropriate icon for parentless dialogs
267.21 jobject awtParent = env->GetObjectField(peer, AwtPrintDialog::parentID);
267.22 @@ -99,16 +100,19 @@
267.23 }
267.24
267.25 // subclass dialog's parent to receive additional messages
267.26 - ComCtl32Util::GetInstance().SubclassHWND(hdlg,
267.27 - PrintDialogWndProc);
267.28 + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hdlg,
267.29 + PrintDialogWndProc);
267.30 + ::SetProp(hdlg, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc));
267.31
267.32 break;
267.33 }
267.34 case WM_DESTROY: {
267.35 + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hdlg, NativeDialogWndProcProp));
267.36 ComCtl32Util::GetInstance().UnsubclassHWND(hdlg,
267.37 PrintDialogWndProc,
267.38 - NULL);
267.39 + lpfnWndProc);
267.40 ::RemoveProp(hdlg, ModalDialogPeerProp);
267.41 + ::RemoveProp(hdlg, NativeDialogWndProcProp);
267.42 break;
267.43 }
267.44 }
268.1 --- a/src/windows/native/sun/windows/awt_PrintJob.cpp Thu Apr 16 17:42:00 2009 +0100
268.2 +++ b/src/windows/native/sun/windows/awt_PrintJob.cpp Thu Apr 16 19:10:32 2009 -0700
268.3 @@ -2885,7 +2885,8 @@
268.4 }
268.5 }
268.6
268.7 - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam);
268.8 + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
268.9 + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
268.10 }
268.11
268.12 /**
268.13 @@ -2919,16 +2920,19 @@
268.14 }
268.15
268.16 // subclass dialog's parent to receive additional messages
268.17 - ComCtl32Util::GetInstance().SubclassHWND(hDlg,
268.18 - PageDialogWndProc);
268.19 + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hDlg,
268.20 + PageDialogWndProc);
268.21 + ::SetProp(hDlg, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc));
268.22
268.23 break;
268.24 }
268.25 case WM_DESTROY: {
268.26 + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hDlg, NativeDialogWndProcProp));
268.27 ComCtl32Util::GetInstance().UnsubclassHWND(hDlg,
268.28 PageDialogWndProc,
268.29 - NULL);
268.30 + lpfnWndProc);
268.31 ::RemoveProp(hDlg, ModalDialogPeerProp);
268.32 + ::RemoveProp(hDlg, NativeDialogWndProcProp);
268.33 break;
268.34 }
268.35 }
269.1 --- a/src/windows/native/sun/windows/awt_ScrollPane.cpp Thu Apr 16 17:42:00 2009 +0100
269.2 +++ b/src/windows/native/sun/windows/awt_ScrollPane.cpp Thu Apr 16 19:10:32 2009 -0700
269.3 @@ -1,5 +1,5 @@
269.4 /*
269.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
269.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
269.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
269.8 *
269.9 * This code is free software; you can redistribute it and/or modify it
269.10 @@ -361,13 +361,6 @@
269.11 DASSERT(!safe_ExceptionOccurred(env));
269.12 }
269.13
269.14 -BOOL AwtScrollPane::ActMouseMessage(MSG* pMsg) {
269.15 - if (!IsFocusingMessage(pMsg->message)) {
269.16 - return FALSE;
269.17 - }
269.18 - return TRUE;
269.19 -}
269.20 -
269.21 MsgRouting
269.22 AwtScrollPane::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
269.23 {
269.24 @@ -412,13 +405,10 @@
269.25 return mrConsume;
269.26 }
269.27
269.28 -/*
269.29 - * Fix for BugTraq ID 4041703: keyDown not being invoked.
269.30 - * This method overrides AwtCanvas::HandleEvent() since we
269.31 - * don't want ScrollPanel to receive focus on mouse press.
269.32 - */
269.33 MsgRouting AwtScrollPane::HandleEvent(MSG *msg, BOOL synthetic)
269.34 {
269.35 + // SunAwtScrollPane control doesn't cause activation on mouse/key events,
269.36 + // so we can safely (for synthetic focus) pass them to the system proc.
269.37 return AwtComponent::HandleEvent(msg, synthetic);
269.38 }
269.39
270.1 --- a/src/windows/native/sun/windows/awt_ScrollPane.h Thu Apr 16 17:42:00 2009 +0100
270.2 +++ b/src/windows/native/sun/windows/awt_ScrollPane.h Thu Apr 16 19:10:32 2009 -0700
270.3 @@ -1,5 +1,5 @@
270.4 /*
270.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
270.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
270.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
270.8 *
270.9 * This code is free software; you can redistribute it and/or modify it
270.10 @@ -65,7 +65,6 @@
270.11 virtual void Reshape(int x, int y, int w, int h);
270.12 virtual void BeginValidate() {}
270.13 virtual void EndValidate() {}
270.14 - BOOL ActMouseMessage(MSG* pMsg);
270.15
270.16 /*
270.17 * Fix for bug 4046446
271.1 --- a/src/windows/native/sun/windows/awt_Scrollbar.cpp Thu Apr 16 17:42:00 2009 +0100
271.2 +++ b/src/windows/native/sun/windows/awt_Scrollbar.cpp Thu Apr 16 19:10:32 2009 -0700
271.3 @@ -1,5 +1,5 @@
271.4 /*
271.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
271.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
271.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
271.8 *
271.9 * This code is free software; you can redistribute it and/or modify it
271.10 @@ -27,7 +27,6 @@
271.11 #include "awt_Scrollbar.h"
271.12 #include "awt_Canvas.h"
271.13 #include "awt_Window.h"
271.14 -#include "awt_KeyboardFocusManager.h"
271.15
271.16 /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
271.17 */
271.18 @@ -61,7 +60,6 @@
271.19 m_orientation = SB_HORZ;
271.20 m_lineIncr = 0;
271.21 m_pageIncr = 0;
271.22 - m_ignoreFocusEvents = FALSE;
271.23 m_prevCallback = NULL;
271.24 m_prevCallbackPos = 0;
271.25 ms_instanceCounter++;
271.26 @@ -221,7 +219,6 @@
271.27 return retValue;
271.28 }
271.29
271.30 -
271.31 MsgRouting
271.32 AwtScrollbar::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
271.33 {
271.34 @@ -265,17 +262,10 @@
271.35 MsgRouting
271.36 AwtScrollbar::HandleEvent(MSG *msg, BOOL synthetic)
271.37 {
271.38 - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
271.39 - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) {
271.40 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
271.41 - jobject target = GetTarget(env);
271.42 - env->CallStaticVoidMethod
271.43 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
271.44 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
271.45 - target, ((jlong)msg->time) & 0xFFFFFFFF);
271.46 - env->DeleteLocalRef(target);
271.47 - AwtSetFocus();
271.48 - }
271.49 + // SCROLLBAR control doesn't cause activation on mouse/key events,
271.50 + // so we can safely (for synthetic focus) pass them to the system proc.
271.51 +
271.52 + if (IsFocusingMouseMessage(msg)) {
271.53 // Left button press was already routed to default window
271.54 // procedure in the WmMouseDown above. Propagating synthetic
271.55 // press seems like a bad idea as internal message loop
271.56 @@ -283,54 +273,19 @@
271.57 delete msg;
271.58 return mrConsume;
271.59 }
271.60 - else {
271.61 - return AwtComponent::HandleEvent(msg, synthetic);
271.62 - }
271.63 + return AwtComponent::HandleEvent(msg, synthetic);
271.64 }
271.65
271.66 -
271.67 // Work around a windows bug descrbed in KB article Q73839. Reset
271.68 // focus on scrollbars to update focus indicator. The article advises
271.69 -// to disable/enable the scrollbar, but simply resetting the focus is
271.70 -// sufficient.
271.71 +// to disable/enable the scrollbar.
271.72 void
271.73 AwtScrollbar::UpdateFocusIndicator()
271.74 {
271.75 if (IsFocusable()) {
271.76 - m_ignoreFocusEvents = TRUE;
271.77 - ::SetFocus(NULL);
271.78 - AwtSetFocus();
271.79 - m_ignoreFocusEvents = FALSE;
271.80 - }
271.81 -}
271.82 -
271.83 -MsgRouting
271.84 -AwtScrollbar::WmKillFocus(HWND hWndGot)
271.85 -{
271.86 - if (m_ignoreFocusEvents) {
271.87 - // We are voluntary giving up focus and will get it back
271.88 - // immediately. This is necessary to force windows to update
271.89 - // the focus indicator.
271.90 - sm_focusOwner = NULL;
271.91 - return mrDoDefault;
271.92 - }
271.93 - else {
271.94 - return AwtComponent::WmKillFocus(hWndGot);
271.95 - }
271.96 -}
271.97 -
271.98 -MsgRouting
271.99 -AwtScrollbar::WmSetFocus(HWND hWndLost)
271.100 -{
271.101 - if (m_ignoreFocusEvents) {
271.102 - // We have voluntary gave up focus and are getting it back
271.103 - // now. This is necessary to force windows to update the
271.104 - // focus indicator.
271.105 - sm_focusOwner = GetHWnd();
271.106 - return mrDoDefault;
271.107 - }
271.108 - else {
271.109 - return AwtComponent::WmSetFocus(hWndLost);
271.110 + // todo: doesn't work
271.111 + SendMessage((WPARAM)ESB_DISABLE_BOTH);
271.112 + SendMessage((WPARAM)ESB_ENABLE_BOTH);
271.113 }
271.114 }
271.115
272.1 --- a/src/windows/native/sun/windows/awt_Scrollbar.h Thu Apr 16 17:42:00 2009 +0100
272.2 +++ b/src/windows/native/sun/windows/awt_Scrollbar.h Thu Apr 16 19:10:32 2009 -0700
272.3 @@ -1,5 +1,5 @@
272.4 /*
272.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
272.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
272.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
272.8 *
272.9 * This code is free software; you can redistribute it and/or modify it
272.10 @@ -69,10 +69,6 @@
272.11 virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar);
272.12 virtual MsgRouting WmVScroll(UINT scrollCode, UINT pos, HWND hScrollBar);
272.13
272.14 - // Work around KB Q73839 bug.
272.15 - virtual MsgRouting WmSetFocus(HWND hWndLost);
272.16 - virtual MsgRouting WmKillFocus(HWND hWndGot);
272.17 -
272.18 // Prevent KB Q102552 race.
272.19 virtual MsgRouting WmMouseDown(UINT flags, int x, int y, int button);
272.20 virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal);
272.21 @@ -91,7 +87,6 @@
272.22 int m_pageIncr;
272.23
272.24 // Work around KB Q73839 bug.
272.25 - BOOL m_ignoreFocusEvents;
272.26 void UpdateFocusIndicator();
272.27
272.28 // Don't do redundant callbacks.
273.1 --- a/src/windows/native/sun/windows/awt_TextArea.cpp Thu Apr 16 17:42:00 2009 +0100
273.2 +++ b/src/windows/native/sun/windows/awt_TextArea.cpp Thu Apr 16 19:10:32 2009 -0700
273.3 @@ -1,5 +1,5 @@
273.4 /*
273.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
273.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
273.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
273.8 *
273.9 * This code is free software; you can redistribute it and/or modify it
273.10 @@ -26,9 +26,9 @@
273.11 #include "awt_Toolkit.h"
273.12 #include "awt_TextArea.h"
273.13 #include "awt_TextComponent.h"
273.14 -#include "awt_KeyboardFocusManager.h"
273.15 #include "awt_Canvas.h"
273.16 #include "awt_Window.h"
273.17 +#include "awt_Frame.h"
273.18
273.19 /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
273.20 */
273.21 @@ -362,13 +362,6 @@
273.22 DASSERT(::IsWindow(::GetParent(hWnd)));
273.23
273.24 switch (message) {
273.25 - case WM_SETFOCUS:
273.26 - ::SendMessage(::GetParent(hWnd), EM_HIDESELECTION, FALSE, 0);
273.27 - break;
273.28 - case WM_KILLFOCUS:
273.29 - ::SendMessage(::GetParent(hWnd), EM_HIDESELECTION, TRUE, 0);
273.30 - break;
273.31 -
273.32 case WM_UNDO:
273.33 case WM_CUT:
273.34 case WM_COPY:
273.35 @@ -400,7 +393,6 @@
273.36
273.37 MsgRouting
273.38 AwtTextArea::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) {
273.39 -
273.40 /* Use the system provided edit control class to generate context menu. */
273.41 if (m_hEditCtrl == NULL) {
273.42 DWORD dwStyle = WS_CHILD;
273.43 @@ -494,22 +486,11 @@
273.44 VERIFY(::ClientToScreen(GetHWnd(), &p));
273.45 }
273.46
273.47 - ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl,
273.48 - MAKELPARAM(p.x, p.y));
273.49 - /*
273.50 - * After the context menu is dismissed focus is owned by the edit contol.
273.51 - * Return focus to parent.
273.52 - */
273.53 - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) {
273.54 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
273.55 - jobject target = GetTarget(env);
273.56 - env->CallStaticVoidMethod
273.57 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
273.58 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
273.59 - target, TimeHelper::getMessageTimeUTC());
273.60 - env->DeleteLocalRef(target);
273.61 - AwtSetFocus();
273.62 - }
273.63 + // The context menu steals focus from the proxy.
273.64 + // So, set the focus-restore flag up.
273.65 + SetRestoreFocus(TRUE);
273.66 + ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y));
273.67 + SetRestoreFocus(FALSE);
273.68
273.69 return mrConsume;
273.70 }
273.71 @@ -558,20 +539,11 @@
273.72 * By consuming WM_MOUSEMOVE messages we also don't give
273.73 * the RichEdit control a chance to recognize a drag gesture
273.74 * and initiate its own drag-n-drop operation.
273.75 + *
273.76 + * The workaround also allows us to implement synthetic focus mechanism.
273.77 + *
273.78 */
273.79 - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
273.80 -
273.81 - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) {
273.82 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
273.83 - jobject target = GetTarget(env);
273.84 - env->CallStaticVoidMethod
273.85 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
273.86 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
273.87 - target, ((jlong)msg->time) & 0xFFFFFFFF);
273.88 - env->DeleteLocalRef(target);
273.89 - AwtSetFocus();
273.90 - }
273.91 -
273.92 + if (IsFocusingMouseMessage(msg)) {
273.93 CHARRANGE cr;
273.94
273.95 LONG lCurPos = EditGetCharFromPos(msg->pt);
273.96 @@ -717,6 +689,7 @@
273.97 p.x = -1;
273.98 p.y = -1;
273.99 }
273.100 +
273.101 if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(),
273.102 MAKELPARAM(p.x, p.y))) {
273.103 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
273.104 @@ -724,6 +697,8 @@
273.105 env->ExceptionDescribe();
273.106 env->ExceptionClear();
273.107 }
273.108 + delete msg;
273.109 + return mrConsume;
273.110 } else if (msg->message == WM_MOUSEWHEEL) {
273.111 // 4417236: If there is an old version of RichEd32.dll which
273.112 // does not provide the mouse wheel scrolling we have to
274.1 --- a/src/windows/native/sun/windows/awt_TextComponent.cpp Thu Apr 16 17:42:00 2009 +0100
274.2 +++ b/src/windows/native/sun/windows/awt_TextComponent.cpp Thu Apr 16 19:10:32 2009 -0700
274.3 @@ -1,5 +1,5 @@
274.4 /*
274.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
274.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
274.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
274.8 *
274.9 * This code is free software; you can redistribute it and/or modify it
274.10 @@ -25,7 +25,6 @@
274.11
274.12 #include "awt_Toolkit.h"
274.13 #include "awt_TextComponent.h"
274.14 -#include "awt_KeyboardFocusManager.h"
274.15 #include "awt_Canvas.h"
274.16
274.17 #include "jni.h"
274.18 @@ -62,9 +61,9 @@
274.19
274.20 AwtTextComponent::AwtTextComponent() {
274.21 m_synthetic = FALSE;
274.22 - m_lStartPos = -1;
274.23 - m_lEndPos = -1;
274.24 - m_lLastPos = -1;
274.25 + m_lStartPos = -1;
274.26 + m_lEndPos = -1;
274.27 + m_lLastPos = -1;
274.28 m_isLFonly = FALSE;
274.29 m_EOLchecked = FALSE;
274.30 // javaEventsMask = 0; // accessibility support
274.31 @@ -74,10 +73,6 @@
274.32 return TEXT("EDIT"); /* System provided edit control class */
274.33 }
274.34
274.35 -BOOL AwtTextComponent::ActMouseMessage(MSG* pMsg) {
274.36 - return FALSE;
274.37 -}
274.38 -
274.39 /* Set a suitable font to IME against the component font. */
274.40 void AwtTextComponent::SetFont(AwtFont* font)
274.41 {
274.42 @@ -143,23 +138,16 @@
274.43 return mrDoDefault;
274.44 }
274.45
274.46 +BOOL AwtTextComponent::IsFocusingMouseMessage(MSG *pMsg)
274.47 +{
274.48 + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK;
274.49 +}
274.50 +
274.51 MsgRouting
274.52 AwtTextComponent::HandleEvent(MSG *msg, BOOL synthetic)
274.53 {
274.54 MsgRouting returnVal;
274.55
274.56 - if (AwtComponent::sm_focusOwner != GetHWnd() && IsFocusable() &&
274.57 - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK))
274.58 - {
274.59 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
274.60 - jobject target = GetTarget(env);
274.61 - env->CallStaticVoidMethod
274.62 - (AwtKeyboardFocusManager::keyboardFocusManagerCls,
274.63 - AwtKeyboardFocusManager::heavyweightButtonDownMID,
274.64 - target, ((jlong)msg->time) & 0xFFFFFFFF);
274.65 - env->DeleteLocalRef(target);
274.66 - }
274.67 -
274.68 /*
274.69 * Store the 'synthetic' parameter so that the WM_PASTE security check
274.70 * happens only for synthetic events.
275.1 --- a/src/windows/native/sun/windows/awt_TextComponent.h Thu Apr 16 17:42:00 2009 +0100
275.2 +++ b/src/windows/native/sun/windows/awt_TextComponent.h Thu Apr 16 19:10:32 2009 -0700
275.3 @@ -1,5 +1,5 @@
275.4 /*
275.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
275.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
275.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
275.8 *
275.9 * This code is free software; you can redistribute it and/or modify it
275.10 @@ -69,8 +69,6 @@
275.11 // called on Toolkit thread from JNI
275.12 static jstring _GetText(void *param);
275.13
275.14 - BOOL ActMouseMessage(MSG* pMsg);
275.15 -
275.16 void SetFont(AwtFont* font);
275.17
275.18 /*
275.19 @@ -80,6 +78,8 @@
275.20 MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
275.21 MsgRouting WmPaste();
275.22
275.23 + virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
275.24 +
275.25 /* To be fully implemented in a future release
275.26
275.27 MsgRouting WmKeyDown(UINT wkey, UINT repCnt,
275.28 @@ -125,7 +125,6 @@
275.29 LONG m_lEndPos;
275.30 LONG m_lLastPos;
275.31
275.32 -
275.33 HFONT m_hFont;
275.34 //im --- end
275.35
276.1 --- a/src/windows/native/sun/windows/awt_TextField.cpp Thu Apr 16 17:42:00 2009 +0100
276.2 +++ b/src/windows/native/sun/windows/awt_TextField.cpp Thu Apr 16 19:10:32 2009 -0700
276.3 @@ -1,5 +1,5 @@
276.4 /*
276.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
276.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
276.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
276.8 *
276.9 * This code is free software; you can redistribute it and/or modify it
276.10 @@ -26,7 +26,6 @@
276.11 #include "awt_Toolkit.h"
276.12 #include "awt_TextField.h"
276.13 #include "awt_TextComponent.h"
276.14 -#include "awt_KeyboardFocusManager.h"
276.15 #include "awt_Canvas.h"
276.16
276.17 /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code.
276.18 @@ -150,135 +149,130 @@
276.19 * By consuming WM_MOUSEMOVE messages we also don't give
276.20 * the RichEdit control a chance to recognize a drag gesture
276.21 * and initiate its own drag-n-drop operation.
276.22 + *
276.23 + * The workaround also allows us to implement synthetic focus mechanism.
276.24 */
276.25 - /**
276.26 - * In non-focusable mode we don't pass mouse messages to native window thus making user unable
276.27 - * to select the text. Below is the code from awt_TextArea.cpp which implements selection
276.28 - * functionality. For safety this code is only being executed in non-focusable mode.
276.29 - */
276.30 - if (!IsFocusable()) {
276.31 - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) {
276.32 + if (IsFocusingMouseMessage(msg)) {
276.33 + CHARRANGE cr;
276.34 +
276.35 + LONG lCurPos = EditGetCharFromPos(msg->pt);
276.36 +
276.37 + EditGetSel(cr);
276.38 + /*
276.39 + * NOTE: Plain EDIT control always clears selection on mouse
276.40 + * button press. We are clearing the current selection only if
276.41 + * the mouse pointer is not over the selected region.
276.42 + * In this case we sacrifice backward compatibility
276.43 + * to allow dnd of the current selection.
276.44 + */
276.45 + if (msg->message == WM_LBUTTONDBLCLK) {
276.46 + SetStartSelectionPos(static_cast<LONG>(SendMessage(
276.47 + EM_FINDWORDBREAK, WB_MOVEWORDLEFT, lCurPos)));
276.48 + SetEndSelectionPos(static_cast<LONG>(SendMessage(
276.49 + EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, lCurPos)));
276.50 + } else {
276.51 + SetStartSelectionPos(lCurPos);
276.52 + SetEndSelectionPos(lCurPos);
276.53 + }
276.54 + cr.cpMin = GetStartSelectionPos();
276.55 + cr.cpMax = GetEndSelectionPos();
276.56 + EditSetSel(cr);
276.57 +
276.58 + delete msg;
276.59 + return mrConsume;
276.60 + } else if (msg->message == WM_LBUTTONUP) {
276.61 +
276.62 + /*
276.63 + * If the left mouse button is pressed on the selected region
276.64 + * we don't clear the current selection. We clear it on button
276.65 + * release instead. This is to allow dnd of the current selection.
276.66 + */
276.67 + if (GetStartSelectionPos() == -1 && GetEndSelectionPos() == -1) {
276.68 CHARRANGE cr;
276.69
276.70 LONG lCurPos = EditGetCharFromPos(msg->pt);
276.71
276.72 - EditGetSel(cr);
276.73 + cr.cpMin = lCurPos;
276.74 + cr.cpMax = lCurPos;
276.75 + EditSetSel(cr);
276.76 + }
276.77 +
276.78 + /*
276.79 + * Cleanup the state variables when left mouse button is released.
276.80 + * These state variables are designed to reflect the selection state
276.81 + * while the left mouse button is pressed and be set to -1 otherwise.
276.82 + */
276.83 + SetStartSelectionPos(-1);
276.84 + SetEndSelectionPos(-1);
276.85 + SetLastSelectionPos(-1);
276.86 +
276.87 + delete msg;
276.88 + return mrConsume;
276.89 + } else if (msg->message == WM_MOUSEMOVE && (msg->wParam & MK_LBUTTON)) {
276.90 +
276.91 + /*
276.92 + * We consume WM_MOUSEMOVE while the left mouse button is pressed,
276.93 + * so we have to simulate autoscrolling when mouse is moved outside
276.94 + * of the client area.
276.95 + */
276.96 + POINT p;
276.97 + RECT r;
276.98 + BOOL bScrollLeft = FALSE;
276.99 + BOOL bScrollRight = FALSE;
276.100 + BOOL bScrollUp = FALSE;
276.101 + BOOL bScrollDown = FALSE;
276.102 +
276.103 + p.x = msg->pt.x;
276.104 + p.y = msg->pt.y;
276.105 + VERIFY(::GetClientRect(GetHWnd(), &r));
276.106 +
276.107 + if (p.x < 0) {
276.108 + bScrollLeft = TRUE;
276.109 + p.x = 0;
276.110 + } else if (p.x > r.right) {
276.111 + bScrollRight = TRUE;
276.112 + p.x = r.right - 1;
276.113 + }
276.114 + LONG lCurPos = EditGetCharFromPos(p);
276.115 +
276.116 + if (GetStartSelectionPos() != -1 &&
276.117 + GetEndSelectionPos() != -1 &&
276.118 + lCurPos != GetLastSelectionPos()) {
276.119 +
276.120 + CHARRANGE cr;
276.121 +
276.122 + SetLastSelectionPos(lCurPos);
276.123 +
276.124 + cr.cpMin = GetStartSelectionPos();
276.125 + cr.cpMax = GetLastSelectionPos();
276.126 +
276.127 + EditSetSel(cr);
276.128 + }
276.129 +
276.130 + if (bScrollLeft == TRUE || bScrollRight == TRUE) {
276.131 + SCROLLINFO si;
276.132 + memset(&si, 0, sizeof(si));
276.133 + si.cbSize = sizeof(si);
276.134 + si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
276.135 +
276.136 + VERIFY(::GetScrollInfo(GetHWnd(), SB_HORZ, &si));
276.137 + if (bScrollLeft == TRUE) {
276.138 + si.nPos = si.nPos - si.nPage / 2;
276.139 + si.nPos = max(si.nMin, si.nPos);
276.140 + } else if (bScrollRight == TRUE) {
276.141 + si.nPos = si.nPos + si.nPage / 2;
276.142 + si.nPos = min(si.nPos, si.nMax);
276.143 + }
276.144 /*
276.145 - * NOTE: Plain EDIT control always clears selection on mouse
276.146 - * button press. We are clearing the current selection only if
276.147 - * the mouse pointer is not over the selected region.
276.148 - * In this case we sacrifice backward compatibility
276.149 - * to allow dnd of the current selection.
276.150 + * Okay to use 16-bit position since RichEdit control adjusts
276.151 + * its scrollbars so that their range is always 16-bit.
276.152 */
276.153 - if (msg->message == WM_LBUTTONDBLCLK) {
276.154 - SetStartSelectionPos(static_cast<LONG>(SendMessage(
276.155 - EM_FINDWORDBREAK, WB_MOVEWORDLEFT, lCurPos)));
276.156 - SetEndSelectionPos(static_cast<LONG>(SendMessage(
276.157 - EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, lCurPos)));
276.158 - } else {
276.159 - SetStartSelectionPos(lCurPos);
276.160 - SetEndSelectionPos(lCurPos);
276.161 - }
276.162 - cr.cpMin = GetStartSelectionPos();
276.163 - cr.cpMax = GetEndSelectionPos();
276.164 - EditSetSel(cr);
276.165 -
276.166 - delete msg;
276.167 - return mrConsume;
276.168 - } else if (msg->message == WM_LBUTTONUP) {
276.169 -
276.170 - /*
276.171 - * If the left mouse button is pressed on the selected region
276.172 - * we don't clear the current selection. We clear it on button
276.173 - * release instead. This is to allow dnd of the current selection.
276.174 - */
276.175 - if (GetStartSelectionPos() == -1 && GetEndSelectionPos() == -1) {
276.176 - CHARRANGE cr;
276.177 -
276.178 - LONG lCurPos = EditGetCharFromPos(msg->pt);
276.179 -
276.180 - cr.cpMin = lCurPos;
276.181 - cr.cpMax = lCurPos;
276.182 - EditSetSel(cr);
276.183 - }
276.184 -
276.185 - /*
276.186 - * Cleanup the state variables when left mouse button is released.
276.187 - * These state variables are designed to reflect the selection state
276.188 - * while the left mouse button is pressed and be set to -1 otherwise.
276.189 - */
276.190 - SetStartSelectionPos(-1);
276.191 - SetEndSelectionPos(-1);
276.192 - SetLastSelectionPos(-1);
276.193 -
276.194 - delete msg;
276.195 - return mrConsume;
276.196 - } else if (msg->message == WM_MOUSEMOVE && (msg->wParam & MK_LBUTTON)) {
276.197 -
276.198 - /*
276.199 - * We consume WM_MOUSEMOVE while the left mouse button is pressed,
276.200 - * so we have to simulate autoscrolling when mouse is moved outside
276.201 - * of the client area.
276.202 - */
276.203 - POINT p;
276.204 - RECT r;
276.205 - BOOL bScrollLeft = FALSE;
276.206 - BOOL bScrollRight = FALSE;
276.207 - BOOL bScrollUp = FALSE;
276.208 - BOOL bScrollDown = FALSE;
276.209 -
276.210 - p.x = msg->pt.x;
276.211 - p.y = msg->pt.y;
276.212 - VERIFY(::GetClientRect(GetHWnd(), &r));
276.213 -
276.214 - if (p.x < 0) {
276.215 - bScrollLeft = TRUE;
276.216 - p.x = 0;
276.217 - } else if (p.x > r.right) {
276.218 - bScrollRight = TRUE;
276.219 - p.x = r.right - 1;
276.220 - }
276.221 - LONG lCurPos = EditGetCharFromPos(p);
276.222 -
276.223 - if (GetStartSelectionPos() != -1 &&
276.224 - GetEndSelectionPos() != -1 &&
276.225 - lCurPos != GetLastSelectionPos()) {
276.226 -
276.227 - CHARRANGE cr;
276.228 -
276.229 - SetLastSelectionPos(lCurPos);
276.230 -
276.231 - cr.cpMin = GetStartSelectionPos();
276.232 - cr.cpMax = GetLastSelectionPos();
276.233 -
276.234 - EditSetSel(cr);
276.235 - }
276.236 -
276.237 - if (bScrollLeft == TRUE || bScrollRight == TRUE) {
276.238 - SCROLLINFO si;
276.239 - memset(&si, 0, sizeof(si));
276.240 - si.cbSize = sizeof(si);
276.241 - si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
276.242 -
276.243 - VERIFY(::GetScrollInfo(GetHWnd(), SB_HORZ, &si));
276.244 - if (bScrollLeft == TRUE) {
276.245 - si.nPos = si.nPos - si.nPage / 2;
276.246 - si.nPos = max(si.nMin, si.nPos);
276.247 - } else if (bScrollRight == TRUE) {
276.248 - si.nPos = si.nPos + si.nPage / 2;
276.249 - si.nPos = min(si.nPos, si.nMax);
276.250 - }
276.251 - /*
276.252 - * Okay to use 16-bit position since RichEdit control adjusts
276.253 - * its scrollbars so that their range is always 16-bit.
276.254 - */
276.255 - DASSERT(abs(si.nPos) < 0x8000);
276.256 - SendMessage(WM_HSCROLL,
276.257 - MAKEWPARAM(SB_THUMBPOSITION, LOWORD(si.nPos)));
276.258 - }
276.259 - delete msg;
276.260 - return mrConsume;
276.261 + DASSERT(abs(si.nPos) < 0x8000);
276.262 + SendMessage(WM_HSCROLL,
276.263 + MAKEWPARAM(SB_THUMBPOSITION, LOWORD(si.nPos)));
276.264 }
276.265 + delete msg;
276.266 + return mrConsume;
276.267 }
276.268 /*
276.269 * Store the 'synthetic' parameter so that the WM_PASTE security check
277.1 --- a/src/windows/native/sun/windows/awt_Toolkit.cpp Thu Apr 16 17:42:00 2009 +0100
277.2 +++ b/src/windows/native/sun/windows/awt_Toolkit.cpp Thu Apr 16 19:10:32 2009 -0700
277.3 @@ -56,6 +56,7 @@
277.4 #include "debug_mem.h"
277.5
277.6 #include "ComCtl32Util.h"
277.7 +#include "DllUtil.h"
277.8
277.9 #include "D3DPipelineManager.h"
277.10
277.11 @@ -334,6 +335,8 @@
277.12 m_mouseDown = FALSE;
277.13
277.14 m_hGetMessageHook = 0;
277.15 + m_hMouseLLHook = 0;
277.16 + m_lastWindowUnderMouse = NULL;
277.17 m_timer = 0;
277.18
277.19 m_cmdIDs = new AwtCmdIDList();
277.20 @@ -483,6 +486,7 @@
277.21 tk.UnregisterClass();
277.22
277.23 ::UnhookWindowsHookEx(tk.m_hGetMessageHook);
277.24 + UninstallMouseLowLevelHook();
277.25
277.26 tk.m_mainThreadId = 0;
277.27
277.28 @@ -960,6 +964,79 @@
277.29 CATCH_BAD_ALLOC_RET(0);
277.30 }
277.31
277.32 +void AwtToolkit::InstallMouseLowLevelHook()
277.33 +{
277.34 + // We need the low-level hook since we need to process mouse move
277.35 + // messages outside of our windows.
277.36 + m_hMouseLLHook = ::SetWindowsHookEx(WH_MOUSE_LL,
277.37 + (HOOKPROC)MouseLowLevelHook,
277.38 + GetModuleHandle(), NULL);
277.39 +
277.40 + // Reset the old value
277.41 + m_lastWindowUnderMouse = NULL;
277.42 +}
277.43 +
277.44 +void AwtToolkit::UninstallMouseLowLevelHook()
277.45 +{
277.46 + if (m_hMouseLLHook != 0) {
277.47 + ::UnhookWindowsHookEx(m_hMouseLLHook);
277.48 + m_hMouseLLHook = 0;
277.49 + }
277.50 +}
277.51 +
277.52 +LRESULT CALLBACK AwtToolkit::MouseLowLevelHook(int code,
277.53 + WPARAM wParam, LPARAM lParam)
277.54 +{
277.55 + TRY;
277.56 +
277.57 + if (code >= 0 && wParam == WM_MOUSEMOVE) {
277.58 + POINT pt = ((MSLLHOOKSTRUCT*)lParam)->pt;
277.59 +
277.60 + // We can't use GA_ROOTOWNER since in this case we'll go up to
277.61 + // the root Java toplevel, not the actual owned toplevel.
277.62 + HWND hwnd = ::GetAncestor(::WindowFromPoint(pt), GA_ROOT);
277.63 +
277.64 + AwtToolkit& tk = AwtToolkit::GetInstance();
277.65 +
277.66 + if (tk.m_lastWindowUnderMouse != hwnd) {
277.67 + AwtWindow *fw = NULL, *tw = NULL;
277.68 +
277.69 + if (tk.m_lastWindowUnderMouse) {
277.70 + fw = (AwtWindow*)
277.71 + AwtComponent::GetComponent(tk.m_lastWindowUnderMouse);
277.72 + }
277.73 + if (hwnd) {
277.74 + tw = (AwtWindow*)AwtComponent::GetComponent(hwnd);
277.75 + }
277.76 +
277.77 + tk.m_lastWindowUnderMouse = hwnd;
277.78 +
277.79 + if (fw) {
277.80 + fw->UpdateSecurityWarningVisibility();
277.81 + }
277.82 + // ... however, because we use GA_ROOT, we may find the warningIcon
277.83 + // which is not a Java windows.
277.84 + if (AwtWindow::IsWarningWindow(hwnd)) {
277.85 + hwnd = ::GetParent(hwnd);
277.86 + if (hwnd) {
277.87 + tw = (AwtWindow*)AwtComponent::GetComponent(hwnd);
277.88 + }
277.89 + tk.m_lastWindowUnderMouse = hwnd;
277.90 + }
277.91 + if (tw) {
277.92 + tw->UpdateSecurityWarningVisibility();
277.93 + }
277.94 +
277.95 +
277.96 + }
277.97 + }
277.98 +
277.99 + return ::CallNextHookEx(AwtToolkit::GetInstance().m_hMouseLLHook, code,
277.100 + wParam, lParam);
277.101 +
277.102 + CATCH_BAD_ALLOC_RET(0);
277.103 +}
277.104 +
277.105 /*
277.106 * The main message loop
277.107 */
277.108 @@ -1376,6 +1453,47 @@
277.109 return defaultIconSm;
277.110 }
277.111
277.112 +HICON AwtToolkit::GetSecurityWarningIcon(UINT index, UINT w, UINT h)
277.113 +{
277.114 + //Note: should not exceed 10 because of the current implementation.
277.115 + static const int securityWarningIconCounter = 3;
277.116 +
277.117 + static HICON securityWarningIcon[securityWarningIconCounter] = {NULL, NULL, NULL};;
277.118 + static UINT securityWarningIconWidth[securityWarningIconCounter] = {0, 0, 0};
277.119 + static UINT securityWarningIconHeight[securityWarningIconCounter] = {0, 0, 0};
277.120 +
277.121 + index = AwtToolkit::CalculateWave(index, securityWarningIconCounter);
277.122 +
277.123 + if (securityWarningIcon[index] == NULL ||
277.124 + w != securityWarningIconWidth[index] ||
277.125 + h != securityWarningIconHeight[index])
277.126 + {
277.127 + if (securityWarningIcon[index] != NULL)
277.128 + {
277.129 + ::DestroyIcon(securityWarningIcon[index]);
277.130 + }
277.131 +
277.132 + static const wchar_t securityWarningIconName[] = L"SECURITY_WARNING_";
277.133 + wchar_t iconResourceName[sizeof(securityWarningIconName) + 2];
277.134 + ::ZeroMemory(iconResourceName, sizeof(iconResourceName));
277.135 + wcscpy(iconResourceName, securityWarningIconName);
277.136 +
277.137 + wchar_t strIndex[2];
277.138 + ::ZeroMemory(strIndex, sizeof(strIndex));
277.139 + strIndex[0] = L'0' + index;
277.140 +
277.141 + wcscat(iconResourceName, strIndex);
277.142 +
277.143 + securityWarningIcon[index] = (HICON)::LoadImage(GetModuleHandle(),
277.144 + iconResourceName,
277.145 + IMAGE_ICON, w, h, LR_DEFAULTCOLOR);
277.146 + securityWarningIconWidth[index] = w;
277.147 + securityWarningIconHeight[index] = h;
277.148 + }
277.149 +
277.150 + return securityWarningIcon[index];
277.151 +}
277.152 +
277.153 void AwtToolkit::SetHeapCheck(long flag) {
277.154 if (flag) {
277.155 printf("heap checking not supported with this build\n");
277.156 @@ -1428,6 +1546,49 @@
277.157 (JNIEnv*)JNU_GetEnv(jvm, JNI_VERSION_1_2) : m_env;
277.158 }
277.159
277.160 +BOOL AwtToolkit::GetScreenInsets(int screenNum, RECT * rect)
277.161 +{
277.162 + /* if primary display */
277.163 + if (screenNum == 0) {
277.164 + RECT rRW;
277.165 + if (::SystemParametersInfo(SPI_GETWORKAREA,0,(void *) &rRW,0) == TRUE) {
277.166 + rect->top = rRW.top;
277.167 + rect->left = rRW.left;
277.168 + rect->bottom = ::GetSystemMetrics(SM_CYSCREEN) - rRW.bottom;
277.169 + rect->right = ::GetSystemMetrics(SM_CXSCREEN) - rRW.right;
277.170 + return TRUE;
277.171 + }
277.172 + }
277.173 + /* if additional display */
277.174 + else {
277.175 + MONITORINFO *miInfo;
277.176 + miInfo = AwtWin32GraphicsDevice::GetMonitorInfo(screenNum);
277.177 + if (miInfo) {
277.178 + rect->top = miInfo->rcWork.top - miInfo->rcMonitor.top;
277.179 + rect->left = miInfo->rcWork.left - miInfo->rcMonitor.left;
277.180 + rect->bottom = miInfo->rcMonitor.bottom - miInfo->rcWork.bottom;
277.181 + rect->right = miInfo->rcMonitor.right - miInfo->rcWork.right;
277.182 + return TRUE;
277.183 + }
277.184 + }
277.185 + return FALSE;
277.186 +}
277.187 +
277.188 +
277.189 +void AwtToolkit::GetWindowRect(HWND hWnd, LPRECT lpRect)
277.190 +{
277.191 + try {
277.192 + if (S_OK == DwmAPI::DwmGetWindowAttribute(hWnd,
277.193 + DwmAPI::DWMWA_EXTENDED_FRAME_BOUNDS,
277.194 + lpRect, sizeof(*lpRect)))
277.195 + {
277.196 + return;
277.197 + }
277.198 + } catch (const DllUtil::Exception &) {}
277.199 +
277.200 + ::GetWindowRect(hWnd, lpRect);
277.201 +}
277.202 +
277.203 /************************************************************************
277.204 * Toolkit native methods
277.205 */
277.206 @@ -1756,7 +1917,6 @@
277.207 CATCH_BAD_ALLOC_RET(0);
277.208 }
277.209
277.210 -
277.211 /*
277.212 * Class: sun_awt_windows_WToolkit
277.213 * Method: getSreenInsets
277.214 @@ -1768,34 +1928,17 @@
277.215 jint screen)
277.216 {
277.217 jobject insets = NULL;
277.218 - RECT rRW;
277.219 - LPMONITORINFO miInfo;
277.220 + RECT rect;
277.221
277.222 TRY;
277.223
277.224 -/* if primary display */
277.225 - if (screen == 0) {
277.226 - if (::SystemParametersInfo(SPI_GETWORKAREA,0,(void *) &rRW,0) == TRUE) {
277.227 - insets = env->NewObject(env->FindClass("java/awt/Insets"),
277.228 - AwtToolkit::insetsMID,
277.229 - rRW.top,
277.230 - rRW.left,
277.231 - ::GetSystemMetrics(SM_CYSCREEN) - rRW.bottom,
277.232 - ::GetSystemMetrics(SM_CXSCREEN) - rRW.right);
277.233 - }
277.234 - }
277.235 -
277.236 -/* if additional display */
277.237 - else {
277.238 - miInfo = AwtWin32GraphicsDevice::GetMonitorInfo(screen);
277.239 - if (miInfo) {
277.240 - insets = env->NewObject(env->FindClass("java/awt/Insets"),
277.241 + if (AwtToolkit::GetScreenInsets(screen, &rect)) {
277.242 + insets = env->NewObject(env->FindClass("java/awt/Insets"),
277.243 AwtToolkit::insetsMID,
277.244 - miInfo->rcWork.top - miInfo->rcMonitor.top,
277.245 - miInfo->rcWork.left - miInfo->rcMonitor.left,
277.246 - miInfo->rcMonitor.bottom - miInfo->rcWork.bottom,
277.247 - miInfo->rcMonitor.right - miInfo->rcWork.right);
277.248 - }
277.249 + rect.top,
277.250 + rect.left,
277.251 + rect.bottom,
277.252 + rect.right);
277.253 }
277.254
277.255 if (safe_ExceptionOccurred(env)) {
278.1 --- a/src/windows/native/sun/windows/awt_Toolkit.h Thu Apr 16 17:42:00 2009 +0100
278.2 +++ b/src/windows/native/sun/windows/awt_Toolkit.h Thu Apr 16 19:10:32 2009 -0700
278.3 @@ -210,6 +210,8 @@
278.4 LPARAM lParam);
278.5 static LRESULT CALLBACK ForegroundIdleFilter(int code, WPARAM wParam,
278.6 LPARAM lParam);
278.7 + static LRESULT CALLBACK MouseLowLevelHook(int code, WPARAM wParam,
278.8 + LPARAM lParam);
278.9
278.10 INLINE static AwtToolkit& GetInstance() { return theInstance; }
278.11 INLINE void SetPeer(JNIEnv *env, jobject wToolkit) {
278.12 @@ -311,6 +313,30 @@
278.13 HICON GetAwtIcon();
278.14 HICON GetAwtIconSm();
278.15
278.16 + // Calculate a wave-like value out of the integer 'value' and
278.17 + // the specified period.
278.18 + // The argument 'value' is an integer 0, 1, 2, ... *infinity*.
278.19 + //
278.20 + // Examples:
278.21 + // Period == 3
278.22 + // Generated sequence: 0 1 2 1 0 .....
278.23 + //
278.24 + // Period == 4
278.25 + // Generated sequence: 0 1 2 3 2 1 0 .....
278.26 + static inline UINT CalculateWave(UINT value, const UINT period) {
278.27 + if (period < 2) {
278.28 + return 0;
278.29 + }
278.30 + // -2 is necessary to avoid repeating extreme values (0 and period-1)
278.31 + value %= period * 2 -2;
278.32 + if (value >= period) {
278.33 + value = period * 2 -2 - value;
278.34 + }
278.35 + return value;
278.36 + }
278.37 +
278.38 + HICON GetSecurityWarningIcon(UINT index, UINT w, UINT h);
278.39 +
278.40 /* Turns on/off dialog modality for the system. */
278.41 INLINE AwtDialog* SetModal(AwtDialog* frame) {
278.42 AwtDialog* previousDialog = m_pModalDialog;
278.43 @@ -368,6 +394,7 @@
278.44 BOOL m_mouseDown;
278.45
278.46 HHOOK m_hGetMessageHook;
278.47 + HHOOK m_hMouseLLHook;
278.48 UINT_PTR m_timer;
278.49
278.50 class AwtCmdIDList* m_cmdIDs;
278.51 @@ -411,6 +438,24 @@
278.52 public:
278.53 static void SetEnv(JNIEnv *env);
278.54 static JNIEnv* GetEnv();
278.55 +
278.56 + static BOOL GetScreenInsets(int screenNum, RECT * rect);
278.57 +
278.58 + // If the DWM is active, this function uses
278.59 + // DwmGetWindowAttribute()/DWMWA_EXTENDED_FRAME_BOUNDS.
278.60 + // Otherwise, fall back to regular ::GetWindowRect().
278.61 + // See 6711576 for more details.
278.62 + static void GetWindowRect(HWND hWnd, LPRECT lpRect);
278.63 +
278.64 + private:
278.65 + // The window handle of a toplevel window last seen under the mouse cursor.
278.66 + // See MouseLowLevelHook() for details.
278.67 + HWND m_lastWindowUnderMouse;
278.68 + public:
278.69 + HWND GetWindowUnderMouse() { return m_lastWindowUnderMouse; }
278.70 +
278.71 + void InstallMouseLowLevelHook();
278.72 + void UninstallMouseLowLevelHook();
278.73 };
278.74
278.75 /*
279.1 --- a/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp Thu Apr 16 17:42:00 2009 +0100
279.2 +++ b/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp Thu Apr 16 19:10:32 2009 -0700
279.3 @@ -29,6 +29,7 @@
279.4 #include "awt_Win32GraphicsDevice.h"
279.5 #include "Devices.h"
279.6 #include "WindowsFlags.h"
279.7 +#include "DllUtil.h"
279.8
279.9 BOOL DWMIsCompositionEnabled();
279.10
279.11 @@ -89,13 +90,8 @@
279.12 /**
279.13 * Returns true if dwm composition is enabled, false if it is not applicable
279.14 * (if the OS is not Vista) or dwm composition is disabled.
279.15 - *
279.16 - * Note: since DWM composition state changes are very rare we load/unload the
279.17 - * dll on every change.
279.18 */
279.19 BOOL DWMIsCompositionEnabled() {
279.20 - typedef HRESULT (WINAPI DwmIsCompositionEnabledFunc)(BOOL*);
279.21 -
279.22 // cheaper to check than whether it's vista or not
279.23 if (dwmIsCompositionEnabled != DWM_COMP_UNDEFINED) {
279.24 return (BOOL)dwmIsCompositionEnabled;
279.25 @@ -107,32 +103,22 @@
279.26 }
279.27
279.28 BOOL bRes = FALSE;
279.29 - HMODULE hDwmApiDll = ::LoadLibrary(TEXT("dwmapi.dll"));
279.30
279.31 - if (hDwmApiDll != NULL) {
279.32 - DwmIsCompositionEnabledFunc *lpDwmIsCompEnabled =
279.33 - (DwmIsCompositionEnabledFunc*)
279.34 - GetProcAddress(hDwmApiDll, "DwmIsCompositionEnabled");
279.35 - if (lpDwmIsCompEnabled != NULL) {
279.36 - BOOL bEnabled;
279.37 - HRESULT res = lpDwmIsCompEnabled(&bEnabled);
279.38 - if (SUCCEEDED(res)) {
279.39 - bRes = bEnabled;
279.40 - J2dTraceLn1(J2D_TRACE_VERBOSE, " composition enabled: %d",bRes);
279.41 - } else {
279.42 - J2dTraceLn1(J2D_TRACE_ERROR,
279.43 - "IsDWMCompositionEnabled: error %x when detecting"\
279.44 - "if composition is enabled", res);
279.45 - }
279.46 + try {
279.47 + BOOL bEnabled;
279.48 + HRESULT res = DwmAPI::DwmIsCompositionEnabled(&bEnabled);
279.49 + if (SUCCEEDED(res)) {
279.50 + bRes = bEnabled;
279.51 + J2dTraceLn1(J2D_TRACE_VERBOSE, " composition enabled: %d",bRes);
279.52 } else {
279.53 - J2dTraceLn(J2D_TRACE_ERROR,
279.54 - "IsDWMCompositionEnabled: no DwmIsCompositionEnabled() "\
279.55 - "in dwmapi.dll");
279.56 + J2dTraceLn1(J2D_TRACE_ERROR,
279.57 + "IsDWMCompositionEnabled: error %x when detecting"\
279.58 + "if composition is enabled", res);
279.59 }
279.60 - ::FreeLibrary(hDwmApiDll);
279.61 - } else {
279.62 + } catch (const DllUtil::Exception &) {
279.63 J2dTraceLn(J2D_TRACE_ERROR,
279.64 - "IsDWMCompositionEnabled: error opening dwmapi.dll");
279.65 + "IsDWMCompositionEnabled: no DwmIsCompositionEnabled() "\
279.66 + "in dwmapi.dll or dwmapi.dll cannot be loaded");
279.67 }
279.68
279.69 dwmIsCompositionEnabled = bRes;
280.1 --- a/src/windows/native/sun/windows/awt_Window.cpp Thu Apr 16 17:42:00 2009 +0100
280.2 +++ b/src/windows/native/sun/windows/awt_Window.cpp Thu Apr 16 19:10:32 2009 -0700
280.3 @@ -1,5 +1,5 @@
280.4 /*
280.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
280.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
280.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
280.8 *
280.9 * This code is free software; you can redistribute it and/or modify it
280.10 @@ -25,9 +25,12 @@
280.11
280.12 #include "awt.h"
280.13
280.14 +#include <jlong.h>
280.15 +
280.16 #include "awt_Component.h"
280.17 #include "awt_Container.h"
280.18 #include "awt_Frame.h"
280.19 +#include "awt_Dialog.h"
280.20 #include "awt_Insets.h"
280.21 #include "awt_Panel.h"
280.22 #include "awt_Toolkit.h"
280.23 @@ -35,6 +38,7 @@
280.24 #include "awt_Win32GraphicsDevice.h"
280.25 #include "awt_BitmapUtil.h"
280.26 #include "awt_IconCursor.h"
280.27 +#include "ComCtl32Util.h"
280.28
280.29 #include "java_awt_Insets.h"
280.30 #include <java_awt_Container.h>
280.31 @@ -88,7 +92,6 @@
280.32 jint x, y;
280.33 jint w, h;
280.34 };
280.35 -
280.36 // struct for _SetIconImagesData
280.37 struct SetIconImagesDataStruct {
280.38 jobject window;
280.39 @@ -97,7 +100,6 @@
280.40 jintArray smallIconRaster;
280.41 jint smw, smh;
280.42 };
280.43 -
280.44 // struct for _SetMinSize() method
280.45 // and other methods setting sizes
280.46 struct SizeStruct {
280.47 @@ -114,6 +116,34 @@
280.48 jobject window;
280.49 jlong blockerHWnd;
280.50 };
280.51 +// struct for _SetOpacity() method
280.52 +struct OpacityStruct {
280.53 + jobject window;
280.54 + jint iOpacity;
280.55 +};
280.56 +// struct for _SetOpaque() method
280.57 +struct OpaqueStruct {
280.58 + jobject window;
280.59 + jboolean isOpaque;
280.60 +};
280.61 +// struct for _UpdateWindow() method
280.62 +struct UpdateWindowStruct {
280.63 + jobject window;
280.64 + jintArray data;
280.65 + HBITMAP hBitmap;
280.66 + jint width, height;
280.67 +};
280.68 +// Struct for _RequestWindowFocus() method
280.69 +struct RequestWindowFocusStruct {
280.70 + jobject component;
280.71 + jboolean isMouseEventCause;
280.72 +};
280.73 +// struct for _RepositionSecurityWarning() method
280.74 +struct RepositionSecurityWarningStruct {
280.75 + jobject window;
280.76 +};
280.77 +
280.78 +
280.79 /************************************************************************
280.80 * AwtWindow fields
280.81 */
280.82 @@ -121,17 +151,23 @@
280.83 jfieldID AwtWindow::warningStringID;
280.84 jfieldID AwtWindow::locationByPlatformID;
280.85 jfieldID AwtWindow::autoRequestFocusID;
280.86 +jfieldID AwtWindow::securityWarningWidthID;
280.87 +jfieldID AwtWindow::securityWarningHeightID;
280.88
280.89 jfieldID AwtWindow::sysXID;
280.90 jfieldID AwtWindow::sysYID;
280.91 jfieldID AwtWindow::sysWID;
280.92 jfieldID AwtWindow::sysHID;
280.93
280.94 +jmethodID AwtWindow::getWarningStringMID;
280.95 +jmethodID AwtWindow::calculateSecurityWarningPositionMID;
280.96 +
280.97 int AwtWindow::ms_instanceCounter = 0;
280.98 HHOOK AwtWindow::ms_hCBTFilter;
280.99 AwtWindow * AwtWindow::m_grabbedWindow = NULL;
280.100 HWND AwtWindow::sm_retainingHierarchyZOrderInShow = NULL;
280.101 BOOL AwtWindow::sm_resizing = FALSE;
280.102 +UINT AwtWindow::untrustedWindowsCounter = 0;
280.103
280.104 /************************************************************************
280.105 * AwtWindow class methods
280.106 @@ -162,10 +198,34 @@
280.107 ::SetWindowsHookEx(WH_CBT, (HOOKPROC)AwtWindow::CBTFilter,
280.108 0, AwtToolkit::MainThread());
280.109 }
280.110 +
280.111 + m_opaque = TRUE;
280.112 + m_opacity = 0xff;
280.113 +
280.114 +
280.115 + warningString = NULL;
280.116 + warningWindow = NULL;
280.117 + securityTooltipWindow = NULL;
280.118 + securityWarningAnimationStage = 0;
280.119 + currentWmSizeState = SIZE_RESTORED;
280.120 +
280.121 + hContentBitmap = NULL;
280.122 +
280.123 + ::InitializeCriticalSection(&contentBitmapCS);
280.124 }
280.125
280.126 AwtWindow::~AwtWindow()
280.127 {
280.128 + if (warningString != NULL) {
280.129 + delete [] warningString;
280.130 + }
280.131 + ::EnterCriticalSection(&contentBitmapCS);
280.132 + if (hContentBitmap != NULL) {
280.133 + ::DeleteObject(hContentBitmap);
280.134 + hContentBitmap = NULL;
280.135 + }
280.136 + ::LeaveCriticalSection(&contentBitmapCS);
280.137 + ::DeleteCriticalSection(&contentBitmapCS);
280.138 }
280.139
280.140 void AwtWindow::Dispose()
280.141 @@ -204,10 +264,10 @@
280.142 }
280.143 m_grabbed = TRUE;
280.144 m_grabbedWindow = this;
280.145 - if (sm_focusedWindow == NULL && IsFocusableWindow()) {
280.146 + if (AwtComponent::GetFocusedWindow() == NULL && IsFocusableWindow()) {
280.147 // we shouldn't perform grab in this case (see 4841881 & 6539458)
280.148 Ungrab();
280.149 - } else if (GetHWnd() != sm_focusedWindow) {
280.150 + } else if (GetHWnd() != AwtComponent::GetFocusedWindow()) {
280.151 _ToFront(env->NewGlobalRef(GetPeer(env)));
280.152 // Global ref was deleted in _ToFront
280.153 }
280.154 @@ -301,12 +361,40 @@
280.155 return mrDoDefault;
280.156 }
280.157
280.158 +void AwtWindow::RepositionSecurityWarning(JNIEnv *env)
280.159 +{
280.160 + RECT rect;
280.161 + CalculateWarningWindowBounds(env, &rect);
280.162 +
280.163 + ::SetWindowPos(warningWindow, HWND_NOTOPMOST,
280.164 + rect.left, rect.top,
280.165 + rect.right - rect.left, rect.bottom - rect.top,
280.166 + SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOZORDER
280.167 + );
280.168 +}
280.169 +
280.170 MsgRouting AwtWindow::WmWindowPosChanged(LPARAM windowPos) {
280.171 - if (IsRetainingHierarchyZOrder() && ((WINDOWPOS *)windowPos)->flags & SWP_SHOWWINDOW) {
280.172 + WINDOWPOS * wp = (WINDOWPOS *)windowPos;
280.173 +
280.174 + if (IsRetainingHierarchyZOrder() && wp->flags & SWP_SHOWWINDOW) {
280.175 // By this time all the windows from the hierarchy are already notified about z-order change.
280.176 // Thus we may and we should reset the trigger in order not to affect other changes.
280.177 sm_retainingHierarchyZOrderInShow = NULL;
280.178 }
280.179 +
280.180 + // Reposition the warning window
280.181 + if (IsUntrusted() && warningWindow != NULL) {
280.182 + if (wp->flags & SWP_HIDEWINDOW) {
280.183 + UpdateSecurityWarningVisibility();
280.184 + }
280.185 +
280.186 + RepositionSecurityWarning((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2));
280.187 +
280.188 + if (wp->flags & SWP_SHOWWINDOW) {
280.189 + UpdateSecurityWarningVisibility();
280.190 + }
280.191 + }
280.192 +
280.193 return mrDoDefault;
280.194 }
280.195
280.196 @@ -326,21 +414,597 @@
280.197 lpwc->cbWndExtra = DLGWINDOWEXTRA;
280.198 }
280.199
280.200 +bool AwtWindow::IsWarningWindow(HWND hWnd)
280.201 +{
280.202 + const UINT len = 128;
280.203 + TCHAR windowClassName[len];
280.204 +
280.205 + ::RealGetWindowClass(hWnd, windowClassName, len);
280.206 + return 0 == _tcsncmp(windowClassName,
280.207 + AwtWindow::GetWarningWindowClassName(), len);
280.208 +}
280.209 +
280.210 LRESULT CALLBACK AwtWindow::CBTFilter(int nCode, WPARAM wParam, LPARAM lParam)
280.211 {
280.212 if (nCode == HCBT_ACTIVATE || nCode == HCBT_SETFOCUS) {
280.213 - AwtComponent *comp = AwtComponent::GetComponent((HWND)wParam);
280.214 -
280.215 - if (comp != NULL && comp->IsTopLevel()) {
280.216 - AwtWindow* win = (AwtWindow*)comp;
280.217 - if (!win->IsFocusableWindow() || win->m_filterFocusAndActivation) {
280.218 - return 1; // Don't change focus/activation.
280.219 + HWND hWnd = (HWND)wParam;
280.220 + AwtComponent *comp = AwtComponent::GetComponent(hWnd);
280.221 +
280.222 + if (comp == NULL) {
280.223 + // Check if it's a security warning icon
280.224 + // See: 5091224, 6181725, 6732583
280.225 + if (AwtWindow::IsWarningWindow(hWnd)) {
280.226 + return 1;
280.227 + }
280.228 + } else {
280.229 + if (comp->IsTopLevel()) {
280.230 + AwtWindow* win = (AwtWindow*)comp;
280.231 +
280.232 + if (!win->IsFocusableWindow() ||
280.233 + win->m_filterFocusAndActivation)
280.234 + {
280.235 + return 1; // Don't change focus/activation.
280.236 + }
280.237 }
280.238 }
280.239 }
280.240 return ::CallNextHookEx(AwtWindow::ms_hCBTFilter, nCode, wParam, lParam);
280.241 }
280.242
280.243 +void AwtWindow::InitSecurityWarningSize(JNIEnv *env)
280.244 +{
280.245 + warningWindowWidth = ::GetSystemMetrics(SM_CXSMICON);
280.246 + warningWindowHeight = ::GetSystemMetrics(SM_CYSMICON);
280.247 +
280.248 + jobject target = GetTarget(env);
280.249 +
280.250 + env->SetIntField(target, AwtWindow::securityWarningWidthID,
280.251 + warningWindowWidth);
280.252 + env->SetIntField(target, AwtWindow::securityWarningHeightID,
280.253 + warningWindowHeight);
280.254 +
280.255 + env->DeleteLocalRef(target);
280.256 +}
280.257 +
280.258 +void AwtWindow::CreateHWnd(JNIEnv *env, LPCWSTR title,
280.259 + DWORD windowStyle,
280.260 + DWORD windowExStyle,
280.261 + int x, int y, int w, int h,
280.262 + HWND hWndParent, HMENU hMenu,
280.263 + COLORREF colorForeground,
280.264 + COLORREF colorBackground,
280.265 + jobject peer)
280.266 +{
280.267 + // Retrieve the warning string
280.268 + // Note: we need to get it before CreateHWnd() happens because
280.269 + // the isUntrusted() method may be invoked while the HWND
280.270 + // is being created in response to some window messages.
280.271 + jobject target = env->GetObjectField(peer, AwtObject::targetID);
280.272 + jstring javaWarningString =
280.273 + (jstring)env->CallObjectMethod(target, AwtWindow::getWarningStringMID);
280.274 +
280.275 + if (javaWarningString != NULL) {
280.276 + size_t length = env->GetStringLength(javaWarningString) + 1;
280.277 + warningString = new WCHAR[length];
280.278 + env->GetStringRegion(javaWarningString, 0,
280.279 + static_cast<jsize>(length - 1), warningString);
280.280 + warningString[length-1] = L'\0';
280.281 +
280.282 + env->DeleteLocalRef(javaWarningString);
280.283 + }
280.284 + env->DeleteLocalRef(target);
280.285 +
280.286 + AwtCanvas::CreateHWnd(env, title,
280.287 + windowStyle,
280.288 + windowExStyle,
280.289 + x, y, w, h,
280.290 + hWndParent, hMenu,
280.291 + colorForeground,
280.292 + colorBackground,
280.293 + peer);
280.294 +
280.295 + // Now we need to create the warning window.
280.296 + CreateWarningWindow(env);
280.297 +}
280.298 +
280.299 +void AwtWindow::CreateWarningWindow(JNIEnv *env)
280.300 +{
280.301 + if (!IsUntrusted()) {
280.302 + return;
280.303 + }
280.304 +
280.305 + if (++AwtWindow::untrustedWindowsCounter == 1) {
280.306 + AwtToolkit::GetInstance().InstallMouseLowLevelHook();
280.307 + }
280.308 +
280.309 + InitSecurityWarningSize(env);
280.310 +
280.311 + RECT rect;
280.312 + CalculateWarningWindowBounds(env, &rect);
280.313 +
280.314 + RegisterWarningWindowClass();
280.315 + warningWindow = ::CreateWindowEx(
280.316 + WS_EX_NOACTIVATE | WS_EX_LAYERED,
280.317 + GetWarningWindowClassName(),
280.318 + warningString,
280.319 + WS_POPUP,
280.320 + rect.left, rect.top,
280.321 + rect.right - rect.left, rect.bottom - rect.top,
280.322 + GetHWnd(), // owner
280.323 + NULL, // menu
280.324 + AwtToolkit::GetInstance().GetModuleHandle(),
280.325 + NULL // lParam
280.326 + );
280.327 + if (warningWindow == NULL) {
280.328 + //XXX: actually this is bad... We didn't manage to create the widow.
280.329 + return;
280.330 + }
280.331 +
280.332 + HICON hIcon = GetSecurityWarningIcon();
280.333 +
280.334 + ICONINFO ii;
280.335 + ::GetIconInfo(hIcon, &ii);
280.336 +
280.337 + //Note: we assume that every security icon has exactly the same shape.
280.338 + HRGN rgn = BitmapUtil::BitmapToRgn(ii.hbmColor);
280.339 + if (rgn) {
280.340 + ::SetWindowRgn(warningWindow, rgn, TRUE);
280.341 + }
280.342 +
280.343 + // Now we need to create the tooltip control for this window.
280.344 + if (!ComCtl32Util::GetInstance().IsToolTipControlInitialized()) {
280.345 + return;
280.346 + }
280.347 +
280.348 + securityTooltipWindow = ::CreateWindowEx(
280.349 + WS_EX_TOPMOST,
280.350 + TOOLTIPS_CLASS,
280.351 + NULL,
280.352 + WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
280.353 + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
280.354 + warningWindow,
280.355 + NULL,
280.356 + AwtToolkit::GetInstance().GetModuleHandle(),
280.357 + NULL
280.358 + );
280.359 +
280.360 + ::SetWindowPos(securityTooltipWindow,
280.361 + HWND_TOPMOST, 0, 0, 0, 0,
280.362 + SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
280.363 +
280.364 +
280.365 + // We currently don't expect changing the size of the window,
280.366 + // hence we may not care of updating the TOOL position/size.
280.367 + ::GetClientRect(warningWindow, &rect);
280.368 +
280.369 + TOOLINFO ti;
280.370 +
280.371 + ti.cbSize = sizeof(ti);
280.372 + ti.uFlags = TTF_SUBCLASS;
280.373 + ti.hwnd = warningWindow;
280.374 + ti.hinst = AwtToolkit::GetInstance().GetModuleHandle();
280.375 + ti.uId = 0;
280.376 + ti.lpszText = warningString;
280.377 + ti.rect.left = rect.left;
280.378 + ti.rect.top = rect.top;
280.379 + ti.rect.right = rect.right;
280.380 + ti.rect.bottom = rect.bottom;
280.381 +
280.382 + ::SendMessage(securityTooltipWindow, TTM_ADDTOOL,
280.383 + 0, (LPARAM) (LPTOOLINFO) &ti);
280.384 +}
280.385 +
280.386 +void AwtWindow::DestroyWarningWindow()
280.387 +{
280.388 + if (!IsUntrusted()) {
280.389 + return;
280.390 + }
280.391 + if (--AwtWindow::untrustedWindowsCounter == 0) {
280.392 + AwtToolkit::GetInstance().UninstallMouseLowLevelHook();
280.393 + }
280.394 + if (warningWindow != NULL) {
280.395 + // Note that the warningWindow is an owned window, and hence
280.396 + // it would be destroyed automatically. However, the window
280.397 + // class may only be unregistered if there's no any single
280.398 + // window left using this class. Thus, we're destroying the
280.399 + // warning window manually. Note that the tooltip window
280.400 + // will be destroyed automatically because it's an owned
280.401 + // window as well.
280.402 + ::DestroyWindow(warningWindow);
280.403 + warningWindow = NULL;
280.404 + securityTooltipWindow = NULL;
280.405 + UnregisterWarningWindowClass();
280.406 + }
280.407 +}
280.408 +
280.409 +void AwtWindow::DestroyHWnd()
280.410 +{
280.411 + DestroyWarningWindow();
280.412 + AwtCanvas::DestroyHWnd();
280.413 +}
280.414 +
280.415 +LPCTSTR AwtWindow::GetWarningWindowClassName()
280.416 +{
280.417 + return TEXT("SunAwtWarningWindow");
280.418 +}
280.419 +
280.420 +void AwtWindow::FillWarningWindowClassInfo(WNDCLASS *lpwc)
280.421 +{
280.422 + lpwc->style = 0L;
280.423 + lpwc->lpfnWndProc = (WNDPROC)WarningWindowProc;
280.424 + lpwc->cbClsExtra = 0;
280.425 + lpwc->cbWndExtra = 0;
280.426 + lpwc->hInstance = AwtToolkit::GetInstance().GetModuleHandle(),
280.427 + lpwc->hIcon = AwtToolkit::GetInstance().GetAwtIcon();
280.428 + lpwc->hCursor = ::LoadCursor(NULL, IDC_ARROW);
280.429 + lpwc->hbrBackground = NULL;
280.430 + lpwc->lpszMenuName = NULL;
280.431 + lpwc->lpszClassName = AwtWindow::GetWarningWindowClassName();
280.432 +}
280.433 +
280.434 +void AwtWindow::RegisterWarningWindowClass()
280.435 +{
280.436 + WNDCLASS wc;
280.437 +
280.438 + ::ZeroMemory(&wc, sizeof(wc));
280.439 +
280.440 + if (!::GetClassInfo(AwtToolkit::GetInstance().GetModuleHandle(),
280.441 + AwtWindow::GetWarningWindowClassName(), &wc))
280.442 + {
280.443 + AwtWindow::FillWarningWindowClassInfo(&wc);
280.444 + ATOM atom = ::RegisterClass(&wc);
280.445 + DASSERT(atom != 0);
280.446 + }
280.447 +}
280.448 +
280.449 +void AwtWindow::UnregisterWarningWindowClass()
280.450 +{
280.451 + ::UnregisterClass(AwtWindow::GetWarningWindowClassName(), AwtToolkit::GetInstance().GetModuleHandle());
280.452 +}
280.453 +
280.454 +HICON AwtWindow::GetSecurityWarningIcon()
280.455 +{
280.456 + HICON ico = AwtToolkit::GetInstance().GetSecurityWarningIcon(securityWarningAnimationStage,
280.457 + warningWindowWidth, warningWindowHeight);
280.458 + return ico;
280.459 +}
280.460 +
280.461 +// This function calculates the bounds of the warning window and stores them
280.462 +// into the RECT structure pointed by the argument rect.
280.463 +void AwtWindow::CalculateWarningWindowBounds(JNIEnv *env, LPRECT rect)
280.464 +{
280.465 + RECT windowBounds;
280.466 + AwtToolkit::GetWindowRect(GetHWnd(), &windowBounds);
280.467 +
280.468 + jobject target = GetTarget(env);
280.469 + jobject point2D = env->CallObjectMethod(target,
280.470 + calculateSecurityWarningPositionMID,
280.471 + (jdouble)windowBounds.left, (jdouble)windowBounds.top,
280.472 + (jdouble)(windowBounds.right - windowBounds.left),
280.473 + (jdouble)(windowBounds.bottom - windowBounds.top));
280.474 + env->DeleteLocalRef(target);
280.475 +
280.476 + static jclass point2DClassID = NULL;
280.477 + static jmethodID point2DGetXMID = NULL;
280.478 + static jmethodID point2DGetYMID = NULL;
280.479 +
280.480 + if (point2DClassID == NULL) {
280.481 + jclass point2DClassIDLocal = env->FindClass("java/awt/geom/Point2D");
280.482 + point2DClassID = (jclass)env->NewGlobalRef(point2DClassIDLocal);
280.483 + env->DeleteLocalRef(point2DClassIDLocal);
280.484 + }
280.485 +
280.486 + if (point2DGetXMID == NULL) {
280.487 + point2DGetXMID = env->GetMethodID(point2DClassID, "getX", "()D");
280.488 + }
280.489 + if (point2DGetYMID == NULL) {
280.490 + point2DGetYMID = env->GetMethodID(point2DClassID, "getY", "()D");
280.491 + }
280.492 +
280.493 +
280.494 + int x = (int)env->CallDoubleMethod(point2D, point2DGetXMID);
280.495 + int y = (int)env->CallDoubleMethod(point2D, point2DGetYMID);
280.496 +
280.497 + env->DeleteLocalRef(point2D);
280.498 +
280.499 + //Make sure the warning is not far from the window bounds
280.500 + x = max(x, windowBounds.left - (int)warningWindowWidth - 2);
280.501 + x = min(x, windowBounds.right + (int)warningWindowWidth + 2);
280.502 +
280.503 + y = max(y, windowBounds.top - (int)warningWindowHeight - 2);
280.504 + y = min(y, windowBounds.bottom + (int)warningWindowHeight + 2);
280.505 +
280.506 + // Now make sure the warning window is visible on the screen
280.507 + HMONITOR hmon = MonitorFromWindow(GetHWnd(), MONITOR_DEFAULTTOPRIMARY);
280.508 + DASSERT(hmon != NULL);
280.509 +
280.510 + RECT monitorBounds;
280.511 + RECT monitorInsets;
280.512 +
280.513 + MonitorBounds(hmon, &monitorBounds);
280.514 + if (!AwtToolkit::GetScreenInsets(m_screenNum, &monitorInsets)) {
280.515 + ::ZeroMemory(&monitorInsets, sizeof(monitorInsets));
280.516 + }
280.517 +
280.518 + x = max(x, monitorBounds.left + monitorInsets.left);
280.519 + x = min(x, monitorBounds.right - monitorInsets.right - (int)warningWindowWidth);
280.520 +
280.521 + y = max(y, monitorBounds.top + monitorInsets.top);
280.522 + y = min(y, monitorBounds.bottom - monitorInsets.bottom - (int)warningWindowHeight);
280.523 +
280.524 + rect->left = x;
280.525 + rect->top = y;
280.526 + rect->right = rect->left + warningWindowWidth;
280.527 + rect->bottom = rect->top + warningWindowHeight;
280.528 +}
280.529 +
280.530 +LRESULT CALLBACK AwtWindow::WarningWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
280.531 +{
280.532 + switch (uMsg) {
280.533 + case WM_PAINT:
280.534 + PaintWarningWindow(hwnd);
280.535 + return 0;
280.536 +
280.537 + case WM_MOUSEACTIVATE:
280.538 + {
280.539 + // Retrive the owner of the warning window.
280.540 + HWND javaWindow = ::GetParent(hwnd);
280.541 + if (javaWindow) {
280.542 + // If the window is blocked by a modal dialog, substitute
280.543 + // its handle with the topmost blocker.
280.544 + HWND topmostBlocker = GetTopmostModalBlocker(javaWindow);
280.545 + if (::IsWindow(topmostBlocker)) {
280.546 + javaWindow = topmostBlocker;
280.547 + }
280.548 +
280.549 + ::BringWindowToTop(javaWindow);
280.550 +
280.551 + AwtWindow * window =
280.552 + (AwtWindow*)AwtComponent::GetComponent(javaWindow);
280.553 + if (window == NULL) {
280.554 + // Quite unlikely to go into here, but it's way better
280.555 + // than getting a crash.
280.556 + ::SetForegroundWindow(javaWindow);
280.557 + } else {
280.558 + // Activate the window if it is focusable and inactive
280.559 + if (window->IsFocusableWindow() &&
280.560 + javaWindow != ::GetActiveWindow()) {
280.561 + ::SetForegroundWindow(javaWindow);
280.562 + } else {
280.563 + // ...otherwise just start the animation.
280.564 + window->StartSecurityAnimation(akShow);
280.565 + }
280.566 + }
280.567 +
280.568 + // In every case if there's a top-most blocker, we need to
280.569 + // enable modal animation.
280.570 + if (::IsWindow(topmostBlocker)) {
280.571 + AwtDialog::AnimateModalBlocker(topmostBlocker);
280.572 + }
280.573 + }
280.574 + return MA_NOACTIVATEANDEAT;
280.575 + }
280.576 + }
280.577 + return ::DefWindowProc(hwnd, uMsg, wParam, lParam);
280.578 +}
280.579 +
280.580 +void AwtWindow::PaintWarningWindow(HWND warningWindow)
280.581 +{
280.582 + RECT updateRect;
280.583 +
280.584 + if (!::GetUpdateRect(warningWindow, &updateRect, FALSE)) {
280.585 + // got nothing to update
280.586 + return;
280.587 + }
280.588 +
280.589 + PAINTSTRUCT ps;
280.590 + HDC hdc = ::BeginPaint(warningWindow, &ps);
280.591 + if (hdc == NULL) {
280.592 + // indicates an error
280.593 + return;
280.594 + }
280.595 +
280.596 + PaintWarningWindow(warningWindow, hdc);
280.597 +
280.598 + ::EndPaint(warningWindow, &ps);
280.599 +}
280.600 +
280.601 +void AwtWindow::PaintWarningWindow(HWND warningWindow, HDC hdc)
280.602 +{
280.603 + HWND javaWindow = ::GetParent(warningWindow);
280.604 +
280.605 + AwtWindow * window = (AwtWindow*)AwtComponent::GetComponent(javaWindow);
280.606 + if (window == NULL) {
280.607 + return;
280.608 + }
280.609 +
280.610 + ::DrawIconEx(hdc, 0, 0, window->GetSecurityWarningIcon(),
280.611 + window->warningWindowWidth, window->warningWindowHeight,
280.612 + 0, NULL, DI_NORMAL);
280.613 +}
280.614 +
280.615 +static const UINT_PTR IDT_AWT_SECURITYANIMATION = 0x102;
280.616 +
280.617 +// Approximately 6 times a second. 0.75 seconds total.
280.618 +static const UINT securityAnimationTimerElapse = 150;
280.619 +static const UINT securityAnimationMaxIterations = 5;
280.620 +
280.621 +void AwtWindow::RepaintWarningWindow()
280.622 +{
280.623 + HDC hdc = ::GetDC(warningWindow);
280.624 + PaintWarningWindow(warningWindow, hdc);
280.625 + ::ReleaseDC(warningWindow, hdc);
280.626 +}
280.627 +
280.628 +void AwtWindow::StartSecurityAnimation(AnimationKind kind)
280.629 +{
280.630 + if (!IsUntrusted()) {
280.631 + return;
280.632 + }
280.633 + if (warningWindow == NULL) {
280.634 + return;
280.635 + }
280.636 +
280.637 + securityAnimationKind = kind;
280.638 +
280.639 + securityWarningAnimationStage = 1;
280.640 + ::SetTimer(GetHWnd(), IDT_AWT_SECURITYANIMATION,
280.641 + securityAnimationTimerElapse, NULL);
280.642 +
280.643 + if (securityAnimationKind == akShow) {
280.644 + ::SetWindowPos(warningWindow, HWND_NOTOPMOST, 0, 0, 0, 0,
280.645 + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE |
280.646 + SWP_SHOWWINDOW);
280.647 +
280.648 + ::SetLayeredWindowAttributes(warningWindow, RGB(0, 0, 0),
280.649 + 0xFF, LWA_ALPHA);
280.650 + ::RedrawWindow(warningWindow, NULL, NULL,
280.651 + RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
280.652 + }
280.653 +}
280.654 +
280.655 +void AwtWindow::StopSecurityAnimation()
280.656 +{
280.657 + if (!IsUntrusted()) {
280.658 + return;
280.659 + }
280.660 + if (warningWindow == NULL) {
280.661 + return;
280.662 + }
280.663 +
280.664 + securityWarningAnimationStage = 0;
280.665 + ::KillTimer(GetHWnd(), IDT_AWT_SECURITYANIMATION);
280.666 +
280.667 + switch (securityAnimationKind) {
280.668 + case akHide:
280.669 + case akPreHide:
280.670 + ::SetWindowPos(warningWindow, HWND_NOTOPMOST, 0, 0, 0, 0,
280.671 + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE |
280.672 + SWP_HIDEWINDOW);
280.673 + break;
280.674 + case akShow:
280.675 + RepaintWarningWindow();
280.676 + break;
280.677 + }
280.678 +
280.679 + securityAnimationKind = akNone;
280.680 +}
280.681 +
280.682 +MsgRouting AwtWindow::WmTimer(UINT_PTR timerID)
280.683 +{
280.684 + if (timerID != IDT_AWT_SECURITYANIMATION) {
280.685 + return mrPassAlong;
280.686 + }
280.687 +
280.688 + if (securityWarningAnimationStage == 0) {
280.689 + return mrConsume;
280.690 + }
280.691 +
280.692 + securityWarningAnimationStage++;
280.693 + if (securityWarningAnimationStage >= securityAnimationMaxIterations) {
280.694 + if (securityAnimationKind == akPreHide) {
280.695 + // chain real hiding
280.696 + StartSecurityAnimation(akHide);
280.697 + } else {
280.698 + StopSecurityAnimation();
280.699 + }
280.700 + } else {
280.701 + switch (securityAnimationKind) {
280.702 + case akHide:
280.703 + {
280.704 + BYTE opacity = ((int)0xFF *
280.705 + (securityAnimationMaxIterations -
280.706 + securityWarningAnimationStage)) /
280.707 + securityAnimationMaxIterations;
280.708 + ::SetLayeredWindowAttributes(warningWindow,
280.709 + RGB(0, 0, 0), opacity, LWA_ALPHA);
280.710 + }
280.711 + break;
280.712 + case akShow:
280.713 + case akNone: // quite unlikely, but quite safe
280.714 + RepaintWarningWindow();
280.715 + break;
280.716 + }
280.717 + }
280.718 +
280.719 + return mrConsume;
280.720 +}
280.721 +
280.722 +// The security warning is visible if:
280.723 +// 1. The window has the keyboard window focus, OR
280.724 +// 2. The mouse pointer is located within the window bounds,
280.725 +// or within the security warning icon.
280.726 +void AwtWindow::UpdateSecurityWarningVisibility()
280.727 +{
280.728 + if (!IsUntrusted()) {
280.729 + return;
280.730 + }
280.731 + if (warningWindow == NULL) {
280.732 + return;
280.733 + }
280.734 +
280.735 + bool show = false;
280.736 +
280.737 + if (IsVisible() && currentWmSizeState != SIZE_MINIMIZED) {
280.738 + if (AwtComponent::GetFocusedWindow() == GetHWnd()) {
280.739 + show = true;
280.740 + }
280.741 +
280.742 + HWND hwnd = AwtToolkit::GetInstance().GetWindowUnderMouse();
280.743 + if (hwnd == GetHWnd()) {
280.744 + show = true;
280.745 + }
280.746 + if (hwnd == warningWindow) {
280.747 + show = true;
280.748 + }
280.749 + }
280.750 +
280.751 + if (show && (!::IsWindowVisible(warningWindow) ||
280.752 + securityAnimationKind == akHide ||
280.753 + securityAnimationKind == akPreHide)) {
280.754 + StartSecurityAnimation(akShow);
280.755 + }
280.756 + if (!show && ::IsWindowVisible(warningWindow)) {
280.757 + StartSecurityAnimation(akPreHide);
280.758 + }
280.759 +}
280.760 +
280.761 +void AwtWindow::FocusedWindowChanged(HWND from, HWND to)
280.762 +{
280.763 + AwtWindow * fw = (AwtWindow *)AwtComponent::GetComponent(from);
280.764 + AwtWindow * tw = (AwtWindow *)AwtComponent::GetComponent(to);
280.765 +
280.766 + if (fw != NULL) {
280.767 + fw->UpdateSecurityWarningVisibility();
280.768 + }
280.769 + if (tw != NULL) {
280.770 + tw->UpdateSecurityWarningVisibility();
280.771 +
280.772 + // Flash on receiving the keyboard focus even if the warning
280.773 + // has already been shown (e.g. by hovering with the mouse)
280.774 + tw->StartSecurityAnimation(akShow);
280.775 + }
280.776 +}
280.777 +
280.778 +void AwtWindow::_RepositionSecurityWarning(void* param)
280.779 +{
280.780 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.781 +
280.782 + RepositionSecurityWarningStruct *rsws =
280.783 + (RepositionSecurityWarningStruct *)param;
280.784 + jobject self = rsws->window;
280.785 +
280.786 + PDATA pData;
280.787 + JNI_CHECK_PEER_GOTO(self, ret);
280.788 + AwtWindow *window = (AwtWindow *)pData;
280.789 +
280.790 + window->RepositionSecurityWarning(env);
280.791 +
280.792 + ret:
280.793 + env->DeleteGlobalRef(self);
280.794 + delete rsws;
280.795 +}
280.796 +
280.797 /* Create a new AwtWindow object and window. */
280.798 AwtWindow* AwtWindow::Create(jobject self, jobject parent)
280.799 {
280.800 @@ -372,7 +1036,7 @@
280.801 window->m_isRetainingHierarchyZOrder = TRUE;
280.802 }
280.803 DWORD style = WS_CLIPCHILDREN | WS_POPUP;
280.804 - DWORD exStyle = 0;
280.805 + DWORD exStyle = WS_EX_NOACTIVATE;
280.806 if (GetRTL()) {
280.807 exStyle |= WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR;
280.808 if (GetRTLReadingOrder())
280.809 @@ -620,23 +1284,6 @@
280.810 ::GetClientRect(GetHWnd(), &inside);
280.811 ::GetWindowRect(GetHWnd(), &outside);
280.812
280.813 - jobject target = GetTarget(env);
280.814 - jstring warningString =
280.815 - (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID);
280.816 - if (warningString != NULL) {
280.817 - ::CopyRect(&inside, &outside);
280.818 - DefWindowProc(WM_NCCALCSIZE, FALSE, (LPARAM)&inside);
280.819 - /*
280.820 - * Fix for BugTraq ID 4304024.
280.821 - * Calculate client rectangle in client coordinates.
280.822 - */
280.823 - VERIFY(::OffsetRect(&inside, -inside.left, -inside.top));
280.824 - extraBottomInsets = ::GetSystemMetrics(SM_CYCAPTION) +
280.825 - ((GetStyle() & WS_THICKFRAME) ? 2 : -2);
280.826 - }
280.827 - env->DeleteLocalRef(target);
280.828 - env->DeleteLocalRef(warningString);
280.829 -
280.830 /* Update our inset member */
280.831 if (outside.right - outside.left > 0 && outside.bottom - outside.top > 0) {
280.832 ::MapWindowPoints(GetHWnd(), 0, (LPPOINT)&inside, 2);
280.833 @@ -863,45 +1510,93 @@
280.834 env->DeleteLocalRef(event);
280.835 }
280.836
280.837 +BOOL AwtWindow::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest)
280.838 +{
280.839 + // Fix for 6458497.
280.840 + // Retreat if current foreground window is out of both our and embedder process.
280.841 + // The exception is when activation is requested due to a mouse event.
280.842 + if (!isMouseEventCause) {
280.843 + HWND fgWindow = ::GetForegroundWindow();
280.844 + if (NULL != fgWindow) {
280.845 + DWORD fgProcessID;
280.846 + ::GetWindowThreadProcessId(fgWindow, &fgProcessID);
280.847 + if (fgProcessID != ::GetCurrentProcessId()
280.848 + && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID))
280.849 + {
280.850 + return FALSE;
280.851 + }
280.852 + }
280.853 + }
280.854 +
280.855 + HWND proxyContainerHWnd = GetProxyToplevelContainer();
280.856 + HWND proxyHWnd = GetProxyFocusOwner();
280.857 +
280.858 + if (proxyContainerHWnd == NULL || proxyHWnd == NULL) {
280.859 + return FALSE;
280.860 + }
280.861 +
280.862 + // Activate the proxy toplevel container
280.863 + if (::GetActiveWindow() != proxyContainerHWnd) {
280.864 + sm_suppressFocusAndActivation = TRUE;
280.865 + ::BringWindowToTop(proxyContainerHWnd);
280.866 + ::SetForegroundWindow(proxyContainerHWnd);
280.867 + sm_suppressFocusAndActivation = FALSE;
280.868 +
280.869 + if (::GetActiveWindow() != proxyContainerHWnd) {
280.870 + return FALSE; // activation has been rejected
280.871 + }
280.872 + }
280.873 +
280.874 + // Focus the proxy itself
280.875 + if (::GetFocus() != proxyHWnd) {
280.876 + sm_suppressFocusAndActivation = TRUE;
280.877 + ::SetFocus(proxyHWnd);
280.878 + sm_suppressFocusAndActivation = FALSE;
280.879 +
280.880 + if (::GetFocus() != proxyHWnd) {
280.881 + return FALSE; // focus has been rejected (that is unlikely)
280.882 + }
280.883 + }
280.884 +
280.885 + const HWND focusedWindow = AwtComponent::GetFocusedWindow();
280.886 + if (focusedWindow != GetHWnd()) {
280.887 + if (focusedWindow != NULL) {
280.888 + // Deactivate the old focused window
280.889 + AwtWindow::SynthesizeWmActivate(FALSE, focusedWindow, GetHWnd());
280.890 + }
280.891 + // Activate the new focused window.
280.892 + AwtWindow::SynthesizeWmActivate(TRUE, GetHWnd(), focusedWindow);
280.893 + }
280.894 + return TRUE;
280.895 +}
280.896 +
280.897 MsgRouting AwtWindow::WmActivate(UINT nState, BOOL fMinimized, HWND opposite)
280.898 {
280.899 jint type;
280.900
280.901 if (nState != WA_INACTIVE) {
280.902 - ::SetFocus((sm_focusOwner == NULL ||
280.903 - AwtComponent::GetTopLevelParentForWindow(sm_focusOwner) !=
280.904 - GetHWnd()) ? NULL : sm_focusOwner);
280.905 type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS;
280.906 - AwtToolkit::GetInstance().
280.907 - InvokeFunctionLater(BounceActivation, this);
280.908 - sm_focusedWindow = GetHWnd();
280.909 + AwtComponent::SetFocusedWindow(GetHWnd());
280.910 } else {
280.911 + // The owner is not necassarily getting WM_ACTIVATE(WA_INACTIVE).
280.912 + // So, initiate retaining the actualFocusedWindow.
280.913 + AwtFrame *owner = GetOwningFrameOrDialog();
280.914 + if (owner) {
280.915 + owner->CheckRetainActualFocusedWindow(opposite);
280.916 + }
280.917 +
280.918 if (m_grabbedWindow != NULL && !m_grabbedWindow->IsOneOfOwnersOf(this)) {
280.919 m_grabbedWindow->Ungrab();
280.920 }
280.921 type = java_awt_event_WindowEvent_WINDOW_LOST_FOCUS;
280.922 - sm_focusedWindow = NULL;
280.923 + AwtComponent::SetFocusedWindow(NULL);
280.924 + sm_focusOwner = NULL;
280.925 }
280.926
280.927 SendWindowEvent(type, opposite);
280.928 return mrConsume;
280.929 }
280.930
280.931 -void AwtWindow::BounceActivation(void *self) {
280.932 - AwtWindow *wSelf = (AwtWindow *)self;
280.933 -
280.934 - if (::GetActiveWindow() == wSelf->GetHWnd()) {
280.935 - AwtFrame *owner = wSelf->GetOwningFrameOrDialog();
280.936 -
280.937 - if (owner != NULL) {
280.938 - sm_suppressFocusAndActivation = TRUE;
280.939 - ::SetActiveWindow(owner->GetHWnd());
280.940 - ::SetFocus(owner->GetProxyFocusOwner());
280.941 - sm_suppressFocusAndActivation = FALSE;
280.942 - }
280.943 - }
280.944 -}
280.945 -
280.946 MsgRouting AwtWindow::WmCreate()
280.947 {
280.948 return mrDoDefault;
280.949 @@ -925,17 +1620,20 @@
280.950 {
280.951 /*
280.952 * Original fix for 4810575. Modified for 6386592.
280.953 - * If an owned window (not frame/dialog) gets disposed we should synthesize
280.954 + * If a simple window gets disposed we should synthesize
280.955 * WM_ACTIVATE for its nearest owner. This is not performed by default because
280.956 * the owner frame/dialog is natively active.
280.957 */
280.958 HWND hwndSelf = GetHWnd();
280.959 - HWND hwndParent = ::GetParent(hwndSelf);
280.960 -
280.961 - if (!show && IsSimpleWindow() && hwndSelf == sm_focusedWindow &&
280.962 - hwndParent != NULL && ::IsWindowVisible(hwndParent))
280.963 + HWND hwndOwner = ::GetParent(hwndSelf);
280.964 +
280.965 + if (!show && IsSimpleWindow() && hwndSelf == AwtComponent::GetFocusedWindow() &&
280.966 + hwndOwner != NULL && ::IsWindowVisible(hwndOwner))
280.967 {
280.968 - ::PostMessage(hwndParent, WM_ACTIVATE, (WPARAM)WA_ACTIVE, (LPARAM)hwndSelf);
280.969 + AwtFrame *owner = (AwtFrame*)AwtComponent::GetComponent(hwndOwner);
280.970 + if (owner != NULL) {
280.971 + owner->AwtSetActiveWindow();
280.972 + }
280.973 }
280.974
280.975 //Fixed 4842599: REGRESSION: JPopupMenu not Hidden Properly After Iconified and Deiconified
280.976 @@ -1034,7 +1732,10 @@
280.977 */
280.978 MsgRouting AwtWindow::WmSize(UINT type, int w, int h)
280.979 {
280.980 + currentWmSizeState = type;
280.981 +
280.982 if (type == SIZE_MINIMIZED) {
280.983 + UpdateSecurityWarningVisibility();
280.984 return mrDoDefault;
280.985 }
280.986
280.987 @@ -1098,103 +1799,18 @@
280.988 if (env->EnsureLocalCapacity(2) < 0) {
280.989 return mrConsume;
280.990 }
280.991 - jobject target = GetTarget(env);
280.992 - jstring warningString =
280.993 - (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID);
280.994 - if (warningString != NULL) {
280.995 - RECT r;
280.996 - ::CopyRect(&r, &lpncsp->rgrc[0]);
280.997 - retVal = static_cast<UINT>(DefWindowProc(WM_NCCALCSIZE, fCalcValidRects,
280.998 - reinterpret_cast<LPARAM>(lpncsp)));
280.999 -
280.1000 - /* Adjust non-client area for warning banner space. */
280.1001 - m_warningRect.left = lpncsp->rgrc[0].left;
280.1002 - m_warningRect.right = lpncsp->rgrc[0].right;
280.1003 - m_warningRect.bottom = lpncsp->rgrc[0].bottom;
280.1004 - m_warningRect.top =
280.1005 - m_warningRect.bottom - ::GetSystemMetrics(SM_CYCAPTION);
280.1006 - if (GetStyle() & WS_THICKFRAME) {
280.1007 - m_warningRect.top -= 2;
280.1008 - } else {
280.1009 - m_warningRect.top += 2;
280.1010 - }
280.1011 -
280.1012 - lpncsp->rgrc[0].bottom = (m_warningRect.top >= lpncsp->rgrc[0].top)
280.1013 - ? m_warningRect.top
280.1014 - : lpncsp->rgrc[0].top;
280.1015 -
280.1016 - /* Convert to window-relative coordinates. */
280.1017 - ::OffsetRect(&m_warningRect, -r.left, -r.top);
280.1018 -
280.1019 - /* Notify target of Insets change. */
280.1020 - if (HasValidRect()) {
280.1021 - UpdateInsets(NULL);
280.1022 - }
280.1023 -
280.1024 - mrRetVal = mrConsume;
280.1025 - } else {
280.1026 - // WM_NCCALCSIZE is usually in response to a resize, but
280.1027 - // also can be triggered by SetWindowPos(SWP_FRAMECHANGED),
280.1028 - // which means the insets will have changed - rnk 4/7/1998
280.1029 - retVal = static_cast<UINT>(DefWindowProc(
280.1030 - WM_NCCALCSIZE, fCalcValidRects, reinterpret_cast<LPARAM>(lpncsp)));
280.1031 - if (HasValidRect()) {
280.1032 - UpdateInsets(NULL);
280.1033 - }
280.1034 - mrRetVal = mrConsume;
280.1035 + // WM_NCCALCSIZE is usually in response to a resize, but
280.1036 + // also can be triggered by SetWindowPos(SWP_FRAMECHANGED),
280.1037 + // which means the insets will have changed - rnk 4/7/1998
280.1038 + retVal = static_cast<UINT>(DefWindowProc(
280.1039 + WM_NCCALCSIZE, fCalcValidRects, reinterpret_cast<LPARAM>(lpncsp)));
280.1040 + if (HasValidRect()) {
280.1041 + UpdateInsets(NULL);
280.1042 }
280.1043 - env->DeleteLocalRef(target);
280.1044 - env->DeleteLocalRef(warningString);
280.1045 + mrRetVal = mrConsume;
280.1046 return mrRetVal;
280.1047 }
280.1048
280.1049 -MsgRouting AwtWindow::WmNcPaint(HRGN hrgn)
280.1050 -{
280.1051 - DefWindowProc(WM_NCPAINT, (WPARAM)hrgn, 0);
280.1052 -
280.1053 - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1054 - if (env->EnsureLocalCapacity(2) < 0) {
280.1055 - return mrConsume;
280.1056 - }
280.1057 - jobject target = GetTarget(env);
280.1058 - jstring warningString =
280.1059 - (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID);
280.1060 - if (warningString != NULL) {
280.1061 - RECT r;
280.1062 - ::CopyRect(&r, &m_warningRect);
280.1063 - HDC hDC = ::GetWindowDC(GetHWnd());
280.1064 - DASSERT(hDC);
280.1065 - int iSaveDC = ::SaveDC(hDC);
280.1066 - VERIFY(::SelectClipRgn(hDC, NULL) != NULL);
280.1067 - VERIFY(::FillRect(hDC, &m_warningRect, (HBRUSH)::GetStockObject(BLACK_BRUSH)));
280.1068 -
280.1069 - if (GetStyle() & WS_THICKFRAME) {
280.1070 - /* draw edge */
280.1071 - VERIFY(::DrawEdge(hDC, &r, EDGE_RAISED, BF_TOP));
280.1072 - r.top += 2;
280.1073 - VERIFY(::DrawEdge(hDC, &r, EDGE_SUNKEN, BF_RECT));
280.1074 - ::InflateRect(&r, -2, -2);
280.1075 - }
280.1076 -
280.1077 - /* draw warning text */
280.1078 - LPCWSTR text = JNU_GetStringPlatformChars(env, warningString, NULL);
280.1079 - VERIFY(::SetBkColor(hDC, ::GetSysColor(COLOR_BTNFACE)) != CLR_INVALID);
280.1080 - VERIFY(::SetTextColor(hDC, ::GetSysColor(COLOR_BTNTEXT)) != CLR_INVALID);
280.1081 - VERIFY(::SelectObject(hDC, ::GetStockObject(DEFAULT_GUI_FONT)) != NULL);
280.1082 - VERIFY(::SetTextAlign(hDC, TA_LEFT | TA_BOTTOM) != GDI_ERROR);
280.1083 - VERIFY(::ExtTextOut(hDC, r.left+2, r.bottom-1,
280.1084 - ETO_CLIPPED | ETO_OPAQUE,
280.1085 - &r, text, static_cast<UINT>(wcslen(text)), NULL));
280.1086 - VERIFY(::RestoreDC(hDC, iSaveDC));
280.1087 - ::ReleaseDC(GetHWnd(), hDC);
280.1088 - JNU_ReleaseStringPlatformChars(env, warningString, text);
280.1089 - }
280.1090 -
280.1091 - env->DeleteLocalRef(target);
280.1092 - env->DeleteLocalRef(warningString);
280.1093 - return mrConsume;
280.1094 -}
280.1095 -
280.1096 MsgRouting AwtWindow::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
280.1097 {
280.1098 // If this window is blocked by modal dialog, return HTCLIENT for any point of it.
280.1099 @@ -1420,6 +2036,19 @@
280.1100 }
280.1101 }
280.1102
280.1103 +HWND AwtWindow::GetTopmostModalBlocker(HWND window)
280.1104 +{
280.1105 + HWND ret, blocker = NULL;
280.1106 +
280.1107 + do {
280.1108 + ret = blocker;
280.1109 + blocker = AwtWindow::GetModalBlocker(window);
280.1110 + window = blocker;
280.1111 + } while (::IsWindow(blocker));
280.1112 +
280.1113 + return ret;
280.1114 +}
280.1115 +
280.1116 void AwtWindow::FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags) {
280.1117 FLASHWINFO fi;
280.1118 fi.cbSize = sizeof(fi);
280.1119 @@ -1430,6 +2059,38 @@
280.1120 ::FlashWindowEx(&fi);
280.1121 }
280.1122
280.1123 +jboolean
280.1124 +AwtWindow::_RequestWindowFocus(void *param)
280.1125 +{
280.1126 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1127 +
280.1128 + RequestWindowFocusStruct *rfs = (RequestWindowFocusStruct *)param;
280.1129 + jobject self = rfs->component;
280.1130 + jboolean isMouseEventCause = rfs->isMouseEventCause;
280.1131 +
280.1132 + jboolean result = JNI_FALSE;
280.1133 + AwtWindow *window = NULL;
280.1134 +
280.1135 + PDATA pData;
280.1136 + JNI_CHECK_NULL_GOTO(self, "peer", ret);
280.1137 + pData = JNI_GET_PDATA(self);
280.1138 + if (pData == NULL) {
280.1139 + // do nothing just return false
280.1140 + goto ret;
280.1141 + }
280.1142 +
280.1143 + window = (AwtWindow *)pData;
280.1144 + if (::IsWindow(window->GetHWnd())) {
280.1145 + result = (jboolean)window->SendMessage(WM_AWT_WINDOW_SETACTIVE, (WPARAM)isMouseEventCause, 0);
280.1146 + }
280.1147 +ret:
280.1148 + env->DeleteGlobalRef(self);
280.1149 +
280.1150 + delete rfs;
280.1151 +
280.1152 + return result;
280.1153 +}
280.1154 +
280.1155 void AwtWindow::_ToFront(void *param)
280.1156 {
280.1157 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1158 @@ -1839,6 +2500,216 @@
280.1159 //Does nothing for windows, is overriden for frames and dialogs
280.1160 }
280.1161
280.1162 +void AwtWindow::RedrawWindow()
280.1163 +{
280.1164 + if (isOpaque()) {
280.1165 + ::RedrawWindow(GetHWnd(), NULL, NULL,
280.1166 + RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
280.1167 + } else {
280.1168 + ::EnterCriticalSection(&contentBitmapCS);
280.1169 + if (hContentBitmap != NULL) {
280.1170 + UpdateWindowImpl(contentWidth, contentHeight, hContentBitmap);
280.1171 + }
280.1172 + ::LeaveCriticalSection(&contentBitmapCS);
280.1173 + }
280.1174 +}
280.1175 +
280.1176 +void AwtWindow::SetTranslucency(BYTE opacity, BOOL opaque)
280.1177 +{
280.1178 + BYTE old_opacity = getOpacity();
280.1179 + BOOL old_opaque = isOpaque();
280.1180 +
280.1181 + if (opacity == old_opacity && opaque == old_opaque) {
280.1182 + return;
280.1183 + }
280.1184 +
280.1185 + setOpacity(opacity);
280.1186 + setOpaque(opaque);
280.1187 +
280.1188 + HWND hwnd = GetHWnd();
280.1189 +
280.1190 + LONG ex_style = ::GetWindowLong(hwnd, GWL_EXSTYLE);
280.1191 +
280.1192 + if (opaque != old_opaque) {
280.1193 + ::EnterCriticalSection(&contentBitmapCS);
280.1194 + if (hContentBitmap != NULL) {
280.1195 + ::DeleteObject(hContentBitmap);
280.1196 + hContentBitmap = NULL;
280.1197 + }
280.1198 + ::LeaveCriticalSection(&contentBitmapCS);
280.1199 + }
280.1200 +
280.1201 + if (opaque && opacity == 0xff) {
280.1202 + // Turn off all the effects
280.1203 + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style & ~WS_EX_LAYERED);
280.1204 + // Ask the window to repaint itself and all the children
280.1205 + RedrawWindow();
280.1206 + } else {
280.1207 + // We're going to enable some effects
280.1208 + if (!(ex_style & WS_EX_LAYERED)) {
280.1209 + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style | WS_EX_LAYERED);
280.1210 + } else {
280.1211 + if ((opaque && opacity < 0xff) ^ (old_opaque && old_opacity < 0xff)) {
280.1212 + // _One_ of the modes uses the SetLayeredWindowAttributes.
280.1213 + // Need to reset the style in this case.
280.1214 + // If both modes are simple (i.e. just changing the opacity level),
280.1215 + // no need to reset the style.
280.1216 + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style & ~WS_EX_LAYERED);
280.1217 + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style | WS_EX_LAYERED);
280.1218 + }
280.1219 + }
280.1220 +
280.1221 + if (opaque) {
280.1222 + // Simple opacity mode
280.1223 + ::SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), opacity, LWA_ALPHA);
280.1224 + }
280.1225 + }
280.1226 +}
280.1227 +
280.1228 +static HBITMAP CreateBitmapFromRaster(JNIEnv* env, jintArray raster, jint w, jint h)
280.1229 +{
280.1230 + HBITMAP image = NULL;
280.1231 + if (raster != NULL) {
280.1232 + int* rasterBuffer = NULL;
280.1233 + try {
280.1234 + rasterBuffer = (int *)env->GetPrimitiveArrayCritical(raster, 0);
280.1235 + JNI_CHECK_NULL_GOTO(rasterBuffer, "raster data", done);
280.1236 + image = BitmapUtil::CreateBitmapFromARGBPre(w, h, w*4, rasterBuffer);
280.1237 + } catch (...) {
280.1238 + if (rasterBuffer != NULL) {
280.1239 + env->ReleasePrimitiveArrayCritical(raster, rasterBuffer, 0);
280.1240 + }
280.1241 + throw;
280.1242 + }
280.1243 + if (rasterBuffer != NULL) {
280.1244 + env->ReleasePrimitiveArrayCritical(raster, rasterBuffer, 0);
280.1245 + }
280.1246 + }
280.1247 +done:
280.1248 + return image;
280.1249 +}
280.1250 +
280.1251 +void AwtWindow::UpdateWindowImpl(int width, int height, HBITMAP hBitmap)
280.1252 +{
280.1253 + if (isOpaque()) {
280.1254 + return;
280.1255 + }
280.1256 +
280.1257 + HWND hWnd = GetHWnd();
280.1258 + HDC hdcDst = ::GetDC(NULL);
280.1259 + HDC hdcSrc = ::CreateCompatibleDC(NULL);
280.1260 + HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hdcSrc, hBitmap);
280.1261 +
280.1262 + //XXX: this code doesn't paint the children (say, the java.awt.Button)!
280.1263 + //So, if we ever want to support HWs here, we need to repaint them
280.1264 + //in some other way...
280.1265 + //::SendMessage(hWnd, WM_PRINT, (WPARAM)hdcSrc, /*PRF_CHECKVISIBLE |*/
280.1266 + // PRF_CHILDREN /*| PRF_CLIENT | PRF_NONCLIENT*/);
280.1267 +
280.1268 + POINT ptSrc;
280.1269 + ptSrc.x = ptSrc.y = 0;
280.1270 +
280.1271 + RECT rect;
280.1272 + POINT ptDst;
280.1273 + SIZE size;
280.1274 +
280.1275 + ::GetWindowRect(hWnd, &rect);
280.1276 + ptDst.x = rect.left;
280.1277 + ptDst.y = rect.top;
280.1278 + size.cx = width;
280.1279 + size.cy = height;
280.1280 +
280.1281 + BLENDFUNCTION bf;
280.1282 +
280.1283 + bf.SourceConstantAlpha = getOpacity();
280.1284 + bf.AlphaFormat = AC_SRC_ALPHA;
280.1285 + bf.BlendOp = AC_SRC_OVER;
280.1286 + bf.BlendFlags = 0;
280.1287 +
280.1288 + ::UpdateLayeredWindow(hWnd, hdcDst, &ptDst, &size, hdcSrc, &ptSrc,
280.1289 + RGB(0, 0, 0), &bf, ULW_ALPHA);
280.1290 +
280.1291 + ::ReleaseDC(NULL, hdcDst);
280.1292 + ::SelectObject(hdcSrc, hOldBitmap);
280.1293 + ::DeleteDC(hdcSrc);
280.1294 +}
280.1295 +
280.1296 +void AwtWindow::UpdateWindow(JNIEnv* env, jintArray data, int width, int height,
280.1297 + HBITMAP hNewBitmap)
280.1298 +{
280.1299 + if (isOpaque()) {
280.1300 + return;
280.1301 + }
280.1302 +
280.1303 + HBITMAP hBitmap;
280.1304 + if (hNewBitmap == NULL) {
280.1305 + if (data == NULL) {
280.1306 + return;
280.1307 + }
280.1308 + hBitmap = CreateBitmapFromRaster(env, data, width, height);
280.1309 + if (hBitmap == NULL) {
280.1310 + return;
280.1311 + }
280.1312 + } else {
280.1313 + hBitmap = hNewBitmap;
280.1314 + }
280.1315 +
280.1316 + ::EnterCriticalSection(&contentBitmapCS);
280.1317 + if (hContentBitmap != NULL) {
280.1318 + ::DeleteObject(hContentBitmap);
280.1319 + }
280.1320 + hContentBitmap = hBitmap;
280.1321 + contentWidth = width;
280.1322 + contentHeight = height;
280.1323 + UpdateWindowImpl(width, height, hBitmap);
280.1324 + ::LeaveCriticalSection(&contentBitmapCS);
280.1325 +}
280.1326 +
280.1327 +void AwtWindow::FillBackground(HDC hMemoryDC, SIZE &size)
280.1328 +{
280.1329 + if (isOpaque()) {
280.1330 + AwtCanvas::FillBackground(hMemoryDC, size);
280.1331 + }
280.1332 +}
280.1333 +
280.1334 +void AwtWindow::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha)
280.1335 +{
280.1336 + if (isOpaque()) {
280.1337 + AwtCanvas::FillAlpha(bitmapBits, size, alpha);
280.1338 + }
280.1339 +}
280.1340 +
280.1341 +/*
280.1342 + * Fixed 6353381: it's improved fix for 4792958
280.1343 + * which was backed-out to avoid 5059656
280.1344 + */
280.1345 +BOOL AwtWindow::HasValidRect()
280.1346 +{
280.1347 + RECT inside;
280.1348 + RECT outside;
280.1349 +
280.1350 + if (::IsIconic(GetHWnd())) {
280.1351 + return FALSE;
280.1352 + }
280.1353 +
280.1354 + ::GetClientRect(GetHWnd(), &inside);
280.1355 + ::GetWindowRect(GetHWnd(), &outside);
280.1356 +
280.1357 + BOOL isZeroClientArea = (inside.right == 0 && inside.bottom == 0);
280.1358 + BOOL isInvalidLocation = ((outside.left == -32000 && outside.top == -32000) || // Win2k && WinXP
280.1359 + (outside.left == 32000 && outside.top == 32000) || // Win95 && Win98
280.1360 + (outside.left == 3000 && outside.top == 3000)); // Win95 && Win98
280.1361 +
280.1362 + // the bounds correspond to iconic state
280.1363 + if (isZeroClientArea && isInvalidLocation)
280.1364 + {
280.1365 + return FALSE;
280.1366 + }
280.1367 +
280.1368 + return TRUE;
280.1369 +}
280.1370 +
280.1371 +
280.1372 void AwtWindow::_SetIconImagesData(void * param)
280.1373 {
280.1374 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1375 @@ -1940,11 +2811,14 @@
280.1376
280.1377 window->m_isFocusableWindow = isFocusableWindow;
280.1378
280.1379 - if (!window->m_isFocusableWindow) {
280.1380 - LONG isPopup = window->GetStyle() & WS_POPUP;
280.1381 - window->SetStyleEx(window->GetStyleEx() | (isPopup ? 0 : WS_EX_APPWINDOW) | AWT_WS_EX_NOACTIVATE);
280.1382 - } else {
280.1383 - window->SetStyleEx(window->GetStyleEx() & ~WS_EX_APPWINDOW & ~AWT_WS_EX_NOACTIVATE);
280.1384 + // A simple window is permanently set to WS_EX_NOACTIVATE
280.1385 + if (!window->IsSimpleWindow()) {
280.1386 + if (!window->m_isFocusableWindow) {
280.1387 + LONG isPopup = window->GetStyle() & WS_POPUP;
280.1388 + window->SetStyleEx(window->GetStyleEx() | (isPopup ? 0 : WS_EX_APPWINDOW) | WS_EX_NOACTIVATE);
280.1389 + } else {
280.1390 + window->SetStyleEx(window->GetStyleEx() & ~WS_EX_APPWINDOW & ~WS_EX_NOACTIVATE);
280.1391 + }
280.1392 }
280.1393
280.1394 ret:
280.1395 @@ -2009,36 +2883,68 @@
280.1396 env->DeleteGlobalRef(self);
280.1397 }
280.1398
280.1399 -/*
280.1400 - * Fixed 6353381: it's improved fix for 4792958
280.1401 - * which was backed-out to avoid 5059656
280.1402 - */
280.1403 -BOOL AwtWindow::HasValidRect()
280.1404 +void AwtWindow::_SetOpacity(void* param)
280.1405 {
280.1406 - RECT inside;
280.1407 - RECT outside;
280.1408 -
280.1409 - if (::IsIconic(GetHWnd())) {
280.1410 - return FALSE;
280.1411 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1412 +
280.1413 + OpacityStruct *os = (OpacityStruct *)param;
280.1414 + jobject self = os->window;
280.1415 + BYTE iOpacity = (BYTE)os->iOpacity;
280.1416 +
280.1417 + PDATA pData;
280.1418 + JNI_CHECK_PEER_GOTO(self, ret);
280.1419 + AwtWindow *window = (AwtWindow *)pData;
280.1420 +
280.1421 + window->SetTranslucency(iOpacity, window->isOpaque());
280.1422 +
280.1423 + ret:
280.1424 + env->DeleteGlobalRef(self);
280.1425 + delete os;
280.1426 +}
280.1427 +
280.1428 +void AwtWindow::_SetOpaque(void* param)
280.1429 +{
280.1430 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1431 +
280.1432 + OpaqueStruct *os = (OpaqueStruct *)param;
280.1433 + jobject self = os->window;
280.1434 + BOOL isOpaque = (BOOL)os->isOpaque;
280.1435 +
280.1436 + PDATA pData;
280.1437 + JNI_CHECK_PEER_GOTO(self, ret);
280.1438 + AwtWindow *window = (AwtWindow *)pData;
280.1439 +
280.1440 + window->SetTranslucency(window->getOpacity(), isOpaque);
280.1441 +
280.1442 + ret:
280.1443 + env->DeleteGlobalRef(self);
280.1444 + delete os;
280.1445 +}
280.1446 +
280.1447 +void AwtWindow::_UpdateWindow(void* param)
280.1448 +{
280.1449 + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
280.1450 +
280.1451 + UpdateWindowStruct *uws = (UpdateWindowStruct *)param;
280.1452 + jobject self = uws->window;
280.1453 + jintArray data = uws->data;
280.1454 +
280.1455 + PDATA pData;
280.1456 + JNI_CHECK_PEER_GOTO(self, ret);
280.1457 + AwtWindow *window = (AwtWindow *)pData;
280.1458 +
280.1459 + window->UpdateWindow(env, data, (int)uws->width, (int)uws->height,
280.1460 + uws->hBitmap);
280.1461 +
280.1462 + ret:
280.1463 + env->DeleteGlobalRef(self);
280.1464 + if (data != NULL) {
280.1465 + env->DeleteGlobalRef(data);
280.1466 }
280.1467 -
280.1468 - ::GetClientRect(GetHWnd(), &inside);
280.1469 - ::GetWindowRect(GetHWnd(), &outside);
280.1470 -
280.1471 - BOOL isZeroClientArea = (inside.right == 0 && inside.bottom == 0);
280.1472 - BOOL isInvalidLocation = ((outside.left == -32000 && outside.top == -32000) || // Win2k && WinXP
280.1473 - (outside.left == 32000 && outside.top == 32000) || // Win95 && Win98
280.1474 - (outside.left == 3000 && outside.top == 3000)); // Win95 && Win98
280.1475 -
280.1476 - // the bounds correspond to iconic state
280.1477 - if (isZeroClientArea && isInvalidLocation)
280.1478 - {
280.1479 - return FALSE;
280.1480 - }
280.1481 -
280.1482 - return TRUE;
280.1483 + delete uws;
280.1484 }
280.1485
280.1486 +
280.1487 extern "C" {
280.1488
280.1489 /*
280.1490 @@ -2055,8 +2961,16 @@
280.1491 env->GetFieldID(cls, "warningString", "Ljava/lang/String;");
280.1492 AwtWindow::locationByPlatformID =
280.1493 env->GetFieldID(cls, "locationByPlatform", "Z");
280.1494 + AwtWindow::securityWarningWidthID =
280.1495 + env->GetFieldID(cls, "securityWarningWidth", "I");
280.1496 + AwtWindow::securityWarningHeightID =
280.1497 + env->GetFieldID(cls, "securityWarningHeight", "I");
280.1498 + AwtWindow::getWarningStringMID =
280.1499 + env->GetMethodID(cls, "getWarningString", "()Ljava/lang/String;");
280.1500 AwtWindow::autoRequestFocusID =
280.1501 env->GetFieldID(cls, "autoRequestFocus", "Z");
280.1502 + AwtWindow::calculateSecurityWarningPositionMID =
280.1503 + env->GetMethodID(cls, "calculateSecurityWarningPosition", "(DDDD)Ljava/awt/geom/Point2D;");
280.1504
280.1505 CATCH_BAD_ALLOC;
280.1506 }
280.1507 @@ -2489,4 +3403,138 @@
280.1508 CATCH_BAD_ALLOC;
280.1509 }
280.1510
280.1511 +/*
280.1512 + * Class: sun_awt_windows_WWindowPeer
280.1513 + * Method: setOpacity
280.1514 + * Signature: (I)V
280.1515 + */
280.1516 +JNIEXPORT void JNICALL
280.1517 +Java_sun_awt_windows_WWindowPeer_setOpacity(JNIEnv *env, jobject self,
280.1518 + jint iOpacity)
280.1519 +{
280.1520 + TRY;
280.1521 +
280.1522 + OpacityStruct *os = new OpacityStruct;
280.1523 + os->window = env->NewGlobalRef(self);
280.1524 + os->iOpacity = iOpacity;
280.1525 +
280.1526 + AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetOpacity, os);
280.1527 + // global refs and mds are deleted in _SetMinSize
280.1528 +
280.1529 + CATCH_BAD_ALLOC;
280.1530 +}
280.1531 +
280.1532 +/*
280.1533 + * Class: sun_awt_windows_WWindowPeer
280.1534 + * Method: setOpaqueImpl
280.1535 + * Signature: (Z)V
280.1536 + */
280.1537 +JNIEXPORT void JNICALL
280.1538 +Java_sun_awt_windows_WWindowPeer_setOpaqueImpl(JNIEnv *env, jobject self,
280.1539 + jboolean isOpaque)
280.1540 +{
280.1541 + TRY;
280.1542 +
280.1543 + OpaqueStruct *os = new OpaqueStruct;
280.1544 + os->window = env->NewGlobalRef(self);
280.1545 + os->isOpaque = isOpaque;
280.1546 +
280.1547 + AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetOpaque, os);
280.1548 + // global refs and mds are deleted in _SetMinSize
280.1549 +
280.1550 + CATCH_BAD_ALLOC;
280.1551 +}
280.1552 +
280.1553 +/*
280.1554 + * Class: sun_awt_windows_WWindowPeer
280.1555 + * Method: updateWindowImpl
280.1556 + * Signature: ([III)V
280.1557 + */
280.1558 +JNIEXPORT void JNICALL
280.1559 +Java_sun_awt_windows_WWindowPeer_updateWindowImpl(JNIEnv *env, jobject self,
280.1560 + jintArray data,
280.1561 + jint width, jint height)
280.1562 +{
280.1563 + TRY;
280.1564 +
280.1565 + UpdateWindowStruct *uws = new UpdateWindowStruct;
280.1566 + uws->window = env->NewGlobalRef(self);
280.1567 + uws->data = (jintArray)env->NewGlobalRef(data);
280.1568 + uws->hBitmap = NULL;
280.1569 + uws->width = width;
280.1570 + uws->height = height;
280.1571 +
280.1572 + AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws);
280.1573 + // global refs and mds are deleted in _UpdateWindow
280.1574 +
280.1575 + CATCH_BAD_ALLOC;
280.1576 +}
280.1577 +
280.1578 +/**
280.1579 + * This method is called from the WGL pipeline when it needs to update
280.1580 + * the layered window WindowPeer's C++ level object.
280.1581 + */
280.1582 +void AwtWindow_UpdateWindow(JNIEnv *env, jobject peer,
280.1583 + jint width, jint height, HBITMAP hBitmap)
280.1584 +{
280.1585 + TRY;
280.1586 +
280.1587 + UpdateWindowStruct *uws = new UpdateWindowStruct;
280.1588 + uws->window = env->NewGlobalRef(peer);
280.1589 + uws->data = NULL;
280.1590 + uws->hBitmap = hBitmap;
280.1591 + uws->width = width;
280.1592 + uws->height = height;
280.1593 +
280.1594 + AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws);
280.1595 + // global refs and mds are deleted in _UpdateWindow
280.1596 +
280.1597 + CATCH_BAD_ALLOC;
280.1598 +}
280.1599 +
280.1600 +/*
280.1601 + * Class: sun_awt_windows_WComponentPeer
280.1602 + * Method: requestFocus
280.1603 + * Signature: (Z)Z
280.1604 + */
280.1605 +JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WWindowPeer_requestWindowFocus
280.1606 + (JNIEnv *env, jobject self, jboolean isMouseEventCause)
280.1607 +{
280.1608 + TRY;
280.1609 +
280.1610 + jobject selfGlobalRef = env->NewGlobalRef(self);
280.1611 +
280.1612 + RequestWindowFocusStruct *rfs = new RequestWindowFocusStruct;
280.1613 + rfs->component = selfGlobalRef;
280.1614 + rfs->isMouseEventCause = isMouseEventCause;
280.1615 +
280.1616 + return (jboolean)AwtToolkit::GetInstance().SyncCall(
280.1617 + (void*(*)(void*))AwtWindow::_RequestWindowFocus, rfs);
280.1618 + // global refs and rfs are deleted in _RequestWindowFocus
280.1619 +
280.1620 + CATCH_BAD_ALLOC_RET(JNI_FALSE);
280.1621 +}
280.1622 +
280.1623 +/*
280.1624 + * Class: sun_awt_windows_WWindowPeer
280.1625 + * Method: repositionSecurityWarning
280.1626 + * Signature: ()V
280.1627 + */
280.1628 +JNIEXPORT void JNICALL
280.1629 +Java_sun_awt_windows_WWindowPeer_repositionSecurityWarning(JNIEnv *env,
280.1630 + jobject self)
280.1631 +{
280.1632 + TRY;
280.1633 +
280.1634 + RepositionSecurityWarningStruct *rsws =
280.1635 + new RepositionSecurityWarningStruct;
280.1636 + rsws->window = env->NewGlobalRef(self);
280.1637 +
280.1638 + AwtToolkit::GetInstance().InvokeFunction(
280.1639 + AwtWindow::_RepositionSecurityWarning, rsws);
280.1640 + // global refs and mds are deleted in _RepositionSecurityWarning
280.1641 +
280.1642 + CATCH_BAD_ALLOC;
280.1643 +}
280.1644 +
280.1645 } /* extern "C" */
281.1 --- a/src/windows/native/sun/windows/awt_Window.h Thu Apr 16 17:42:00 2009 +0100
281.2 +++ b/src/windows/native/sun/windows/awt_Window.h Thu Apr 16 19:10:32 2009 -0700
281.3 @@ -1,5 +1,5 @@
281.4 /*
281.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
281.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
281.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
281.8 *
281.9 * This code is free software; you can redistribute it and/or modify it
281.10 @@ -34,14 +34,12 @@
281.11 // property name tagging windows disabled by modality
281.12 static LPCTSTR ModalBlockerProp = TEXT("SunAwtModalBlockerProp");
281.13 static LPCTSTR ModalDialogPeerProp = TEXT("SunAwtModalDialogPeerProp");
281.14 +static LPCTSTR NativeDialogWndProcProp = TEXT("SunAwtNativeDialogWndProcProp");
281.15
281.16 #ifndef WH_MOUSE_LL
281.17 #define WH_MOUSE_LL 14
281.18 #endif
281.19
281.20 -// WS_EX_NOACTIVATE is not defined in the headers we build with
281.21 -#define AWT_WS_EX_NOACTIVATE 0x08000000L
281.22 -
281.23 class AwtFrame;
281.24
281.25 /************************************************************************
281.26 @@ -56,6 +54,8 @@
281.27 static jfieldID locationByPlatformID;
281.28 static jfieldID screenID; /* screen number passed over from WindowPeer */
281.29 static jfieldID autoRequestFocusID;
281.30 + static jfieldID securityWarningWidthID;
281.31 + static jfieldID securityWarningHeightID;
281.32
281.33 // The coordinates at the peer.
281.34 static jfieldID sysXID;
281.35 @@ -63,6 +63,9 @@
281.36 static jfieldID sysWID;
281.37 static jfieldID sysHID;
281.38
281.39 + static jmethodID getWarningStringMID;
281.40 + static jmethodID calculateSecurityWarningPositionMID;
281.41 +
281.42 AwtWindow();
281.43 virtual ~AwtWindow();
281.44
281.45 @@ -152,11 +155,12 @@
281.46 static void SetModalBlocker(HWND window, HWND blocker);
281.47 static void SetAndActivateModalBlocker(HWND window, HWND blocker);
281.48
281.49 + static HWND GetTopmostModalBlocker(HWND window);
281.50 +
281.51 /*
281.52 * Windows message handler functions
281.53 */
281.54 virtual MsgRouting WmActivate(UINT nState, BOOL fMinimized, HWND opposite);
281.55 - static void BounceActivation(void *self); // used by WmActivate
281.56 virtual MsgRouting WmCreate();
281.57 virtual MsgRouting WmClose();
281.58 virtual MsgRouting WmDestroy();
281.59 @@ -169,19 +173,36 @@
281.60 virtual MsgRouting WmSettingChange(UINT wFlag, LPCTSTR pszSection);
281.61 virtual MsgRouting WmNcCalcSize(BOOL fCalcValidRects,
281.62 LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal);
281.63 - virtual MsgRouting WmNcPaint(HRGN hrgn);
281.64 virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal);
281.65 virtual MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button);
281.66 virtual MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal);
281.67 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
281.68 virtual MsgRouting WmWindowPosChanging(LPARAM windowPos);
281.69 virtual MsgRouting WmWindowPosChanged(LPARAM windowPos);
281.70 + virtual MsgRouting WmTimer(UINT_PTR timerID);
281.71
281.72 virtual MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
281.73 virtual void WindowResized();
281.74
281.75 + static jboolean _RequestWindowFocus(void *param);
281.76 +
281.77 + virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT);
281.78 +
281.79 + // Execute on Toolkit only.
281.80 + INLINE static LRESULT SynthesizeWmActivate(BOOL doActivate, HWND targetHWnd, HWND oppositeHWnd) {
281.81 + if (::IsWindowVisible(targetHWnd)) {
281.82 + return ::SendMessage(targetHWnd, WM_ACTIVATE,
281.83 + MAKEWPARAM(doActivate ? WA_ACTIVE : WA_INACTIVE, FALSE),
281.84 + (LPARAM) oppositeHWnd);
281.85 + }
281.86 + return 1; // if not processed
281.87 + }
281.88 +
281.89 void moveToDefaultLocation(); /* moves Window to X,Y specified by Window Manger */
281.90
281.91 + void UpdateWindow(JNIEnv* env, jintArray data, int width, int height,
281.92 + HBITMAP hNewBitmap = NULL);
281.93 +
281.94 INLINE virtual BOOL IsTopLevel() { return TRUE; }
281.95 static AwtWindow * GetGrabbedWindow() { return m_grabbedWindow; }
281.96
281.97 @@ -204,11 +225,25 @@
281.98 static void _SetModalExcludedNativeProp(void *param);
281.99 static void _ModalDisable(void *param);
281.100 static void _ModalEnable(void *param);
281.101 + static void _SetOpacity(void* param);
281.102 + static void _SetOpaque(void* param);
281.103 + static void _UpdateWindow(void* param);
281.104 + static void _RepositionSecurityWarning(void* param);
281.105
281.106 inline static BOOL IsResizing() {
281.107 return sm_resizing;
281.108 }
281.109
281.110 + virtual void CreateHWnd(JNIEnv *env, LPCWSTR title,
281.111 + DWORD windowStyle, DWORD windowExStyle,
281.112 + int x, int y, int w, int h,
281.113 + HWND hWndParent, HMENU hMenu,
281.114 + COLORREF colorForeground, COLORREF colorBackground,
281.115 + jobject peer);
281.116 + virtual void DestroyHWnd();
281.117 +
281.118 + static void FocusedWindowChanged(HWND from, HWND to);
281.119 +
281.120 private:
281.121 static int ms_instanceCounter;
281.122 static HHOOK ms_hCBTFilter;
281.123 @@ -228,6 +263,79 @@
281.124 // from its hierarchy when shown. Currently applied to instances of
281.125 // javax/swing/Popup$HeavyWeightWindow class.
281.126
281.127 + BYTE m_opacity; // The opacity level. == 0xff by default (when opacity mode is disabled)
281.128 + BOOL m_opaque; // Whether the window uses the perpixel translucency (false), or not (true).
281.129 +
281.130 + inline BYTE getOpacity() {
281.131 + return m_opacity;
281.132 + }
281.133 + inline void setOpacity(BYTE opacity) {
281.134 + m_opacity = opacity;
281.135 + }
281.136 +
281.137 + inline BOOL isOpaque() {
281.138 + return m_opaque;
281.139 + }
281.140 + inline void setOpaque(BOOL opaque) {
281.141 + m_opaque = opaque;
281.142 + }
281.143 +
281.144 + CRITICAL_SECTION contentBitmapCS;
281.145 + HBITMAP hContentBitmap;
281.146 + UINT contentWidth;
281.147 + UINT contentHeight;
281.148 +
281.149 + void SetTranslucency(BYTE opacity, BOOL opaque);
281.150 + void UpdateWindow(int width, int height, HBITMAP hBitmap);
281.151 + void UpdateWindowImpl(int width, int height, HBITMAP hBitmap);
281.152 + void RedrawWindow();
281.153 +
281.154 + static UINT untrustedWindowsCounter;
281.155 +
281.156 + WCHAR * warningString;
281.157 +
281.158 + // The warning icon
281.159 + HWND warningWindow;
281.160 + // The tooltip that appears when hovering the icon
281.161 + HWND securityTooltipWindow;
281.162 +
281.163 + UINT warningWindowWidth;
281.164 + UINT warningWindowHeight;
281.165 + void InitSecurityWarningSize(JNIEnv *env);
281.166 + HICON GetSecurityWarningIcon();
281.167 +
281.168 + void CreateWarningWindow(JNIEnv *env);
281.169 + void DestroyWarningWindow();
281.170 + static LPCTSTR GetWarningWindowClassName();
281.171 + void FillWarningWindowClassInfo(WNDCLASS *lpwc);
281.172 + void RegisterWarningWindowClass();
281.173 + void UnregisterWarningWindowClass();
281.174 + static LRESULT CALLBACK WarningWindowProc(
281.175 + HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
281.176 +
281.177 + static void PaintWarningWindow(HWND warningWindow);
281.178 + static void PaintWarningWindow(HWND warningWindow, HDC hdc);
281.179 + void RepaintWarningWindow();
281.180 + void CalculateWarningWindowBounds(JNIEnv *env, LPRECT rect);
281.181 +
281.182 + void AnimateSecurityWarning(bool enable);
281.183 + UINT securityWarningAnimationStage;
281.184 +
281.185 + enum AnimationKind {
281.186 + akNone, akShow, akPreHide, akHide
281.187 + };
281.188 +
281.189 + AnimationKind securityAnimationKind;
281.190 +
281.191 + void StartSecurityAnimation(AnimationKind kind);
281.192 + void StopSecurityAnimation();
281.193 +
281.194 + void RepositionSecurityWarning(JNIEnv *env);
281.195 +
281.196 +public:
281.197 + void UpdateSecurityWarningVisibility();
281.198 + static bool IsWarningWindow(HWND hWnd);
281.199 +
281.200 protected:
281.201 BOOL m_isResizable;
281.202 static AwtWindow* m_grabbedWindow; // Current grabbing window
281.203 @@ -236,6 +344,16 @@
281.204 BOOL m_iconInherited; /* TRUE if icon is inherited from the owner */
281.205 BOOL m_filterFocusAndActivation; /* Used in the WH_CBT hook */
281.206
281.207 + //These are used in AwtComponent::CreatePrintedPixels. They are overridden
281.208 + //here to handle non-opaque windows.
281.209 + virtual void FillBackground(HDC hMemoryDC, SIZE &size);
281.210 + virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha);
281.211 +
281.212 + inline BOOL IsUntrusted() {
281.213 + return warningString != NULL;
281.214 + }
281.215 +
281.216 + UINT currentWmSizeState;
281.217
281.218 private:
281.219 int m_screenNum;
282.1 --- a/src/windows/native/sun/windows/awtmsg.h Thu Apr 16 17:42:00 2009 +0100
282.2 +++ b/src/windows/native/sun/windows/awtmsg.h Thu Apr 16 19:10:32 2009 -0700
282.3 @@ -1,5 +1,5 @@
282.4 /*
282.5 - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved.
282.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
282.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
282.8 *
282.9 * This code is free software; you can redistribute it and/or modify it
282.10 @@ -194,6 +194,7 @@
282.11 WM_AWT_COMPONENT_SHOW,
282.12 WM_AWT_COMPONENT_HIDE,
282.13 WM_AWT_COMPONENT_SETFOCUS,
282.14 + WM_AWT_WINDOW_SETACTIVE,
282.15 WM_AWT_LIST_SETMULTISELECT,
282.16 WM_AWT_HANDLE_EVENT,
282.17 WM_AWT_PRINT_COMPONENT,
283.1 Binary file src/windows/native/sun/windows/security_warning.ico has changed
284.1 Binary file src/windows/native/sun/windows/security_warning_bw.ico has changed
285.1 Binary file src/windows/native/sun/windows/security_warning_int.ico has changed
286.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
286.2 +++ b/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java Thu Apr 16 19:10:32 2009 -0700
286.3 @@ -0,0 +1,392 @@
286.4 +/*
286.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
286.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
286.7 + *
286.8 + * This code is free software; you can redistribute it and/or modify it
286.9 + * under the terms of the GNU General Public License version 2 only, as
286.10 + * published by the Free Software Foundation.
286.11 + *
286.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
286.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
286.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
286.15 + * version 2 for more details (a copy is included in the LICENSE file that
286.16 + * accompanied this code).
286.17 + *
286.18 + * You should have received a copy of the GNU General Public License version
286.19 + * 2 along with this work; if not, write to the Free Software Foundation,
286.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
286.21 + *
286.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
286.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
286.24 + * have any questions.
286.25 + */
286.26 +
286.27 +/*
286.28 + @test %W% %E%
286.29 + @bug 6818312
286.30 + @summary The size returned by SecurityWarning.getSize() should not be zero
286.31 + @author anthony.petrov@sun.com: area=awt.toplevel
286.32 + @library ../../../../java/awt/regtesthelpers
286.33 + @build Util
286.34 + @run main GetSizeShouldNotReturnZero
286.35 +*/
286.36 +
286.37 +/**
286.38 + * GetSizeShouldNotReturnZero.java
286.39 + *
286.40 + * summary: The size returned by SecurityWarning.getSize() should not be zero
286.41 + */
286.42 +
286.43 +import java.awt.*;
286.44 +import java.awt.event.*;
286.45 +import java.security.Permission;
286.46 +import test.java.awt.regtesthelpers.Util;
286.47 +import com.sun.awt.SecurityWarning;
286.48 +
286.49 +public class GetSizeShouldNotReturnZero
286.50 +{
286.51 + private static void init()
286.52 + {
286.53 + String[] instructions =
286.54 + {
286.55 + "This is an AUTOMATIC test, simply wait until it is done.",
286.56 + "The result (passed or failed) will be shown in the",
286.57 + "message window below."
286.58 + };
286.59 + Sysout.createDialog( );
286.60 + Sysout.printInstructions( instructions );
286.61 +
286.62 +
286.63 + // Install the security manager so that all subsequently created
286.64 + // windows display the security warning.
286.65 + System.setSecurityManager(new SecurityManager() {
286.66 +
286.67 + @Override
286.68 + public void checkPermission(Permission perm) {
286.69 + }
286.70 +
286.71 + @Override
286.72 + public boolean checkTopLevelWindow(Object window) {
286.73 + return false;
286.74 + }
286.75 + });
286.76 +
286.77 + Frame f = new Frame();
286.78 + f.setSize(100, 100);
286.79 + f.setVisible(true);
286.80 +
286.81 + Robot robot = Util.createRobot();
286.82 + Util.waitForIdle(robot);
286.83 +
286.84 + Dimension size = SecurityWarning.getSize(f);
286.85 + if (size.width == 0 || size.height == 0) {
286.86 + fail("Reported security warning size: " + size);
286.87 + return;
286.88 + }
286.89 + pass();
286.90 + }//End init()
286.91 +
286.92 +
286.93 +
286.94 + /*****************************************************
286.95 + * Standard Test Machinery Section
286.96 + * DO NOT modify anything in this section -- it's a
286.97 + * standard chunk of code which has all of the
286.98 + * synchronisation necessary for the test harness.
286.99 + * By keeping it the same in all tests, it is easier
286.100 + * to read and understand someone else's test, as
286.101 + * well as insuring that all tests behave correctly
286.102 + * with the test harness.
286.103 + * There is a section following this for test-
286.104 + * classes
286.105 + ******************************************************/
286.106 + private static boolean theTestPassed = false;
286.107 + private static boolean testGeneratedInterrupt = false;
286.108 + private static String failureMessage = "";
286.109 +
286.110 + private static Thread mainThread = null;
286.111 +
286.112 + private static int sleepTime = 300000;
286.113 +
286.114 + // Not sure about what happens if multiple of this test are
286.115 + // instantiated in the same VM. Being static (and using
286.116 + // static vars), it aint gonna work. Not worrying about
286.117 + // it for now.
286.118 + public static void main( String args[] ) throws InterruptedException
286.119 + {
286.120 + mainThread = Thread.currentThread();
286.121 + try
286.122 + {
286.123 + init();
286.124 + }
286.125 + catch( TestPassedException e )
286.126 + {
286.127 + //The test passed, so just return from main and harness will
286.128 + // interepret this return as a pass
286.129 + return;
286.130 + }
286.131 + //At this point, neither test pass nor test fail has been
286.132 + // called -- either would have thrown an exception and ended the
286.133 + // test, so we know we have multiple threads.
286.134 +
286.135 + //Test involves other threads, so sleep and wait for them to
286.136 + // called pass() or fail()
286.137 + try
286.138 + {
286.139 + Thread.sleep( sleepTime );
286.140 + //Timed out, so fail the test
286.141 + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
286.142 + }
286.143 + catch (InterruptedException e)
286.144 + {
286.145 + //The test harness may have interrupted the test. If so, rethrow the exception
286.146 + // so that the harness gets it and deals with it.
286.147 + if( ! testGeneratedInterrupt ) throw e;
286.148 +
286.149 + //reset flag in case hit this code more than once for some reason (just safety)
286.150 + testGeneratedInterrupt = false;
286.151 +
286.152 + if ( theTestPassed == false )
286.153 + {
286.154 + throw new RuntimeException( failureMessage );
286.155 + }
286.156 + }
286.157 +
286.158 + }//main
286.159 +
286.160 + public static synchronized void setTimeoutTo( int seconds )
286.161 + {
286.162 + sleepTime = seconds * 1000;
286.163 + }
286.164 +
286.165 + public static synchronized void pass()
286.166 + {
286.167 + Sysout.println( "The test passed." );
286.168 + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
286.169 + //first check if this is executing in main thread
286.170 + if ( mainThread == Thread.currentThread() )
286.171 + {
286.172 + //Still in the main thread, so set the flag just for kicks,
286.173 + // and throw a test passed exception which will be caught
286.174 + // and end the test.
286.175 + theTestPassed = true;
286.176 + throw new TestPassedException();
286.177 + }
286.178 + theTestPassed = true;
286.179 + testGeneratedInterrupt = true;
286.180 + mainThread.interrupt();
286.181 + }//pass()
286.182 +
286.183 + public static synchronized void fail()
286.184 + {
286.185 + //test writer didn't specify why test failed, so give generic
286.186 + fail( "it just plain failed! :-)" );
286.187 + }
286.188 +
286.189 + public static synchronized void fail( String whyFailed )
286.190 + {
286.191 + Sysout.println( "The test failed: " + whyFailed );
286.192 + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
286.193 + //check if this called from main thread
286.194 + if ( mainThread == Thread.currentThread() )
286.195 + {
286.196 + //If main thread, fail now 'cause not sleeping
286.197 + throw new RuntimeException( whyFailed );
286.198 + }
286.199 + theTestPassed = false;
286.200 + testGeneratedInterrupt = true;
286.201 + failureMessage = whyFailed;
286.202 + mainThread.interrupt();
286.203 + }//fail()
286.204 +
286.205 +}// class GetSizeShouldNotReturnZero
286.206 +
286.207 +//This exception is used to exit from any level of call nesting
286.208 +// when it's determined that the test has passed, and immediately
286.209 +// end the test.
286.210 +class TestPassedException extends RuntimeException
286.211 +{
286.212 +}
286.213 +
286.214 +//*********** End Standard Test Machinery Section **********
286.215 +
286.216 +
286.217 +//************ Begin classes defined for the test ****************
286.218 +
286.219 +// if want to make listeners, here is the recommended place for them, then instantiate
286.220 +// them in init()
286.221 +
286.222 +/* Example of a class which may be written as part of a test
286.223 +class NewClass implements anInterface
286.224 + {
286.225 + static int newVar = 0;
286.226 +
286.227 + public void eventDispatched(AWTEvent e)
286.228 + {
286.229 + //Counting events to see if we get enough
286.230 + eventCount++;
286.231 +
286.232 + if( eventCount == 20 )
286.233 + {
286.234 + //got enough events, so pass
286.235 +
286.236 + GetSizeShouldNotReturnZero.pass();
286.237 + }
286.238 + else if( tries == 20 )
286.239 + {
286.240 + //tried too many times without getting enough events so fail
286.241 +
286.242 + GetSizeShouldNotReturnZero.fail();
286.243 + }
286.244 +
286.245 + }// eventDispatched()
286.246 +
286.247 + }// NewClass class
286.248 +
286.249 +*/
286.250 +
286.251 +
286.252 +//************** End classes defined for the test *******************
286.253 +
286.254 +
286.255 +
286.256 +
286.257 +/****************************************************
286.258 + Standard Test Machinery
286.259 + DO NOT modify anything below -- it's a standard
286.260 + chunk of code whose purpose is to make user
286.261 + interaction uniform, and thereby make it simpler
286.262 + to read and understand someone else's test.
286.263 + ****************************************************/
286.264 +
286.265 +/**
286.266 + This is part of the standard test machinery.
286.267 + It creates a dialog (with the instructions), and is the interface
286.268 + for sending text messages to the user.
286.269 + To print the instructions, send an array of strings to Sysout.createDialog
286.270 + WithInstructions method. Put one line of instructions per array entry.
286.271 + To display a message for the tester to see, simply call Sysout.println
286.272 + with the string to be displayed.
286.273 + This mimics System.out.println but works within the test harness as well
286.274 + as standalone.
286.275 + */
286.276 +
286.277 +class Sysout
286.278 +{
286.279 + private static TestDialog dialog;
286.280 +
286.281 + public static void createDialogWithInstructions( String[] instructions )
286.282 + {
286.283 + dialog = new TestDialog( new Frame(), "Instructions" );
286.284 + dialog.printInstructions( instructions );
286.285 + dialog.setVisible(true);
286.286 + println( "Any messages for the tester will display here." );
286.287 + }
286.288 +
286.289 + public static void createDialog( )
286.290 + {
286.291 + dialog = new TestDialog( new Frame(), "Instructions" );
286.292 + String[] defInstr = { "Instructions will appear here. ", "" } ;
286.293 + dialog.printInstructions( defInstr );
286.294 + dialog.setVisible(true);
286.295 + println( "Any messages for the tester will display here." );
286.296 + }
286.297 +
286.298 +
286.299 + public static void printInstructions( String[] instructions )
286.300 + {
286.301 + dialog.printInstructions( instructions );
286.302 + }
286.303 +
286.304 +
286.305 + public static void println( String messageIn )
286.306 + {
286.307 + dialog.displayMessage( messageIn );
286.308 + System.out.println(messageIn);
286.309 + }
286.310 +
286.311 +}// Sysout class
286.312 +
286.313 +/**
286.314 + This is part of the standard test machinery. It provides a place for the
286.315 + test instructions to be displayed, and a place for interactive messages
286.316 + to the user to be displayed.
286.317 + To have the test instructions displayed, see Sysout.
286.318 + To have a message to the user be displayed, see Sysout.
286.319 + Do not call anything in this dialog directly.
286.320 + */
286.321 +class TestDialog extends Dialog
286.322 +{
286.323 +
286.324 + TextArea instructionsText;
286.325 + TextArea messageText;
286.326 + int maxStringLength = 80;
286.327 +
286.328 + //DO NOT call this directly, go through Sysout
286.329 + public TestDialog( Frame frame, String name )
286.330 + {
286.331 + super( frame, name );
286.332 + int scrollBoth = TextArea.SCROLLBARS_BOTH;
286.333 + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
286.334 + add( "North", instructionsText );
286.335 +
286.336 + messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
286.337 + add("Center", messageText);
286.338 +
286.339 + pack();
286.340 +
286.341 + setVisible(true);
286.342 + }// TestDialog()
286.343 +
286.344 + //DO NOT call this directly, go through Sysout
286.345 + public void printInstructions( String[] instructions )
286.346 + {
286.347 + //Clear out any current instructions
286.348 + instructionsText.setText( "" );
286.349 +
286.350 + //Go down array of instruction strings
286.351 +
286.352 + String printStr, remainingStr;
286.353 + for( int i=0; i < instructions.length; i++ )
286.354 + {
286.355 + //chop up each into pieces maxSringLength long
286.356 + remainingStr = instructions[ i ];
286.357 + while( remainingStr.length() > 0 )
286.358 + {
286.359 + //if longer than max then chop off first max chars to print
286.360 + if( remainingStr.length() >= maxStringLength )
286.361 + {
286.362 + //Try to chop on a word boundary
286.363 + int posOfSpace = remainingStr.
286.364 + lastIndexOf( ' ', maxStringLength - 1 );
286.365 +
286.366 + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
286.367 +
286.368 + printStr = remainingStr.substring( 0, posOfSpace + 1 );
286.369 + remainingStr = remainingStr.substring( posOfSpace + 1 );
286.370 + }
286.371 + //else just print
286.372 + else
286.373 + {
286.374 + printStr = remainingStr;
286.375 + remainingStr = "";
286.376 + }
286.377 +
286.378 + instructionsText.append( printStr + "\n" );
286.379 +
286.380 + }// while
286.381 +
286.382 + }// for
286.383 +
286.384 + }//printInstructions()
286.385 +
286.386 + //DO NOT call this directly, go through Sysout
286.387 + public void displayMessage( String messageIn )
286.388 + {
286.389 + messageText.append( messageIn + "\n" );
286.390 + System.out.println(messageIn);
286.391 + }
286.392 +
286.393 +}// TestDialog class
286.394 +
286.395 +
287.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
287.2 +++ b/test/com/sun/awt/Translucency/TranslucentJAppletTest/TranslucentJAppletTest.java Thu Apr 16 19:10:32 2009 -0700
287.3 @@ -0,0 +1,103 @@
287.4 +/*
287.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
287.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
287.7 + *
287.8 + * This code is free software; you can redistribute it and/or modify it
287.9 + * under the terms of the GNU General Public License version 2 only, as
287.10 + * published by the Free Software Foundation.
287.11 + *
287.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
287.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
287.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
287.15 + * version 2 for more details (a copy is included in the LICENSE file that
287.16 + * accompanied this code).
287.17 + *
287.18 + * You should have received a copy of the GNU General Public License version
287.19 + * 2 along with this work; if not, write to the Free Software Foundation,
287.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
287.21 + *
287.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
287.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
287.24 + * have any questions.
287.25 + */
287.26 +
287.27 +/*
287.28 + * @test %I% %E%
287.29 + * @bug 6683728
287.30 + * @summary Tests that a JApplet in a translucent JFrame works properly
287.31 + * @author Kenneth.Russell@sun.com: area=Graphics
287.32 + * @compile -XDignore.symbol.file=true TranslucentJAppletTest.java
287.33 + * @run main/manual/othervm TranslucentJAppletTest
287.34 + */
287.35 +
287.36 +import java.awt.*;
287.37 +import java.awt.image.*;
287.38 +
287.39 +import javax.swing.*;
287.40 +
287.41 +public class TranslucentJAppletTest {
287.42 +
287.43 + private static JFrame frame;
287.44 + private static volatile boolean paintComponentCalled = false;
287.45 +
287.46 + private static void initAndShowGUI() {
287.47 + frame = new JFrame();
287.48 + JApplet applet = new JApplet();
287.49 + JPanel panel = new JPanel() {
287.50 + protected void paintComponent(Graphics g) {
287.51 + paintComponentCalled = true;
287.52 + g.setColor(Color.RED);
287.53 + g.fillOval(0, 0, getWidth(), getHeight());
287.54 + }
287.55 + };
287.56 + panel.setDoubleBuffered(false);
287.57 + panel.setOpaque(false);
287.58 + applet.add(panel);
287.59 + frame.add(applet);
287.60 + frame.setBounds(100, 100, 200, 200);
287.61 + frame.setUndecorated(true);
287.62 + com.sun.awt.AWTUtilities.setWindowOpaque(frame, false);
287.63 + frame.setVisible(true);
287.64 + }
287.65 +
287.66 + public static void main(String[] args)
287.67 + throws Exception
287.68 + {
287.69 + sun.awt.SunToolkit tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit();
287.70 +
287.71 + Robot r = new Robot();
287.72 + Color color1 = r.getPixelColor(100, 100); // (0, 0) in frame coordinates
287.73 +
287.74 + SwingUtilities.invokeAndWait(new Runnable() {
287.75 + public void run() {
287.76 + initAndShowGUI();
287.77 + }
287.78 + });
287.79 + tk.realSync();
287.80 +
287.81 + if (!paintComponentCalled) {
287.82 + throw new RuntimeException("Test FAILED: panel's paintComponent() method is not called");
287.83 + }
287.84 +
287.85 + Color newColor1 = r.getPixelColor(100, 100);
287.86 + // unfortunately, robot.getPixelColor() doesn't work for some unknown reason
287.87 + // Color newColor2 = r.getPixelColor(200, 200);
287.88 + BufferedImage bim = r.createScreenCapture(new Rectangle(200, 200, 1, 1));
287.89 + Color newColor2 = new Color(bim.getRGB(0, 0));
287.90 +
287.91 + // Frame must be transparent at (100, 100) in screen coords
287.92 + if (!color1.equals(newColor1)) {
287.93 + System.err.println("color1 = " + color1);
287.94 + System.err.println("newColor1 = " + newColor1);
287.95 + throw new RuntimeException("Test FAILED: frame pixel at (0, 0) is not transparent");
287.96 + }
287.97 +
287.98 + // Frame must be RED at (200, 200) in screen coords
287.99 + if (!newColor2.equals(Color.RED)) {
287.100 + System.err.println("newColor2 = " + newColor2);
287.101 + throw new RuntimeException("Test FAILED: frame pixel at (100, 100) is not red (transparent?)");
287.102 + }
287.103 +
287.104 + System.out.println("Test PASSED");
287.105 + }
287.106 +}
288.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
288.2 +++ b/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TSFrame.java Thu Apr 16 19:10:32 2009 -0700
288.3 @@ -0,0 +1,306 @@
288.4 +/*
288.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
288.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
288.7 + *
288.8 + * This code is free software; you can redistribute it and/or modify it
288.9 + * under the terms of the GNU General Public License version 2 only, as
288.10 + * published by the Free Software Foundation. Sun designates this
288.11 + * particular file as subject to the "Classpath" exception as provided
288.12 + * by Sun in the LICENSE file that accompanied this code.
288.13 + *
288.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
288.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
288.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
288.17 + * version 2 for more details (a copy is included in the LICENSE file that
288.18 + * accompanied this code).
288.19 + *
288.20 + * You should have received a copy of the GNU General Public License version
288.21 + * 2 along with this work; if not, write to the Free Software Foundation,
288.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
288.23 + *
288.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
288.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
288.26 + * have any questions.
288.27 + */
288.28 +
288.29 +import com.sun.awt.AWTUtilities;
288.30 +import static com.sun.awt.AWTUtilities.Translucency.*;
288.31 +import java.awt.BorderLayout;
288.32 +import java.awt.Color;
288.33 +import java.awt.Dimension;
288.34 +import java.awt.Frame;
288.35 +import java.awt.Graphics;
288.36 +import java.awt.GraphicsConfiguration;
288.37 +import java.awt.GraphicsEnvironment;
288.38 +import java.awt.RenderingHints;
288.39 +import java.awt.event.MouseAdapter;
288.40 +import java.awt.event.MouseEvent;
288.41 +import java.awt.event.WindowAdapter;
288.42 +import java.awt.event.WindowEvent;
288.43 +import java.awt.Canvas;
288.44 +import java.awt.Component;
288.45 +import java.awt.GradientPaint;
288.46 +import java.awt.Graphics2D;
288.47 +import java.awt.Paint;
288.48 +import java.util.Random;
288.49 +import java.awt.geom.Ellipse2D;
288.50 +import javax.swing.JApplet;
288.51 +import javax.swing.JButton;
288.52 +import javax.swing.JComponent;
288.53 +import javax.swing.JFrame;
288.54 +import javax.swing.JPanel;
288.55 +import javax.swing.SwingUtilities;
288.56 +
288.57 +public class TSFrame {
288.58 +
288.59 + static volatile boolean done = false;
288.60 +
288.61 + static final boolean useSwing = System.getProperty("useswing") != null;
288.62 + static final boolean useShape = System.getProperty("useshape") != null;
288.63 + static final boolean useTransl = System.getProperty("usetransl") != null;
288.64 + static final boolean useNonOpaque = System.getProperty("usenonop") != null;
288.65 +
288.66 + static final Random rnd = new Random();
288.67 + private static void render(Graphics g, int w, int h, boolean useNonOpaque) {
288.68 + if (useNonOpaque) {
288.69 + Graphics2D g2d = (Graphics2D)g;
288.70 + GradientPaint p =
288.71 + new GradientPaint(0.0f, 0.0f,
288.72 + new Color(rnd.nextInt(0xffffff)),
288.73 + w, h,
288.74 + new Color(rnd.nextInt(0xff),
288.75 + rnd.nextInt(0xff),
288.76 + rnd.nextInt(0xff), 0),
288.77 + true);
288.78 + g2d.setPaint(p);
288.79 + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
288.80 + RenderingHints.VALUE_ANTIALIAS_ON);
288.81 + g2d.fillOval(0, 0, w, h);
288.82 + } else {
288.83 + g.setColor(new Color(rnd.nextInt(0xffffff)));
288.84 + g.fillRect(0, 0, w, h);
288.85 + }
288.86 + }
288.87 +
288.88 + private static class MyCanvas extends Canvas {
288.89 + @Override
288.90 + public void paint(Graphics g) {
288.91 + render(g, getWidth(), getHeight(), false);
288.92 + }
288.93 + @Override
288.94 + public Dimension getPreferredSize() {
288.95 + return new Dimension(200, 100);
288.96 + }
288.97 + }
288.98 + private static class NonOpaqueJFrame extends JFrame {
288.99 + NonOpaqueJFrame(GraphicsConfiguration gc) {
288.100 + super("NonOpaque Swing JFrame", gc);
288.101 + JPanel p = new JPanel() {
288.102 + public void paintComponent(Graphics g) {
288.103 + super.paintComponent(g);
288.104 + render(g, getWidth(), getHeight(), true);
288.105 + g.setColor(Color.red);
288.106 + g.drawString("Non-Opaque Swing JFrame", 10, 15);
288.107 + }
288.108 + };
288.109 + p.setDoubleBuffered(false);
288.110 + p.setOpaque(false);
288.111 + add(p);
288.112 + setUndecorated(true);
288.113 + }
288.114 + }
288.115 + private static class NonOpaqueJAppletFrame extends JFrame {
288.116 + JPanel p;
288.117 + NonOpaqueJAppletFrame(GraphicsConfiguration gc) {
288.118 + super("NonOpaque Swing JAppletFrame", gc);
288.119 + JApplet ja = new JApplet() {
288.120 + public void paint(Graphics g) {
288.121 + super.paint(g);
288.122 + System.err.println("JAppletFrame paint called");
288.123 + }
288.124 + };
288.125 + p = new JPanel() {
288.126 + public void paintComponent(Graphics g) {
288.127 + super.paintComponent(g);
288.128 + render(g, getWidth(), getHeight(), true);
288.129 + g.setColor(Color.red);
288.130 + g.drawString("Non-Opaque Swing JFrame", 10, 15);
288.131 + }
288.132 + };
288.133 + p.setDoubleBuffered(false);
288.134 + p.setOpaque(false);
288.135 + ja.add(p);
288.136 + add(ja);
288.137 + setUndecorated(true);
288.138 + }
288.139 + }
288.140 + private static class NonOpaqueFrame extends Frame {
288.141 + NonOpaqueFrame(GraphicsConfiguration gc) {
288.142 + super("NonOpaque AWT Frame", gc);
288.143 + // uncomment to test with hw child
288.144 +// setLayout(null);
288.145 +// Component c = new Panel() {
288.146 +// public void paint(Graphics g) {
288.147 +// g.setColor(new Color(1.0f, 1.0f, 1.0f, 0.5f));
288.148 +// g.fillRect(0, 0, getWidth(), getHeight());
288.149 +// }
288.150 +// };
288.151 +// c.setSize(100, 100);
288.152 +// c.setBackground(Color.red);
288.153 +// c.setForeground(Color.red);
288.154 +// add(c);
288.155 +// c.setLocation(130, 130);
288.156 + }
288.157 + @Override
288.158 + public void paint(Graphics g) {
288.159 + render(g, getWidth(), getHeight(), true);
288.160 + g.setColor(Color.red);
288.161 + g.drawString("Non-Opaque AWT Frame", 10, 15);
288.162 + }
288.163 + }
288.164 +
288.165 + private static class MyJPanel extends JPanel {
288.166 + @Override
288.167 + public void paintComponent(Graphics g) {
288.168 + render(g, getWidth(), getHeight(), false);
288.169 + }
288.170 + }
288.171 +
288.172 + public static Frame createGui(GraphicsConfiguration gc,
288.173 + final boolean useSwing,
288.174 + final boolean useShape,
288.175 + final boolean useTransl,
288.176 + final boolean useNonOpaque,
288.177 + final float factor)
288.178 + {
288.179 + Frame frame;
288.180 + done = false;
288.181 +
288.182 + if (gc == null) {
288.183 + gc = GraphicsEnvironment.getLocalGraphicsEnvironment().
288.184 + getDefaultScreenDevice().getDefaultConfiguration();
288.185 + }
288.186 +
288.187 + if (useNonOpaque) {
288.188 + if (useSwing) {
288.189 + frame = new NonOpaqueJFrame(gc);
288.190 +// frame = new NonOpaqueJAppletFrame(gc);
288.191 + } else {
288.192 + frame = new NonOpaqueFrame(gc);
288.193 + }
288.194 + animateComponent(frame);
288.195 + } else if (useSwing) {
288.196 + frame = new JFrame("Swing Frame", gc);
288.197 + JComponent p = new JButton("Swing!");
288.198 + p.setPreferredSize(new Dimension(200, 100));
288.199 + frame.add("North", p);
288.200 + p = new MyJPanel();
288.201 + animateComponent(p);
288.202 + frame.add("Center", p);
288.203 + } else {
288.204 + frame = new Frame("AWT Frame", gc) {
288.205 + public void paint(Graphics g) {
288.206 + g.setColor(Color.red);
288.207 + g.fillRect(0, 0, 100, 100);
288.208 + }
288.209 + };
288.210 + frame.setLayout(new BorderLayout());
288.211 + Canvas c = new MyCanvas();
288.212 + frame.add("North", c);
288.213 + animateComponent(c);
288.214 + c = new MyCanvas();
288.215 + frame.add("Center", c);
288.216 + animateComponent(c);
288.217 + c = new MyCanvas();
288.218 + frame.add("South", c);
288.219 + animateComponent(c);
288.220 + }
288.221 + final Frame finalFrame = frame;
288.222 + frame.addWindowListener(new WindowAdapter() {
288.223 + @Override
288.224 + public void windowClosing(WindowEvent e) {
288.225 + finalFrame.dispose();
288.226 + done = true;
288.227 + }
288.228 + });
288.229 + frame.addMouseListener(new MouseAdapter() {
288.230 + @Override
288.231 + public void mouseClicked(MouseEvent e) {
288.232 + finalFrame.dispose();
288.233 + done = true;
288.234 + }
288.235 + });
288.236 + frame.setPreferredSize(new Dimension(800, 600));
288.237 +
288.238 + if (useShape) {
288.239 + frame.setUndecorated(true);
288.240 + }
288.241 +
288.242 + frame.setLocation(450, 10);
288.243 + frame.pack();
288.244 +
288.245 + if (useShape) {
288.246 + if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSPARENT)) {
288.247 + System.out.println("applying PERPIXEL_TRANSPARENT");
288.248 + AWTUtilities.setWindowShape(frame,
288.249 + new Ellipse2D.Double(0, 0, frame.getWidth(),
288.250 + frame.getHeight()/3));
288.251 + frame.setTitle("PERPIXEL_TRANSPARENT");
288.252 + } else {
288.253 + System.out.println("Passed: PERPIXEL_TRANSPARENT unsupported");
288.254 + }
288.255 + }
288.256 + if (useTransl) {
288.257 + if (AWTUtilities.isTranslucencySupported(TRANSLUCENT)) {
288.258 + System.out.println("applying TRANSLUCENT");
288.259 + AWTUtilities.setWindowOpacity(frame, factor);
288.260 + frame.setTitle("TRANSLUCENT");
288.261 + } else {
288.262 + System.out.println("Passed: TRANSLUCENT unsupported");
288.263 + }
288.264 + }
288.265 + if (useNonOpaque) {
288.266 + if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSLUCENT) &&
288.267 + AWTUtilities.isTranslucencyCapable(gc))
288.268 + {
288.269 + System.out.println("applying PERPIXEL_TRANSLUCENT");
288.270 + AWTUtilities.setWindowOpaque(frame, false);
288.271 + frame.setTitle("PERPIXEL_TRANSLUCENT");
288.272 + } else {
288.273 + System.out.println("Passed: PERPIXEL_TRANSLUCENT unsupported");
288.274 + }
288.275 + }
288.276 + frame.setVisible(true);
288.277 + return frame;
288.278 + }
288.279 +
288.280 + public static void stopThreads() {
288.281 + done = true;
288.282 + }
288.283 +
288.284 + private static void animateComponent(final Component comp) {
288.285 + Thread t = new Thread(new Runnable() {
288.286 + public void run() {
288.287 + do {
288.288 + try {
288.289 + Thread.sleep(50);
288.290 + } catch (InterruptedException ex) {}
288.291 + comp.repaint();
288.292 + } while (!done);
288.293 + }
288.294 + });
288.295 + t.start();
288.296 + }
288.297 +
288.298 + public static void main(String[] args) throws Exception {
288.299 + SwingUtilities.invokeLater(new Runnable() {
288.300 + public void run() {
288.301 + TSFrame.createGui(null, useSwing,
288.302 + useShape,
288.303 + useTransl,
288.304 + useNonOpaque,
288.305 + 0.7f);
288.306 + }
288.307 + });
288.308 + }
288.309 +}
289.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
289.2 +++ b/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.form Thu Apr 16 19:10:32 2009 -0700
289.3 @@ -0,0 +1,230 @@
289.4 +<?xml version="1.0" encoding="UTF-8" ?>
289.5 +
289.6 +<Form version="1.3" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
289.7 + <NonVisualComponents>
289.8 + <Component class="javax.swing.ButtonGroup" name="createDisposeGrp">
289.9 + </Component>
289.10 + </NonVisualComponents>
289.11 + <Properties>
289.12 + <Property name="defaultCloseOperation" type="int" value="3"/>
289.13 + <Property name="title" type="java.lang.String" value="TranslucentShapedFrameTest"/>
289.14 + </Properties>
289.15 + <SyntheticProperties>
289.16 + <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
289.17 + </SyntheticProperties>
289.18 + <AuxValues>
289.19 + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
289.20 + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
289.21 + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
289.22 + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
289.23 + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
289.24 + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
289.25 + </AuxValues>
289.26 +
289.27 + <Layout>
289.28 + <DimensionLayout dim="0">
289.29 + <Group type="103" groupAlignment="0" attributes="0">
289.30 + <Group type="102" attributes="0">
289.31 + <EmptySpace max="-2" attributes="0"/>
289.32 + <Group type="103" groupAlignment="0" attributes="0">
289.33 + <Group type="102" alignment="0" attributes="0">
289.34 + <Component id="transparencySld" pref="375" max="32767" attributes="0"/>
289.35 + <EmptySpace max="-2" attributes="0"/>
289.36 + </Group>
289.37 + <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
289.38 + <Group type="102" alignment="0" attributes="0">
289.39 + <Component id="shapedCb" min="-2" max="-2" attributes="0"/>
289.40 + <EmptySpace max="-2" attributes="0"/>
289.41 + <Component id="nonOpaqueChb" min="-2" max="-2" attributes="0"/>
289.42 + <EmptySpace max="-2" attributes="0"/>
289.43 + <Component id="useSwingCb" min="-2" max="-2" attributes="0"/>
289.44 + <EmptySpace pref="102" max="32767" attributes="0"/>
289.45 + </Group>
289.46 + <Group type="102" alignment="0" attributes="0">
289.47 + <Group type="103" groupAlignment="0" attributes="0">
289.48 + <Group type="102" alignment="0" attributes="0">
289.49 + <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
289.50 + <EmptySpace pref="314" max="-2" attributes="0"/>
289.51 + </Group>
289.52 + <Group type="102" alignment="0" attributes="0">
289.53 + <Component id="passedBtn" min="-2" max="-2" attributes="0"/>
289.54 + <EmptySpace max="-2" attributes="0"/>
289.55 + <Component id="failedBtn" min="-2" max="-2" attributes="0"/>
289.56 + <EmptySpace pref="241" max="-2" attributes="0"/>
289.57 + </Group>
289.58 + <Component id="jScrollPane1" alignment="1" pref="375" max="32767" attributes="0"/>
289.59 + <Group type="102" alignment="0" attributes="0">
289.60 + <Component id="createFrameBtn" min="-2" pref="187" max="-2" attributes="0"/>
289.61 + <EmptySpace max="-2" attributes="0"/>
289.62 + <Component id="disposeFrameBtn" min="-2" pref="182" max="-2" attributes="0"/>
289.63 + </Group>
289.64 + </Group>
289.65 + <EmptySpace max="-2" attributes="0"/>
289.66 + </Group>
289.67 + </Group>
289.68 + </Group>
289.69 + </Group>
289.70 + </DimensionLayout>
289.71 + <DimensionLayout dim="1">
289.72 + <Group type="103" groupAlignment="0" attributes="0">
289.73 + <Group type="102" alignment="0" attributes="0">
289.74 + <EmptySpace max="-2" attributes="0"/>
289.75 + <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
289.76 + <EmptySpace max="-2" attributes="0"/>
289.77 + <Component id="transparencySld" min="-2" max="-2" attributes="0"/>
289.78 + <EmptySpace max="-2" attributes="0"/>
289.79 + <Group type="103" groupAlignment="3" attributes="0">
289.80 + <Component id="shapedCb" alignment="3" min="-2" max="-2" attributes="0"/>
289.81 + <Component id="nonOpaqueChb" alignment="3" min="-2" max="-2" attributes="0"/>
289.82 + <Component id="useSwingCb" alignment="3" min="-2" max="-2" attributes="0"/>
289.83 + </Group>
289.84 + <EmptySpace max="-2" attributes="0"/>
289.85 + <Group type="103" groupAlignment="3" attributes="0">
289.86 + <Component id="disposeFrameBtn" alignment="3" min="-2" max="-2" attributes="0"/>
289.87 + <Component id="createFrameBtn" alignment="3" min="-2" max="-2" attributes="0"/>
289.88 + </Group>
289.89 + <EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
289.90 + <Component id="jLabel2" min="-2" max="-2" attributes="0"/>
289.91 + <EmptySpace max="-2" attributes="0"/>
289.92 + <Component id="jScrollPane1" min="-2" pref="148" max="-2" attributes="0"/>
289.93 + <EmptySpace max="-2" attributes="0"/>
289.94 + <Group type="103" groupAlignment="3" attributes="0">
289.95 + <Component id="passedBtn" alignment="3" min="-2" max="-2" attributes="0"/>
289.96 + <Component id="failedBtn" alignment="3" min="-2" max="-2" attributes="0"/>
289.97 + </Group>
289.98 + <EmptySpace max="32767" attributes="0"/>
289.99 + </Group>
289.100 + </Group>
289.101 + </DimensionLayout>
289.102 + </Layout>
289.103 + <SubComponents>
289.104 + <Component class="javax.swing.JLabel" name="jLabel1">
289.105 + <Properties>
289.106 + <Property name="text" type="java.lang.String" value="Frame Opacity:"/>
289.107 + </Properties>
289.108 + </Component>
289.109 + <Component class="javax.swing.JSlider" name="transparencySld">
289.110 + <Properties>
289.111 + <Property name="majorTickSpacing" type="int" value="10"/>
289.112 + <Property name="minorTickSpacing" type="int" value="5"/>
289.113 + <Property name="paintLabels" type="boolean" value="true"/>
289.114 + <Property name="paintTicks" type="boolean" value="true"/>
289.115 + <Property name="value" type="int" value="100"/>
289.116 + </Properties>
289.117 + <Events>
289.118 + <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySldStateChanged"/>
289.119 + </Events>
289.120 + </Component>
289.121 + <Component class="javax.swing.JCheckBox" name="shapedCb">
289.122 + <Properties>
289.123 + <Property name="text" type="java.lang.String" value="Shaped Frame"/>
289.124 + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
289.125 + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
289.126 + <EmptyBorder bottom="0" left="0" right="0" top="0"/>
289.127 + </Border>
289.128 + </Property>
289.129 + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
289.130 + <Insets value="[0, 0, 0, 0]"/>
289.131 + </Property>
289.132 + </Properties>
289.133 + <Events>
289.134 + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="shapedCbActionPerformed"/>
289.135 + </Events>
289.136 + </Component>
289.137 + <Component class="javax.swing.JCheckBox" name="nonOpaqueChb">
289.138 + <Properties>
289.139 + <Property name="text" type="java.lang.String" value="Non Opaque Frame"/>
289.140 + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
289.141 + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
289.142 + <EmptyBorder bottom="0" left="0" right="0" top="0"/>
289.143 + </Border>
289.144 + </Property>
289.145 + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
289.146 + <Insets value="[0, 0, 0, 0]"/>
289.147 + </Property>
289.148 + </Properties>
289.149 + <Events>
289.150 + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nonOpaqueChbActionPerformed"/>
289.151 + </Events>
289.152 + </Component>
289.153 + <Container class="javax.swing.JScrollPane" name="jScrollPane1">
289.154 + <AuxValues>
289.155 + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
289.156 + </AuxValues>
289.157 +
289.158 + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
289.159 + <SubComponents>
289.160 + <Component class="javax.swing.JTextArea" name="jTextArea1">
289.161 + <Properties>
289.162 + <Property name="columns" type="int" value="20"/>
289.163 + <Property name="rows" type="int" value="5"/>
289.164 + <Property name="text" type="java.lang.String" value="Create translucent and/or shaped, or
non-opaque frame. Make sure it behaves
correctly (no artifacts left on the screen
when dragging - if dragging is possible).
Click "Passed" if the test behaves correctly,
"Falied" otherwise."/>
289.165 + </Properties>
289.166 + </Component>
289.167 + </SubComponents>
289.168 + </Container>
289.169 + <Component class="javax.swing.JLabel" name="jLabel2">
289.170 + <Properties>
289.171 + <Property name="text" type="java.lang.String" value="Instructions:"/>
289.172 + </Properties>
289.173 + </Component>
289.174 + <Component class="javax.swing.JButton" name="passedBtn">
289.175 + <Properties>
289.176 + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
289.177 + <Color blue="64" green="ff" red="81" type="rgb"/>
289.178 + </Property>
289.179 + <Property name="text" type="java.lang.String" value="Passed"/>
289.180 + </Properties>
289.181 + <Events>
289.182 + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="passedBtnActionPerformed"/>
289.183 + </Events>
289.184 + </Component>
289.185 + <Component class="javax.swing.JButton" name="failedBtn">
289.186 + <Properties>
289.187 + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
289.188 + <Color blue="0" green="0" id="red" palette="1" red="ff" type="palette"/>
289.189 + </Property>
289.190 + <Property name="text" type="java.lang.String" value="Failed"/>
289.191 + </Properties>
289.192 + <Events>
289.193 + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="failedBtnActionPerformed"/>
289.194 + </Events>
289.195 + </Component>
289.196 + <Component class="javax.swing.JToggleButton" name="createFrameBtn">
289.197 + <Properties>
289.198 + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
289.199 + <ComponentRef name="createDisposeGrp"/>
289.200 + </Property>
289.201 + <Property name="text" type="java.lang.String" value="Create Frame"/>
289.202 + </Properties>
289.203 + <Events>
289.204 + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createFrameBtnActionPerformed"/>
289.205 + </Events>
289.206 + </Component>
289.207 + <Component class="javax.swing.JToggleButton" name="disposeFrameBtn">
289.208 + <Properties>
289.209 + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
289.210 + <ComponentRef name="createDisposeGrp"/>
289.211 + </Property>
289.212 + <Property name="selected" type="boolean" value="true"/>
289.213 + <Property name="text" type="java.lang.String" value="Dispose Frame"/>
289.214 + </Properties>
289.215 + <Events>
289.216 + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="disposeFrameBtnActionPerformed"/>
289.217 + </Events>
289.218 + </Component>
289.219 + <Component class="javax.swing.JCheckBox" name="useSwingCb">
289.220 + <Properties>
289.221 + <Property name="text" type="java.lang.String" value="Use JFrame"/>
289.222 + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
289.223 + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
289.224 + <EmptyBorder bottom="0" left="0" right="0" top="0"/>
289.225 + </Border>
289.226 + </Property>
289.227 + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
289.228 + <Insets value="[0, 0, 0, 0]"/>
289.229 + </Property>
289.230 + </Properties>
289.231 + </Component>
289.232 + </SubComponents>
289.233 +</Form>
290.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
290.2 +++ b/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.java Thu Apr 16 19:10:32 2009 -0700
290.3 @@ -0,0 +1,359 @@
290.4 +/*
290.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
290.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
290.7 + *
290.8 + * This code is free software; you can redistribute it and/or modify it
290.9 + * under the terms of the GNU General Public License version 2 only, as
290.10 + * published by the Free Software Foundation. Sun designates this
290.11 + * particular file as subject to the "Classpath" exception as provided
290.12 + * by Sun in the LICENSE file that accompanied this code.
290.13 + *
290.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
290.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
290.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
290.17 + * version 2 for more details (a copy is included in the LICENSE file that
290.18 + * accompanied this code).
290.19 + *
290.20 + * You should have received a copy of the GNU General Public License version
290.21 + * 2 along with this work; if not, write to the Free Software Foundation,
290.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
290.23 + *
290.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
290.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
290.26 + * have any questions.
290.27 + */
290.28 +
290.29 +/*
290.30 + * @test %I% %E%
290.31 + * @bug 6655001 6670649 6687141
290.32 + * @summary Tests that hw acceleration doesn't affect translucent/shaped windows
290.33 + * @author Dmitri.Trembovetski@sun.com: area=Graphics
290.34 + * @compile -XDignore.symbol.file=true TranslucentShapedFrameTest.java
290.35 + * @compile -XDignore.symbol.file=true TSFrame.java
290.36 + * @run main/manual/othervm TranslucentShapedFrameTest
290.37 + * @run main/manual/othervm -Dsun.java2d.noddraw=true TranslucentShapedFrameTest
290.38 + * @run main/manual/othervm -Dsun.java2d.opengl=True TranslucentShapedFrameTest
290.39 + */
290.40 +import com.sun.awt.AWTUtilities;
290.41 +import static com.sun.awt.AWTUtilities.Translucency.*;
290.42 +import java.awt.Frame;
290.43 +import java.awt.GraphicsConfiguration;
290.44 +import java.awt.GraphicsDevice;
290.45 +import java.awt.GraphicsEnvironment;
290.46 +import java.awt.Shape;
290.47 +import java.awt.geom.Ellipse2D;
290.48 +import java.util.concurrent.CountDownLatch;
290.49 +import javax.swing.JSlider;
290.50 +import javax.swing.SwingUtilities;
290.51 +import javax.swing.UIManager;
290.52 +import javax.swing.UnsupportedLookAndFeelException;
290.53 +
290.54 +public class TranslucentShapedFrameTest extends javax.swing.JFrame {
290.55 + Frame testFrame;
290.56 + static CountDownLatch done;
290.57 + static volatile boolean failed = false;
290.58 + GraphicsConfiguration gcToUse = null;
290.59 +
290.60 + /**
290.61 + * Creates new form TranslucentShapedFrameTest
290.62 + */
290.63 + public TranslucentShapedFrameTest() {
290.64 + // not necessary, but we just look nicer
290.65 + try {
290.66 + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
290.67 + } catch (Exception ex) {}
290.68 +
290.69 + initComponents();
290.70 + checkEffects();
290.71 +
290.72 + SwingUtilities.updateComponentTreeUI(this);
290.73 + }
290.74 +
290.75 + /** This method is called from within the constructor to
290.76 + * initialize the form.
290.77 + * WARNING: Do NOT modify this code. The content of this method is
290.78 + * always regenerated by the Form Editor.
290.79 + */
290.80 + // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
290.81 + private void initComponents() {
290.82 + createDisposeGrp = new javax.swing.ButtonGroup();
290.83 + jLabel1 = new javax.swing.JLabel();
290.84 + transparencySld = new javax.swing.JSlider();
290.85 + shapedCb = new javax.swing.JCheckBox();
290.86 + nonOpaqueChb = new javax.swing.JCheckBox();
290.87 + jScrollPane1 = new javax.swing.JScrollPane();
290.88 + jTextArea1 = new javax.swing.JTextArea();
290.89 + jLabel2 = new javax.swing.JLabel();
290.90 + passedBtn = new javax.swing.JButton();
290.91 + failedBtn = new javax.swing.JButton();
290.92 + createFrameBtn = new javax.swing.JToggleButton();
290.93 + disposeFrameBtn = new javax.swing.JToggleButton();
290.94 + useSwingCb = new javax.swing.JCheckBox();
290.95 +
290.96 + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
290.97 + setTitle("TranslucentShapedFrameTest");
290.98 + jLabel1.setText("Frame Opacity:");
290.99 +
290.100 + transparencySld.setMajorTickSpacing(10);
290.101 + transparencySld.setMinorTickSpacing(5);
290.102 + transparencySld.setPaintLabels(true);
290.103 + transparencySld.setPaintTicks(true);
290.104 + transparencySld.setValue(100);
290.105 + transparencySld.addChangeListener(new javax.swing.event.ChangeListener() {
290.106 + public void stateChanged(javax.swing.event.ChangeEvent evt) {
290.107 + transparencySldStateChanged(evt);
290.108 + }
290.109 + });
290.110 +
290.111 + shapedCb.setText("Shaped Frame");
290.112 + shapedCb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
290.113 + shapedCb.setMargin(new java.awt.Insets(0, 0, 0, 0));
290.114 + shapedCb.addActionListener(new java.awt.event.ActionListener() {
290.115 + public void actionPerformed(java.awt.event.ActionEvent evt) {
290.116 + shapedCbActionPerformed(evt);
290.117 + }
290.118 + });
290.119 +
290.120 + nonOpaqueChb.setText("Non Opaque Frame");
290.121 + nonOpaqueChb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
290.122 + nonOpaqueChb.setMargin(new java.awt.Insets(0, 0, 0, 0));
290.123 + nonOpaqueChb.addActionListener(new java.awt.event.ActionListener() {
290.124 + public void actionPerformed(java.awt.event.ActionEvent evt) {
290.125 + nonOpaqueChbActionPerformed(evt);
290.126 + }
290.127 + });
290.128 +
290.129 + jTextArea1.setColumns(20);
290.130 + jTextArea1.setRows(5);
290.131 + jTextArea1.setText("Create translucent and/or shaped, or\nnon-opaque frame. Make sure it behaves\ncorrectly (no artifacts left on the screen\nwhen dragging - if dragging is possible).\nClick \"Passed\" if the test behaves correctly,\n\"Falied\" otherwise.");
290.132 + jScrollPane1.setViewportView(jTextArea1);
290.133 +
290.134 + jLabel2.setText("Instructions:");
290.135 +
290.136 + passedBtn.setBackground(new java.awt.Color(129, 255, 100));
290.137 + passedBtn.setText("Passed");
290.138 + passedBtn.addActionListener(new java.awt.event.ActionListener() {
290.139 + public void actionPerformed(java.awt.event.ActionEvent evt) {
290.140 + passedBtnActionPerformed(evt);
290.141 + }
290.142 + });
290.143 +
290.144 + failedBtn.setBackground(java.awt.Color.red);
290.145 + failedBtn.setText("Failed");
290.146 + failedBtn.addActionListener(new java.awt.event.ActionListener() {
290.147 + public void actionPerformed(java.awt.event.ActionEvent evt) {
290.148 + failedBtnActionPerformed(evt);
290.149 + }
290.150 + });
290.151 +
290.152 + createDisposeGrp.add(createFrameBtn);
290.153 + createFrameBtn.setText("Create Frame");
290.154 + createFrameBtn.addActionListener(new java.awt.event.ActionListener() {
290.155 + public void actionPerformed(java.awt.event.ActionEvent evt) {
290.156 + createFrameBtnActionPerformed(evt);
290.157 + }
290.158 + });
290.159 +
290.160 + createDisposeGrp.add(disposeFrameBtn);
290.161 + disposeFrameBtn.setSelected(true);
290.162 + disposeFrameBtn.setText("Dispose Frame");
290.163 + disposeFrameBtn.addActionListener(new java.awt.event.ActionListener() {
290.164 + public void actionPerformed(java.awt.event.ActionEvent evt) {
290.165 + disposeFrameBtnActionPerformed(evt);
290.166 + }
290.167 + });
290.168 +
290.169 + useSwingCb.setText("Use JFrame");
290.170 + useSwingCb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
290.171 + useSwingCb.setMargin(new java.awt.Insets(0, 0, 0, 0));
290.172 +
290.173 + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
290.174 + getContentPane().setLayout(layout);
290.175 + layout.setHorizontalGroup(
290.176 + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290.177 + .addGroup(layout.createSequentialGroup()
290.178 + .addContainerGap()
290.179 + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290.180 + .addGroup(layout.createSequentialGroup()
290.181 + .addComponent(transparencySld, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE)
290.182 + .addContainerGap())
290.183 + .addComponent(jLabel1)
290.184 + .addGroup(layout.createSequentialGroup()
290.185 + .addComponent(shapedCb)
290.186 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.187 + .addComponent(nonOpaqueChb)
290.188 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.189 + .addComponent(useSwingCb)
290.190 + .addContainerGap(102, Short.MAX_VALUE))
290.191 + .addGroup(layout.createSequentialGroup()
290.192 + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290.193 + .addGroup(layout.createSequentialGroup()
290.194 + .addComponent(jLabel2)
290.195 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 314, javax.swing.GroupLayout.PREFERRED_SIZE))
290.196 + .addGroup(layout.createSequentialGroup()
290.197 + .addComponent(passedBtn)
290.198 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.199 + .addComponent(failedBtn)
290.200 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 241, javax.swing.GroupLayout.PREFERRED_SIZE))
290.201 + .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE)
290.202 + .addGroup(layout.createSequentialGroup()
290.203 + .addComponent(createFrameBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
290.204 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.205 + .addComponent(disposeFrameBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)))
290.206 + .addContainerGap())))
290.207 + );
290.208 + layout.setVerticalGroup(
290.209 + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290.210 + .addGroup(layout.createSequentialGroup()
290.211 + .addContainerGap()
290.212 + .addComponent(jLabel1)
290.213 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.214 + .addComponent(transparencySld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
290.215 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.216 + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
290.217 + .addComponent(shapedCb)
290.218 + .addComponent(nonOpaqueChb)
290.219 + .addComponent(useSwingCb))
290.220 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.221 + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
290.222 + .addComponent(disposeFrameBtn)
290.223 + .addComponent(createFrameBtn))
290.224 + .addGap(17, 17, 17)
290.225 + .addComponent(jLabel2)
290.226 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.227 + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)
290.228 + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290.229 + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
290.230 + .addComponent(passedBtn)
290.231 + .addComponent(failedBtn))
290.232 + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
290.233 + );
290.234 + pack();
290.235 + }// </editor-fold>//GEN-END:initComponents
290.236 +
290.237 + private void nonOpaqueChbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nonOpaqueChbActionPerformed
290.238 + if (testFrame != null) {
290.239 + // REMIND: this path in the test doesn't work well (test bug)
290.240 +// AWTUtilities.setWindowOpaque(testFrame, !nonOpaqueChb.isSelected());
290.241 + }
290.242 + }//GEN-LAST:event_nonOpaqueChbActionPerformed
290.243 +
290.244 + private void shapedCbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_shapedCbActionPerformed
290.245 + if (testFrame != null) {
290.246 + Shape s = null;
290.247 + if (shapedCb.isSelected()) {
290.248 + s = new Ellipse2D.Double(0, 0,
290.249 + testFrame.getWidth(),
290.250 + testFrame.getHeight());
290.251 + }
290.252 + AWTUtilities.setWindowShape(testFrame, s);
290.253 + }
290.254 + }//GEN-LAST:event_shapedCbActionPerformed
290.255 +
290.256 + private void transparencySldStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySldStateChanged
290.257 + JSlider source = (JSlider)evt.getSource();
290.258 + int transl = transparencySld.getValue();
290.259 + if (testFrame != null) {
290.260 + AWTUtilities.setWindowOpacity(testFrame, (float)transl/100f);
290.261 + }
290.262 + }//GEN-LAST:event_transparencySldStateChanged
290.263 +
290.264 + private void failedBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_failedBtnActionPerformed
290.265 + disposeFrameBtnActionPerformed(evt);
290.266 + dispose();
290.267 + failed = true;
290.268 + done.countDown();
290.269 + }//GEN-LAST:event_failedBtnActionPerformed
290.270 +
290.271 + private void disposeFrameBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disposeFrameBtnActionPerformed
290.272 + TSFrame.stopThreads();
290.273 + if (testFrame != null) {
290.274 + testFrame.dispose();
290.275 + testFrame = null;
290.276 + }
290.277 + }//GEN-LAST:event_disposeFrameBtnActionPerformed
290.278 +
290.279 + private void createFrameBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createFrameBtnActionPerformed
290.280 + disposeFrameBtnActionPerformed(evt);
290.281 + int transl = transparencySld.getValue();
290.282 + testFrame = TSFrame.createGui(gcToUse,
290.283 + useSwingCb.isSelected(), shapedCb.isSelected(),
290.284 + (transl < 100), nonOpaqueChb.isSelected(),
290.285 + (float)transl/100f);
290.286 + }//GEN-LAST:event_createFrameBtnActionPerformed
290.287 +
290.288 + private void passedBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_passedBtnActionPerformed
290.289 + disposeFrameBtnActionPerformed(evt);
290.290 + dispose();
290.291 + done.countDown();
290.292 + }//GEN-LAST:event_passedBtnActionPerformed
290.293 +
290.294 + /**
290.295 + * @param args the command line arguments
290.296 + */
290.297 + public static void main(String args[]) {
290.298 + done = new CountDownLatch(1);
290.299 + java.awt.EventQueue.invokeLater(new Runnable() {
290.300 + public void run() {
290.301 + new TranslucentShapedFrameTest().setVisible(true);
290.302 + }
290.303 + });
290.304 + try {
290.305 + done.await();
290.306 + } catch (InterruptedException ex) {}
290.307 + if (failed) {
290.308 + throw new RuntimeException("Test FAILED");
290.309 + }
290.310 + System.out.println("Test PASSED");
290.311 + }
290.312 +
290.313 + private void checkEffects() {
290.314 + if (!AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSPARENT)) {
290.315 + shapedCb.setEnabled(false);
290.316 + }
290.317 +
290.318 + if (!AWTUtilities.isTranslucencySupported(TRANSLUCENT)) {
290.319 + transparencySld.setEnabled(false);
290.320 + }
290.321 +
290.322 + GraphicsConfiguration gc = null;
290.323 + if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSLUCENT)) {
290.324 + gc = findGraphicsConfig();
290.325 + if (gc == null) {
290.326 + nonOpaqueChb.setEnabled(false);
290.327 + }
290.328 + }
290.329 +
290.330 + gcToUse = gc;
290.331 + }
290.332 +
290.333 + private GraphicsConfiguration findGraphicsConfig() {
290.334 + GraphicsDevice gd =
290.335 + GraphicsEnvironment.getLocalGraphicsEnvironment().
290.336 + getDefaultScreenDevice();
290.337 + GraphicsConfiguration gcs[] = gd.getConfigurations();
290.338 + for (GraphicsConfiguration gc : gcs) {
290.339 + if (AWTUtilities.isTranslucencyCapable(gc)) {
290.340 + return gc;
290.341 + }
290.342 + }
290.343 + return null;
290.344 + }
290.345 +
290.346 + // Variables declaration - do not modify//GEN-BEGIN:variables
290.347 + private javax.swing.ButtonGroup createDisposeGrp;
290.348 + private javax.swing.JToggleButton createFrameBtn;
290.349 + private javax.swing.JToggleButton disposeFrameBtn;
290.350 + private javax.swing.JButton failedBtn;
290.351 + private javax.swing.JLabel jLabel1;
290.352 + private javax.swing.JLabel jLabel2;
290.353 + private javax.swing.JScrollPane jScrollPane1;
290.354 + private javax.swing.JTextArea jTextArea1;
290.355 + private javax.swing.JCheckBox nonOpaqueChb;
290.356 + private javax.swing.JButton passedBtn;
290.357 + private javax.swing.JCheckBox shapedCb;
290.358 + private javax.swing.JSlider transparencySld;
290.359 + private javax.swing.JCheckBox useSwingCb;
290.360 + // End of variables declaration//GEN-END:variables
290.361 +
290.362 +}
291.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
291.2 +++ b/test/com/sun/awt/Translucency/WindowOpacity.java Thu Apr 16 19:10:32 2009 -0700
291.3 @@ -0,0 +1,461 @@
291.4 +/*
291.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
291.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
291.7 + *
291.8 + * This code is free software; you can redistribute it and/or modify it
291.9 + * under the terms of the GNU General Public License version 2 only, as
291.10 + * published by the Free Software Foundation.
291.11 + *
291.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
291.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
291.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
291.15 + * version 2 for more details (a copy is included in the LICENSE file that
291.16 + * accompanied this code).
291.17 + *
291.18 + * You should have received a copy of the GNU General Public License version
291.19 + * 2 along with this work; if not, write to the Free Software Foundation,
291.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
291.21 + *
291.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
291.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
291.24 + * have any questions.
291.25 + */
291.26 +
291.27 +/*
291.28 + @test %W% %E%
291.29 + @bug 6594131
291.30 + @summary Tests the AWTUtilities.get/setWindowOpacity() methods
291.31 + @author anthony.petrov@...: area=awt.toplevel
291.32 + @run main WindowOpacity
291.33 +*/
291.34 +
291.35 +import java.awt.*;
291.36 +import java.awt.event.*;
291.37 +
291.38 +import com.sun.awt.AWTUtilities;
291.39 +import sun.awt.SunToolkit;
291.40 +
291.41 +public class WindowOpacity
291.42 +{
291.43 + //*** test-writer defined static variables go here ***
291.44 +
291.45 + private static void realSync() {
291.46 + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
291.47 + }
291.48 +
291.49 +
291.50 + private static void init()
291.51 + {
291.52 + //*** Create instructions for the user here ***
291.53 + String[] instructions =
291.54 + {
291.55 + "This is an AUTOMATIC test, simply wait until it is done.",
291.56 + "The result (passed or failed) will be shown in the",
291.57 + "message window below."
291.58 + };
291.59 + Sysout.createDialog( );
291.60 + Sysout.printInstructions( instructions );
291.61 +
291.62 + if (!AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT)) {
291.63 + System.out.println("Either the Toolkit or the native system does not support controlling the window opacity level.");
291.64 + pass();
291.65 + }
291.66 +
291.67 + boolean passed;
291.68 +
291.69 + Frame f = new Frame("Opacity test");
291.70 +
291.71 + passed = false;
291.72 + try {
291.73 + AWTUtilities.getWindowOpacity(null);
291.74 + } catch (NullPointerException e) {
291.75 + passed = true;
291.76 + }
291.77 + if (!passed) {
291.78 + fail("getWindowOpacity() allows passing null.");
291.79 + }
291.80 +
291.81 +
291.82 + passed = false;
291.83 + try {
291.84 + AWTUtilities.setWindowOpacity(null, 0.5f);
291.85 + } catch (NullPointerException e) {
291.86 + passed = true;
291.87 + }
291.88 + if (!passed) {
291.89 + fail("setWindowOpacity() allows passing null.");
291.90 + }
291.91 +
291.92 +
291.93 + float curOpacity = AWTUtilities.getWindowOpacity(f);
291.94 + if (curOpacity < 1.0f || curOpacity > 1.0f) {
291.95 + fail("getWindowOpacity() reports the initial opacity level other than 1.0: " + curOpacity);
291.96 + }
291.97 +
291.98 +
291.99 +
291.100 + passed = false;
291.101 + try {
291.102 + AWTUtilities.setWindowOpacity(f, -0.5f);
291.103 + } catch (IllegalArgumentException e) {
291.104 + passed = true;
291.105 + }
291.106 + if (!passed) {
291.107 + fail("setWindowOpacity() allows passing negative opacity level.");
291.108 + }
291.109 +
291.110 +
291.111 +
291.112 + passed = false;
291.113 + try {
291.114 + AWTUtilities.setWindowOpacity(f, 1.5f);
291.115 + } catch (IllegalArgumentException e) {
291.116 + passed = true;
291.117 + }
291.118 + if (!passed) {
291.119 + fail("setWindowOpacity() allows passing opacity level greater than 1.0.");
291.120 + }
291.121 +
291.122 +
291.123 + AWTUtilities.setWindowOpacity(f, 0.5f);
291.124 +
291.125 + curOpacity = AWTUtilities.getWindowOpacity(f);
291.126 + if (curOpacity < 0.5f || curOpacity > 0.5f) {
291.127 + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity: " + curOpacity);
291.128 + }
291.129 +
291.130 +
291.131 + AWTUtilities.setWindowOpacity(f, 0.75f);
291.132 +
291.133 + curOpacity = AWTUtilities.getWindowOpacity(f);
291.134 + if (curOpacity < 0.75f || curOpacity > 0.75f) {
291.135 + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity the second time: " + curOpacity);
291.136 + }
291.137 +
291.138 +
291.139 + f.setBounds(100, 100, 300, 200);
291.140 + f.setVisible(true);
291.141 +
291.142 + realSync();
291.143 +
291.144 + curOpacity = AWTUtilities.getWindowOpacity(f);
291.145 + if (curOpacity < 0.75f || curOpacity > 0.75f) {
291.146 + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity before showing the frame: " + curOpacity);
291.147 + }
291.148 +
291.149 +
291.150 +
291.151 + AWTUtilities.setWindowOpacity(f, 0.5f);
291.152 + realSync();
291.153 +
291.154 + curOpacity = AWTUtilities.getWindowOpacity(f);
291.155 + if (curOpacity < 0.5f || curOpacity > 0.5f) {
291.156 + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity after showing the frame: " + curOpacity);
291.157 + }
291.158 +
291.159 + WindowOpacity.pass();
291.160 +
291.161 + }//End init()
291.162 +
291.163 +
291.164 +
291.165 + /*****************************************************
291.166 + * Standard Test Machinery Section
291.167 + * DO NOT modify anything in this section -- it's a
291.168 + * standard chunk of code which has all of the
291.169 + * synchronisation necessary for the test harness.
291.170 + * By keeping it the same in all tests, it is easier
291.171 + * to read and understand someone else's test, as
291.172 + * well as insuring that all tests behave correctly
291.173 + * with the test harness.
291.174 + * There is a section following this for test-
291.175 + * classes
291.176 + ******************************************************/
291.177 + private static boolean theTestPassed = false;
291.178 + private static boolean testGeneratedInterrupt = false;
291.179 + private static String failureMessage = "";
291.180 +
291.181 + private static Thread mainThread = null;
291.182 +
291.183 + private static int sleepTime = 300000;
291.184 +
291.185 + // Not sure about what happens if multiple of this test are
291.186 + // instantiated in the same VM. Being static (and using
291.187 + // static vars), it aint gonna work. Not worrying about
291.188 + // it for now.
291.189 + public static void main( String args[] ) throws InterruptedException
291.190 + {
291.191 + mainThread = Thread.currentThread();
291.192 + try
291.193 + {
291.194 + init();
291.195 + }
291.196 + catch( TestPassedException e )
291.197 + {
291.198 + //The test passed, so just return from main and harness will
291.199 + // interepret this return as a pass
291.200 + return;
291.201 + }
291.202 + //At this point, neither test pass nor test fail has been
291.203 + // called -- either would have thrown an exception and ended the
291.204 + // test, so we know we have multiple threads.
291.205 +
291.206 + //Test involves other threads, so sleep and wait for them to
291.207 + // called pass() or fail()
291.208 + try
291.209 + {
291.210 + Thread.sleep( sleepTime );
291.211 + //Timed out, so fail the test
291.212 + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
291.213 + }
291.214 + catch (InterruptedException e)
291.215 + {
291.216 + //The test harness may have interrupted the test. If so, rethrow the exception
291.217 + // so that the harness gets it and deals with it.
291.218 + if( ! testGeneratedInterrupt ) throw e;
291.219 +
291.220 + //reset flag in case hit this code more than once for some reason (just safety)
291.221 + testGeneratedInterrupt = false;
291.222 +
291.223 + if ( theTestPassed == false )
291.224 + {
291.225 + throw new RuntimeException( failureMessage );
291.226 + }
291.227 + }
291.228 +
291.229 + }//main
291.230 +
291.231 + public static synchronized void setTimeoutTo( int seconds )
291.232 + {
291.233 + sleepTime = seconds * 1000;
291.234 + }
291.235 +
291.236 + public static synchronized void pass()
291.237 + {
291.238 + Sysout.println( "The test passed." );
291.239 + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
291.240 + //first check if this is executing in main thread
291.241 + if ( mainThread == Thread.currentThread() )
291.242 + {
291.243 + //Still in the main thread, so set the flag just for kicks,
291.244 + // and throw a test passed exception which will be caught
291.245 + // and end the test.
291.246 + theTestPassed = true;
291.247 + throw new TestPassedException();
291.248 + }
291.249 + theTestPassed = true;
291.250 + testGeneratedInterrupt = true;
291.251 + mainThread.interrupt();
291.252 + }//pass()
291.253 +
291.254 + public static synchronized void fail()
291.255 + {
291.256 + //test writer didn't specify why test failed, so give generic
291.257 + fail( "it just plain failed! :-)" );
291.258 + }
291.259 +
291.260 + public static synchronized void fail( String whyFailed )
291.261 + {
291.262 + Sysout.println( "The test failed: " + whyFailed );
291.263 + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
291.264 + //check if this called from main thread
291.265 + if ( mainThread == Thread.currentThread() )
291.266 + {
291.267 + //If main thread, fail now 'cause not sleeping
291.268 + throw new RuntimeException( whyFailed );
291.269 + }
291.270 + theTestPassed = false;
291.271 + testGeneratedInterrupt = true;
291.272 + failureMessage = whyFailed;
291.273 + mainThread.interrupt();
291.274 + }//fail()
291.275 +
291.276 +}// class WindowOpacity
291.277 +
291.278 +//This exception is used to exit from any level of call nesting
291.279 +// when it's determined that the test has passed, and immediately
291.280 +// end the test.
291.281 +class TestPassedException extends RuntimeException
291.282 +{
291.283 +}
291.284 +
291.285 +//*********** End Standard Test Machinery Section **********
291.286 +
291.287 +
291.288 +//************ Begin classes defined for the test ****************
291.289 +
291.290 +// if want to make listeners, here is the recommended place for them, then instantiate
291.291 +// them in init()
291.292 +
291.293 +/* Example of a class which may be written as part of a test
291.294 +class NewClass implements anInterface
291.295 + {
291.296 + static int newVar = 0;
291.297 +
291.298 + public void eventDispatched(AWTEvent e)
291.299 + {
291.300 + //Counting events to see if we get enough
291.301 + eventCount++;
291.302 +
291.303 + if( eventCount == 20 )
291.304 + {
291.305 + //got enough events, so pass
291.306 +
291.307 + WindowOpacity.pass();
291.308 + }
291.309 + else if( tries == 20 )
291.310 + {
291.311 + //tried too many times without getting enough events so fail
291.312 +
291.313 + WindowOpacity.fail();
291.314 + }
291.315 +
291.316 + }// eventDispatched()
291.317 +
291.318 + }// NewClass class
291.319 +
291.320 +*/
291.321 +
291.322 +
291.323 +//************** End classes defined for the test *******************
291.324 +
291.325 +
291.326 +
291.327 +
291.328 +/****************************************************
291.329 + Standard Test Machinery
291.330 + DO NOT modify anything below -- it's a standard
291.331 + chunk of code whose purpose is to make user
291.332 + interaction uniform, and thereby make it simpler
291.333 + to read and understand someone else's test.
291.334 + ****************************************************/
291.335 +
291.336 +/**
291.337 + This is part of the standard test machinery.
291.338 + It creates a dialog (with the instructions), and is the interface
291.339 + for sending text messages to the user.
291.340 + To print the instructions, send an array of strings to Sysout.createDialog
291.341 + WithInstructions method. Put one line of instructions per array entry.
291.342 + To display a message for the tester to see, simply call Sysout.println
291.343 + with the string to be displayed.
291.344 + This mimics System.out.println but works within the test harness as well
291.345 + as standalone.
291.346 + */
291.347 +
291.348 +class Sysout
291.349 +{
291.350 + private static TestDialog dialog;
291.351 +
291.352 + public static void createDialogWithInstructions( String[] instructions )
291.353 + {
291.354 + dialog = new TestDialog( new Frame(), "Instructions" );
291.355 + dialog.printInstructions( instructions );
291.356 + dialog.setVisible(true);
291.357 + println( "Any messages for the tester will display here." );
291.358 + }
291.359 +
291.360 + public static void createDialog( )
291.361 + {
291.362 + dialog = new TestDialog( new Frame(), "Instructions" );
291.363 + String[] defInstr = { "Instructions will appear here. ", "" } ;
291.364 + dialog.printInstructions( defInstr );
291.365 + dialog.setVisible(true);
291.366 + println( "Any messages for the tester will display here." );
291.367 + }
291.368 +
291.369 +
291.370 + public static void printInstructions( String[] instructions )
291.371 + {
291.372 + dialog.printInstructions( instructions );
291.373 + }
291.374 +
291.375 +
291.376 + public static void println( String messageIn )
291.377 + {
291.378 + dialog.displayMessage( messageIn );
291.379 + System.out.println(messageIn);
291.380 + }
291.381 +
291.382 +}// Sysout class
291.383 +
291.384 +/**
291.385 + This is part of the standard test machinery. It provides a place for the
291.386 + test instructions to be displayed, and a place for interactive messages
291.387 + to the user to be displayed.
291.388 + To have the test instructions displayed, see Sysout.
291.389 + To have a message to the user be displayed, see Sysout.
291.390 + Do not call anything in this dialog directly.
291.391 + */
291.392 +class TestDialog extends Dialog
291.393 +{
291.394 +
291.395 + TextArea instructionsText;
291.396 + TextArea messageText;
291.397 + int maxStringLength = 80;
291.398 +
291.399 + //DO NOT call this directly, go through Sysout
291.400 + public TestDialog( Frame frame, String name )
291.401 + {
291.402 + super( frame, name );
291.403 + int scrollBoth = TextArea.SCROLLBARS_BOTH;
291.404 + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
291.405 + add( "North", instructionsText );
291.406 +
291.407 + messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
291.408 + add("Center", messageText);
291.409 +
291.410 + pack();
291.411 +
291.412 + setVisible(true);
291.413 + }// TestDialog()
291.414 +
291.415 + //DO NOT call this directly, go through Sysout
291.416 + public void printInstructions( String[] instructions )
291.417 + {
291.418 + //Clear out any current instructions
291.419 + instructionsText.setText( "" );
291.420 +
291.421 + //Go down array of instruction strings
291.422 +
291.423 + String printStr, remainingStr;
291.424 + for( int i=0; i < instructions.length; i++ )
291.425 + {
291.426 + //chop up each into pieces maxSringLength long
291.427 + remainingStr = instructions[ i ];
291.428 + while( remainingStr.length() > 0 )
291.429 + {
291.430 + //if longer than max then chop off first max chars to print
291.431 + if( remainingStr.length() >= maxStringLength )
291.432 + {
291.433 + //Try to chop on a word boundary
291.434 + int posOfSpace = remainingStr.
291.435 + lastIndexOf( ' ', maxStringLength - 1 );
291.436 +
291.437 + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
291.438 +
291.439 + printStr = remainingStr.substring( 0, posOfSpace + 1 );
291.440 + remainingStr = remainingStr.substring( posOfSpace + 1 );
291.441 + }
291.442 + //else just print
291.443 + else
291.444 + {
291.445 + printStr = remainingStr;
291.446 + remainingStr = "";
291.447 + }
291.448 +
291.449 + instructionsText.append( printStr + "\n" );
291.450 +
291.451 + }// while
291.452 +
291.453 + }// for
291.454 +
291.455 + }//printInstructions()
291.456 +
291.457 + //DO NOT call this directly, go through Sysout
291.458 + public void displayMessage( String messageIn )
291.459 + {
291.460 + messageText.append( messageIn + "\n" );
291.461 + System.out.println(messageIn);
291.462 + }
291.463 +
291.464 +}// TestDialog class
292.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
292.2 +++ b/test/com/sun/java/swing/plaf/gtk/Test6635110.java Thu Apr 16 19:10:32 2009 -0700
292.3 @@ -0,0 +1,65 @@
292.4 +/*
292.5 + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
292.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
292.7 + *
292.8 + * This code is free software; you can redistribute it and/or modify it
292.9 + * under the terms of the GNU General Public License version 2 only, as
292.10 + * published by the Free Software Foundation.
292.11 + *
292.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
292.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
292.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
292.15 + * version 2 for more details (a copy is included in the LICENSE file that
292.16 + * accompanied this code).
292.17 + *
292.18 + * You should have received a copy of the GNU General Public License version
292.19 + * 2 along with this work; if not, write to the Free Software Foundation,
292.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
292.21 + *
292.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
292.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
292.24 + * have any questions.
292.25 + */
292.26 +
292.27 +/* @test
292.28 + @bug 6635110
292.29 + @summary GTK icons should not throw NPE when called by non-GTK UI
292.30 + @author Peter Zhelezniakov
292.31 + @run main Test6635110
292.32 +*/
292.33 +
292.34 +import com.sun.java.swing.plaf.gtk.GTKLookAndFeel;
292.35 +import javax.swing.*;
292.36 +import java.awt.*;
292.37 +import java.awt.image.BufferedImage;
292.38 +import javax.swing.plaf.basic.*;
292.39 +
292.40 +
292.41 +public class Test6635110 implements Runnable {
292.42 +
292.43 + static final int WIDTH = 160;
292.44 + static final int HEIGHT = 80;
292.45 + final BufferedImage IMAGE =
292.46 + new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
292.47 +
292.48 + @Override public void run() {
292.49 + JMenu menu = new JMenu("menu");
292.50 + menu.setUI(new BasicMenuUI());
292.51 + paint(menu);
292.52 +
292.53 + JToolBar tb = new JToolBar();
292.54 + tb.setFloatable(true);
292.55 + tb.setUI(new BasicToolBarUI());
292.56 + paint(tb);
292.57 + }
292.58 +
292.59 + void paint(Component c) {
292.60 + c.setSize(WIDTH, HEIGHT);
292.61 + c.paint(IMAGE.getGraphics());
292.62 + }
292.63 +
292.64 + public static void main(String[] args) throws Exception {
292.65 + UIManager.setLookAndFeel(new GTKLookAndFeel());
292.66 + SwingUtilities.invokeAndWait(new Test6635110());
292.67 + }
292.68 +}
293.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
293.2 +++ b/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java Thu Apr 16 19:10:32 2009 -0700
293.3 @@ -0,0 +1,381 @@
293.4 +/*
293.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
293.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
293.7 + *
293.8 + * This code is free software; you can redistribute it and/or modify it
293.9 + * under the terms of the GNU General Public License version 2 only, as
293.10 + * published by the Free Software Foundation.
293.11 + *
293.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
293.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
293.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
293.15 + * version 2 for more details (a copy is included in the LICENSE file that
293.16 + * accompanied this code).
293.17 + *
293.18 + * You should have received a copy of the GNU General Public License version
293.19 + * 2 along with this work; if not, write to the Free Software Foundation,
293.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
293.21 + *
293.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
293.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
293.24 + * have any questions.
293.25 + */
293.26 +
293.27 +/*
293.28 + @test
293.29 + @bug 6774258
293.30 + @summary api/java_awt/Component/index.html#PaintUpdate fails randomly
293.31 + @author dmitry.cherepanov@...: area=awt.painting
293.32 + @run main NoUpdateUponShow
293.33 +*/
293.34 +
293.35 +/**
293.36 + * NoUpdateUponShow.java
293.37 + *
293.38 + * summary: System-level painting operations shouldn't make call to update()
293.39 + */
293.40 +
293.41 +import java.awt.*;
293.42 +import sun.awt.SunToolkit;
293.43 +
293.44 +public class NoUpdateUponShow
293.45 +{
293.46 +
293.47 + static volatile boolean wasUpdate = false;
293.48 +
293.49 + private static void init()
293.50 + {
293.51 + //*** Create instructions for the user here ***
293.52 +
293.53 + String[] instructions =
293.54 + {
293.55 + "This is an AUTOMATIC test, simply wait until it is done.",
293.56 + "The result (passed or failed) will be shown in the",
293.57 + "message window below."
293.58 + };
293.59 + Sysout.createDialog( );
293.60 + Sysout.printInstructions( instructions );
293.61 +
293.62 +
293.63 + // Create the frame and the button
293.64 + Frame f = new Frame();
293.65 + f.setBounds(100, 100, 200, 200);
293.66 + f.setLayout(new FlowLayout());
293.67 + f.add(new Button() {
293.68 + @Override
293.69 + public void update(Graphics g) {
293.70 + wasUpdate = true;
293.71 + super.update(g);
293.72 + }
293.73 + });
293.74 + f.setVisible(true);
293.75 +
293.76 + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
293.77 +
293.78 + if (wasUpdate) {
293.79 + fail(" Unexpected update. ");
293.80 + } else {
293.81 + pass();
293.82 + }
293.83 + }//End init()
293.84 +
293.85 + /*****************************************************
293.86 + * Standard Test Machinery Section
293.87 + * DO NOT modify anything in this section -- it's a
293.88 + * standard chunk of code which has all of the
293.89 + * synchronisation necessary for the test harness.
293.90 + * By keeping it the same in all tests, it is easier
293.91 + * to read and understand someone else's test, as
293.92 + * well as insuring that all tests behave correctly
293.93 + * with the test harness.
293.94 + * There is a section following this for test-
293.95 + * classes
293.96 + ******************************************************/
293.97 + private static boolean theTestPassed = false;
293.98 + private static boolean testGeneratedInterrupt = false;
293.99 + private static String failureMessage = "";
293.100 +
293.101 + private static Thread mainThread = null;
293.102 +
293.103 + private static int sleepTime = 300000;
293.104 +
293.105 + // Not sure about what happens if multiple of this test are
293.106 + // instantiated in the same VM. Being static (and using
293.107 + // static vars), it aint gonna work. Not worrying about
293.108 + // it for now.
293.109 + public static void main( String args[] ) throws InterruptedException
293.110 + {
293.111 + mainThread = Thread.currentThread();
293.112 + try
293.113 + {
293.114 + init();
293.115 + }
293.116 + catch( TestPassedException e )
293.117 + {
293.118 + //The test passed, so just return from main and harness will
293.119 + // interepret this return as a pass
293.120 + return;
293.121 + }
293.122 + //At this point, neither test pass nor test fail has been
293.123 + // called -- either would have thrown an exception and ended the
293.124 + // test, so we know we have multiple threads.
293.125 +
293.126 + //Test involves other threads, so sleep and wait for them to
293.127 + // called pass() or fail()
293.128 + try
293.129 + {
293.130 + Thread.sleep( sleepTime );
293.131 + //Timed out, so fail the test
293.132 + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
293.133 + }
293.134 + catch (InterruptedException e)
293.135 + {
293.136 + //The test harness may have interrupted the test. If so, rethrow the exception
293.137 + // so that the harness gets it and deals with it.
293.138 + if( ! testGeneratedInterrupt ) throw e;
293.139 +
293.140 + //reset flag in case hit this code more than once for some reason (just safety)
293.141 + testGeneratedInterrupt = false;
293.142 +
293.143 + if ( theTestPassed == false )
293.144 + {
293.145 + throw new RuntimeException( failureMessage );
293.146 + }
293.147 + }
293.148 +
293.149 + }//main
293.150 +
293.151 + public static synchronized void setTimeoutTo( int seconds )
293.152 + {
293.153 + sleepTime = seconds * 1000;
293.154 + }
293.155 +
293.156 + public static synchronized void pass()
293.157 + {
293.158 + Sysout.println( "The test passed." );
293.159 + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
293.160 + //first check if this is executing in main thread
293.161 + if ( mainThread == Thread.currentThread() )
293.162 + {
293.163 + //Still in the main thread, so set the flag just for kicks,
293.164 + // and throw a test passed exception which will be caught
293.165 + // and end the test.
293.166 + theTestPassed = true;
293.167 + throw new TestPassedException();
293.168 + }
293.169 + theTestPassed = true;
293.170 + testGeneratedInterrupt = true;
293.171 + mainThread.interrupt();
293.172 + }//pass()
293.173 +
293.174 + public static synchronized void fail()
293.175 + {
293.176 + //test writer didn't specify why test failed, so give generic
293.177 + fail( "it just plain failed! :-)" );
293.178 + }
293.179 +
293.180 + public static synchronized void fail( String whyFailed )
293.181 + {
293.182 + Sysout.println( "The test failed: " + whyFailed );
293.183 + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
293.184 + //check if this called from main thread
293.185 + if ( mainThread == Thread.currentThread() )
293.186 + {
293.187 + //If main thread, fail now 'cause not sleeping
293.188 + throw new RuntimeException( whyFailed );
293.189 + }
293.190 + theTestPassed = false;
293.191 + testGeneratedInterrupt = true;
293.192 + failureMessage = whyFailed;
293.193 + mainThread.interrupt();
293.194 + }//fail()
293.195 +
293.196 +}// class ValidBounds
293.197 +
293.198 +//This exception is used to exit from any level of call nesting
293.199 +// when it's determined that the test has passed, and immediately
293.200 +// end the test.
293.201 +class TestPassedException extends RuntimeException
293.202 +{
293.203 +}
293.204 +
293.205 +//*********** End Standard Test Machinery Section **********
293.206 +
293.207 +
293.208 +//************ Begin classes defined for the test ****************
293.209 +
293.210 +// if want to make listeners, here is the recommended place for them, then instantiate
293.211 +// them in init()
293.212 +
293.213 +/* Example of a class which may be written as part of a test
293.214 +class NewClass implements anInterface
293.215 + {
293.216 + static int newVar = 0;
293.217 +
293.218 + public void eventDispatched(AWTEvent e)
293.219 + {
293.220 + //Counting events to see if we get enough
293.221 + eventCount++;
293.222 +
293.223 + if( eventCount == 20 )
293.224 + {
293.225 + //got enough events, so pass
293.226 +
293.227 + ValidBounds.pass();
293.228 + }
293.229 + else if( tries == 20 )
293.230 + {
293.231 + //tried too many times without getting enough events so fail
293.232 +
293.233 + ValidBounds.fail();
293.234 + }
293.235 +
293.236 + }// eventDispatched()
293.237 +
293.238 + }// NewClass class
293.239 +
293.240 +*/
293.241 +
293.242 +
293.243 +//************** End classes defined for the test *******************
293.244 +
293.245 +
293.246 +
293.247 +
293.248 +/****************************************************
293.249 + Standard Test Machinery
293.250 + DO NOT modify anything below -- it's a standard
293.251 + chunk of code whose purpose is to make user
293.252 + interaction uniform, and thereby make it simpler
293.253 + to read and understand someone else's test.
293.254 + ****************************************************/
293.255 +
293.256 +/**
293.257 + This is part of the standard test machinery.
293.258 + It creates a dialog (with the instructions), and is the interface
293.259 + for sending text messages to the user.
293.260 + To print the instructions, send an array of strings to Sysout.createDialog
293.261 + WithInstructions method. Put one line of instructions per array entry.
293.262 + To display a message for the tester to see, simply call Sysout.println
293.263 + with the string to be displayed.
293.264 + This mimics System.out.println but works within the test harness as well
293.265 + as standalone.
293.266 + */
293.267 +
293.268 +class Sysout
293.269 +{
293.270 + private static TestDialog dialog;
293.271 +
293.272 + public static void createDialogWithInstructions( String[] instructions )
293.273 + {
293.274 + dialog = new TestDialog( new Frame(), "Instructions" );
293.275 + dialog.printInstructions( instructions );
293.276 + dialog.setVisible(true);
293.277 + println( "Any messages for the tester will display here." );
293.278 + }
293.279 +
293.280 + public static void createDialog( )
293.281 + {
293.282 + dialog = new TestDialog( new Frame(), "Instructions" );
293.283 + String[] defInstr = { "Instructions will appear here. ", "" } ;
293.284 + dialog.printInstructions( defInstr );
293.285 + dialog.setVisible(true);
293.286 + println( "Any messages for the tester will display here." );
293.287 + }
293.288 +
293.289 +
293.290 + public static void printInstructions( String[] instructions )
293.291 + {
293.292 + dialog.printInstructions( instructions );
293.293 + }
293.294 +
293.295 +
293.296 + public static void println( String messageIn )
293.297 + {
293.298 + dialog.displayMessage( messageIn );
293.299 + System.out.println(messageIn);
293.300 + }
293.301 +
293.302 +}// Sysout class
293.303 +
293.304 +/**
293.305 + This is part of the standard test machinery. It provides a place for the
293.306 + test instructions to be displayed, and a place for interactive messages
293.307 + to the user to be displayed.
293.308 + To have the test instructions displayed, see Sysout.
293.309 + To have a message to the user be displayed, see Sysout.
293.310 + Do not call anything in this dialog directly.
293.311 + */
293.312 +class TestDialog extends Dialog
293.313 +{
293.314 +
293.315 + TextArea instructionsText;
293.316 + TextArea messageText;
293.317 + int maxStringLength = 80;
293.318 +
293.319 + //DO NOT call this directly, go through Sysout
293.320 + public TestDialog( Frame frame, String name )
293.321 + {
293.322 + super( frame, name );
293.323 + int scrollBoth = TextArea.SCROLLBARS_BOTH;
293.324 + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
293.325 + add( "North", instructionsText );
293.326 +
293.327 + messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
293.328 + add("Center", messageText);
293.329 +
293.330 + pack();
293.331 +
293.332 + setVisible(true);
293.333 + }// TestDialog()
293.334 +
293.335 + //DO NOT call this directly, go through Sysout
293.336 + public void printInstructions( String[] instructions )
293.337 + {
293.338 + //Clear out any current instructions
293.339 + instructionsText.setText( "" );
293.340 +
293.341 + //Go down array of instruction strings
293.342 +
293.343 + String printStr, remainingStr;
293.344 + for( int i=0; i < instructions.length; i++ )
293.345 + {
293.346 + //chop up each into pieces maxSringLength long
293.347 + remainingStr = instructions[ i ];
293.348 + while( remainingStr.length() > 0 )
293.349 + {
293.350 + //if longer than max then chop off first max chars to print
293.351 + if( remainingStr.length() >= maxStringLength )
293.352 + {
293.353 + //Try to chop on a word boundary
293.354 + int posOfSpace = remainingStr.
293.355 + lastIndexOf( ' ', maxStringLength - 1 );
293.356 +
293.357 + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
293.358 +
293.359 + printStr = remainingStr.substring( 0, posOfSpace + 1 );
293.360 + remainingStr = remainingStr.substring( posOfSpace + 1 );
293.361 + }
293.362 + //else just print
293.363 + else
293.364 + {
293.365 + printStr = remainingStr;
293.366 + remainingStr = "";
293.367 + }
293.368 +
293.369 + instructionsText.append( printStr + "\n" );
293.370 +
293.371 + }// while
293.372 +
293.373 + }// for
293.374 +
293.375 + }//printInstructions()
293.376 +
293.377 + //DO NOT call this directly, go through Sysout
293.378 + public void displayMessage( String messageIn )
293.379 + {
293.380 + messageText.append( messageIn + "\n" );
293.381 + System.out.println(messageIn);
293.382 + }
293.383 +
293.384 +}// TestDialog class
294.1 --- a/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java Thu Apr 16 17:42:00 2009 +0100
294.2 +++ b/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java Thu Apr 16 19:10:32 2009 -0700
294.3 @@ -118,7 +118,7 @@
294.4 public boolean handlesWheelScrolling(){return true;};
294.5 public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{};
294.6 public Image getBackBuffer(){return null;};
294.7 - public void flip(BufferCapabilities.FlipContents flipAction){};
294.8 + public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction){};
294.9 public void destroyBuffers(){};
294.10
294.11 /**
295.1 --- a/test/java/awt/EventQueue/6638195/bug6638195.java Thu Apr 16 17:42:00 2009 +0100
295.2 +++ b/test/java/awt/EventQueue/6638195/bug6638195.java Thu Apr 16 19:10:32 2009 -0700
295.3 @@ -76,8 +76,13 @@
295.4 Callable<Void> afterDispatchCallable =
295.5 new Callable<Void>() {
295.6 public Void call() {
295.7 - delegate.afterDispatch(afterDispatchEventArgument[0],
295.8 - afterDispatchHandleArgument[0]);
295.9 + try {
295.10 + delegate.afterDispatch(afterDispatchEventArgument[0],
295.11 + afterDispatchHandleArgument[0]);
295.12 + }
295.13 + catch (InterruptedException e) {
295.14 + throw new RuntimeException("afterDispatch interrupted", e);
295.15 + }
295.16 return null;
295.17 }
295.18 };
295.19 @@ -91,8 +96,13 @@
295.20 Callable<Object> beforeDispatchCallable =
295.21 new Callable<Object>() {
295.22 public Object call() {
295.23 - return delegate.beforeDispatch(
295.24 - beforeDispatchEventArgument[0]);
295.25 + try {
295.26 + return delegate.beforeDispatch(
295.27 + beforeDispatchEventArgument[0]);
295.28 + }
295.29 + catch (InterruptedException e) {
295.30 + throw new RuntimeException("beforeDispatch interrupted", e);
295.31 + }
295.32 }
295.33 };
295.34 methodMap = new HashMap<String, Object>();
296.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
296.2 +++ b/test/java/awt/Focus/ClearGlobalFocusOwnerTest/ClearGlobalFocusOwnerTest.java Thu Apr 16 19:10:32 2009 -0700
296.3 @@ -0,0 +1,95 @@
296.4 +/*
296.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
296.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
296.7 + *
296.8 + * This code is free software; you can redistribute it and/or modify it
296.9 + * under the terms of the GNU General Public License version 2 only, as
296.10 + * published by the Free Software Foundation.
296.11 + *
296.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
296.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
296.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
296.15 + * version 2 for more details (a copy is included in the LICENSE file that
296.16 + * accompanied this code).
296.17 + *
296.18 + * You should have received a copy of the GNU General Public License version
296.19 + * 2 along with this work; if not, write to the Free Software Foundation,
296.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
296.21 + *
296.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
296.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
296.24 + * have any questions.
296.25 + */
296.26 +
296.27 +/*
296.28 + @test
296.29 + @bug 4390555
296.30 + @summary Synopsis: clearGlobalFocusOwner() is not trigerring permanent FOCUS_LOST event
296.31 + @author son@sparc.spb.su, anton.tarasov: area=awt.focus
296.32 + @library ../../regtesthelpers
296.33 + @build Util
296.34 + @run main ClearGlobalFocusOwnerTest
296.35 +*/
296.36 +
296.37 +import java.awt.*;
296.38 +import java.awt.event.*;
296.39 +import test.java.awt.regtesthelpers.Util;
296.40 +
296.41 +public class ClearGlobalFocusOwnerTest {
296.42 + static volatile boolean isFocusLost = false;
296.43 + static Frame frame = new Frame("Test frame");
296.44 + static Button button = new Button("Test button");
296.45 +
296.46 + public static void main(String[] args) {
296.47 + button.addFocusListener(new FocusAdapter() {
296.48 + public void focusLost(FocusEvent fe) {
296.49 + if (fe.isTemporary()) {
296.50 + throw new TestFailedException("the FocusLost event is temporary: " + fe);
296.51 + }
296.52 + isFocusLost = true;
296.53 + }
296.54 + });
296.55 +
296.56 + frame.add(button);
296.57 + frame.pack();
296.58 + frame.setVisible(true);
296.59 +
296.60 + Util.waitForIdle(null);
296.61 +
296.62 + if (!button.hasFocus()) {
296.63 + button.requestFocus();
296.64 + Util.waitForIdle(null);
296.65 + if (!button.hasFocus()) {
296.66 + throw new TestErrorException("couldn't focus " + button);
296.67 + }
296.68 + }
296.69 +
296.70 + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
296.71 +
296.72 + Util.waitForIdle(null);
296.73 +
296.74 + if (!isFocusLost) {
296.75 + throw new TestFailedException("no FocusLost event happened on clearGlobalFocusOwner");
296.76 + }
296.77 +
296.78 + System.out.println("Test passed.");
296.79 + }
296.80 +}
296.81 +
296.82 +/**
296.83 + * Thrown when the behavior being verified is found wrong.
296.84 + */
296.85 +class TestFailedException extends RuntimeException {
296.86 + TestFailedException(String msg) {
296.87 + super("Test failed: " + msg);
296.88 + }
296.89 +}
296.90 +
296.91 +/**
296.92 + * Thrown when an error not related to the behavior being verified is encountered.
296.93 + */
296.94 +class TestErrorException extends RuntimeException {
296.95 + TestErrorException(String msg) {
296.96 + super("Unexpected error: " + msg);
296.97 + }
296.98 +}
297.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
297.2 +++ b/test/java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java Thu Apr 16 19:10:32 2009 -0700
297.3 @@ -0,0 +1,114 @@
297.4 +/*
297.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
297.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
297.7 + *
297.8 + * This code is free software; you can redistribute it and/or modify it
297.9 + * under the terms of the GNU General Public License version 2 only, as
297.10 + * published by the Free Software Foundation.
297.11 + *
297.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
297.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
297.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
297.15 + * version 2 for more details (a copy is included in the LICENSE file that
297.16 + * accompanied this code).
297.17 + *
297.18 + * You should have received a copy of the GNU General Public License version
297.19 + * 2 along with this work; if not, write to the Free Software Foundation,
297.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
297.21 + *
297.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
297.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
297.24 + * have any questions.
297.25 + */
297.26 +
297.27 +/*
297.28 + @test
297.29 + @bug 6785058
297.30 + @summary Tests that an owner is activated on closing its owned dialog with the warning icon.
297.31 + @author Anton Tarasov: area=awt.focus
297.32 + @library ../../regtesthelpers
297.33 + @build Util
297.34 + @run main/othervm/policy=java.policy -Djava.security.manager CloseDialogActivateOwnerTest
297.35 +*/
297.36 +
297.37 +import java.awt.*;
297.38 +import java.awt.event.*;
297.39 +import java.applet.Applet;
297.40 +import java.util.concurrent.atomic.AtomicBoolean;
297.41 +import java.lang.reflect.InvocationTargetException;
297.42 +import test.java.awt.regtesthelpers.Util;
297.43 +
297.44 +public class CloseDialogActivateOwnerTest extends Applet {
297.45 + Robot robot;
297.46 +
297.47 + public static void main(String[] args) {
297.48 + CloseDialogActivateOwnerTest app = new CloseDialogActivateOwnerTest();
297.49 + app.init();
297.50 + app.start();
297.51 + }
297.52 +
297.53 + public void init() {
297.54 + robot = Util.createRobot();
297.55 + }
297.56 +
297.57 + public void start() {
297.58 + final Frame frame = new Frame("Owner Frame");
297.59 + final Dialog dialog = new Dialog(frame, "Owned Dialog");
297.60 +
297.61 + frame.setSize(100, 100);
297.62 + dialog.setSize(100, 100);
297.63 +
297.64 + // Show the owner. Check that it's focused.
297.65 + if (!Util.trackWindowGainedFocus(frame, new Runnable() {
297.66 + public void run() {
297.67 + frame.setVisible(true);
297.68 + }
297.69 + }, 2000, false))
297.70 + {
297.71 + throw new TestErrorException("the owner frame hasn't been activated on show");
297.72 + }
297.73 +
297.74 + // Show the owned dialog. Check that it's focused.
297.75 + if (!Util.trackWindowGainedFocus(dialog, new Runnable() {
297.76 + public void run() {
297.77 + dialog.setVisible(true);
297.78 + }
297.79 + }, 2000, true))
297.80 + {
297.81 + throw new TestErrorException("the owned dialog hasn't been activated on show");
297.82 + }
297.83 +
297.84 + robot.delay(2000); // wait for the warning icon is shown
297.85 +
297.86 + // Close the dialog. Check that the owner is activated.
297.87 + if (!Util.trackWindowGainedFocus(frame, new Runnable() {
297.88 + public void run() {
297.89 + dialog.dispose();
297.90 + }
297.91 + }, 2000, false))
297.92 + {
297.93 + throw new TestFailedException("the owner hasn't been activated on closing the owned dialog");
297.94 + }
297.95 +
297.96 + System.out.println("Test passed.");
297.97 + }
297.98 +}
297.99 +
297.100 +/**
297.101 + * Thrown when the behavior being verified is found wrong.
297.102 + */
297.103 +class TestFailedException extends RuntimeException {
297.104 + TestFailedException(String msg) {
297.105 + super("Test failed: " + msg);
297.106 + }
297.107 +}
297.108 +
297.109 +/**
297.110 + * Thrown when an error not related to the behavior being verified is encountered.
297.111 + */
297.112 +class TestErrorException extends Error {
297.113 + TestErrorException(String msg) {
297.114 + super("Unexpected error: " + msg);
297.115 + }
297.116 +}
297.117 +
298.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
298.2 +++ b/test/java/awt/Focus/CloseDialogActivateOwnerTest/java.policy Thu Apr 16 19:10:32 2009 -0700
298.3 @@ -0,0 +1,3 @@
298.4 +grant {
298.5 + permission java.awt.AWTPermission "createRobot";
298.6 +};
299.1 --- a/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java Thu Apr 16 17:42:00 2009 +0100
299.2 +++ b/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java Thu Apr 16 19:10:32 2009 -0700
299.3 @@ -71,8 +71,14 @@
299.4 testFrame.setVisible(true);
299.5 Util.waitForIdle(robot);
299.6
299.7 + robot.delay(1000); // additional delay is required
299.8 +
299.9 if (!testButton.hasFocus()) {
299.10 - throw new TestErrorException("wrong initial focus");
299.11 + testButton.requestFocus();
299.12 + Util.waitForIdle(robot);
299.13 + if (!testButton.hasFocus()) {
299.14 + throw new TestErrorException("couldn't focus " + testButton);
299.15 + }
299.16 }
299.17
299.18 /*
300.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
300.2 +++ b/test/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java Thu Apr 16 19:10:32 2009 -0700
300.3 @@ -0,0 +1,88 @@
300.4 +/*
300.5 + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved.
300.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
300.7 + *
300.8 + * This code is free software; you can redistribute it and/or modify it
300.9 + * under the terms of the GNU General Public License version 2 only, as
300.10 + * published by the Free Software Foundation.
300.11 + *
300.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
300.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
300.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
300.15 + * version 2 for more details (a copy is included in the LICENSE file that
300.16 + * accompanied this code).
300.17 + *
300.18 + * You should have received a copy of the GNU General Public License version
300.19 + * 2 along with this work; if not, write to the Free Software Foundation,
300.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
300.21 + *
300.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
300.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
300.24 + * have any questions.
300.25 + */
300.26 +
300.27 +/*
300.28 + @test
300.29 + @bug 6542975
300.30 + @summary Tests that switching focus from an owned window doesn't crash.
300.31 + @author anton.tarasov@sun.com: area=awt-focus
300.32 + @library ../../regtesthelpers
300.33 + @build Util
300.34 + @run main OwnedWindowFocusIMECrashTest
300.35 +*/
300.36 +
300.37 +import java.awt.*;
300.38 +import javax.swing.*;
300.39 +import test.java.awt.regtesthelpers.Util;
300.40 +
300.41 +public class OwnedWindowFocusIMECrashTest {
300.42 + Robot robot;
300.43 + JFrame owner = new JFrame("Owner Frame");
300.44 + JFrame frame = new JFrame("Other Frame");
300.45 + JWindow window = new JWindow(owner);
300.46 + JButton button = new JButton("Button");
300.47 +
300.48 + public static void main(String[] args) {
300.49 + OwnedWindowFocusIMECrashTest app = new OwnedWindowFocusIMECrashTest();
300.50 + app.init();
300.51 + app.start();
300.52 + }
300.53 +
300.54 + public void init() {
300.55 + robot = Util.createRobot();
300.56 + }
300.57 +
300.58 + public void start() {
300.59 + owner.setBounds(100, 100, 200, 100);
300.60 + window.setBounds(100, 250, 200, 100);
300.61 + frame.setBounds(350, 100, 200, 100);
300.62 + window.add(button);
300.63 +
300.64 + owner.setVisible(true);
300.65 + frame.setVisible(true);
300.66 + window.setVisible(true);
300.67 +
300.68 + Util.waitForIdle(robot);
300.69 +
300.70 + test();
300.71 +
300.72 + System.out.println("Test passed");
300.73 + }
300.74 +
300.75 + void test() {
300.76 + Util.clickOnComp(button, robot);
300.77 + if (!button.hasFocus()) {
300.78 + throw new TestErrorException("the button couldn't be focused by click");
300.79 + }
300.80 + Util.clickOnTitle(frame, robot); // here there was a crash
300.81 + }
300.82 +}
300.83 +
300.84 +/**
300.85 + * Thrown when an error not related to the behavior being verified is encountered.
300.86 + */
300.87 +class TestErrorException extends RuntimeException {
300.88 + TestErrorException(String msg) {
300.89 + super("Unexpected error: " + msg);
300.90 + }
300.91 +}
301.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
301.2 +++ b/test/java/awt/Focus/RemoveAfterRequest/RemoveAfterRequest.java Thu Apr 16 19:10:32 2009 -0700
301.3 @@ -0,0 +1,102 @@
301.4 +/*
301.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
301.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
301.7 + *
301.8 + * This code is free software; you can redistribute it and/or modify it
301.9 + * under the terms of the GNU General Public License version 2 only, as
301.10 + * published by the Free Software Foundation.
301.11 + *
301.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
301.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
301.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
301.15 + * version 2 for more details (a copy is included in the LICENSE file that
301.16 + * accompanied this code).
301.17 + *
301.18 + * You should have received a copy of the GNU General Public License version
301.19 + * 2 along with this work; if not, write to the Free Software Foundation,
301.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
301.21 + *
301.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
301.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
301.24 + * have any questions.
301.25 + */
301.26 +
301.27 +/*
301.28 + @test
301.29 + @bug 6411406
301.30 + @summary Components automatically transfer focus on removal, even if developer requests focus elsewhere first
301.31 + @author oleg.sukhodolsky, anton.tarasov: area=awt.focus
301.32 + @library ../../regtesthelpers
301.33 + @build Util
301.34 + @run main RemoveAfterRequest
301.35 +*/
301.36 +
301.37 +/**
301.38 + * RemoveAfterRequest.java
301.39 + *
301.40 + * summary: Components automatically transfer focus on removal, even if developer requests focus elsewhere first
301.41 + */
301.42 +
301.43 +import java.awt.*;
301.44 +import java.awt.event.*;
301.45 +import test.java.awt.regtesthelpers.Util;
301.46 +
301.47 +public class RemoveAfterRequest {
301.48 + final static Frame frame = new Frame("test frame");
301.49 + final static Button btn1 = new Button("btn1");
301.50 + final static Button btn2 = new Button("btn2");
301.51 + final static Button btn3 = new Button("btn3");
301.52 +
301.53 + public static void main(String[] args) {
301.54 + frame.setLayout(new GridLayout(3, 1));
301.55 + frame.add(btn1);
301.56 + frame.add(btn2);
301.57 + frame.add(btn3);
301.58 + frame.pack();
301.59 + frame.setVisible(true);
301.60 +
301.61 + Util.waitForIdle(null);
301.62 +
301.63 + if (!btn1.hasFocus()) {
301.64 + btn1.requestFocus();
301.65 + Util.waitForIdle(null);
301.66 + if (!btn1.hasFocus()) {
301.67 + throw new TestErrorException("couldn't focus " + btn1);
301.68 + }
301.69 + }
301.70 +
301.71 + if (!Util.trackFocusGained(btn3, new Runnable() {
301.72 + public void run() {
301.73 + btn3.requestFocus();
301.74 + frame.remove(btn1);
301.75 + frame.invalidate();
301.76 + frame.validate();
301.77 + frame.repaint();
301.78 + }
301.79 + }, 2000, true))
301.80 + {
301.81 + throw new TestFailedException("focus request on removal failed");
301.82 + }
301.83 +
301.84 + System.out.println("Test passed.");
301.85 + }
301.86 +}
301.87 +
301.88 +/**
301.89 + * Thrown when the behavior being verified is found wrong.
301.90 + */
301.91 +class TestFailedException extends RuntimeException {
301.92 + TestFailedException(String msg) {
301.93 + super("Test failed: " + msg);
301.94 + }
301.95 +}
301.96 +
301.97 +/**
301.98 + * Thrown when an error not related to the behavior being verified is encountered.
301.99 + */
301.100 +class TestErrorException extends RuntimeException {
301.101 + TestErrorException(String msg) {
301.102 + super("Unexpected error: " + msg);
301.103 + }
301.104 +}
301.105 +
302.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
302.2 +++ b/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html Thu Apr 16 19:10:32 2009 -0700
302.3 @@ -0,0 +1,20 @@
302.4 +<html>
302.5 +<!--
302.6 + @test
302.7 + @bug 6680988
302.8 + @summary verify that various shortcuts and accelerators work
302.9 + @author yuri.nesterenko : area=awt.keyboard
302.10 + @run applet/manual=yesno AcceleratorTest.html
302.11 + -->
302.12 +<head>
302.13 +<title> AcceleratorTest </title>
302.14 +</head>
302.15 +<body>
302.16 +
302.17 +<h1>AcceleratorTest<br>Bug ID: </h1>
302.18 +
302.19 +<p> See the dialog box (usually in upper left corner) for instructions</p>
302.20 +
302.21 +<APPLET CODE="AcceleratorTest.class" WIDTH=200 HEIGHT=200></APPLET>
302.22 +</body>
302.23 +</html>
303.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
303.2 +++ b/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java Thu Apr 16 19:10:32 2009 -0700
303.3 @@ -0,0 +1,305 @@
303.4 +/*
303.5 + test
303.6 + @bug 6680988
303.7 + @summary verify that various shortcuts and accelerators work
303.8 + @author yuri.nesterenko : area=awt.keyboard
303.9 + @run applet/manual=yesno AcceleratorTest.html
303.10 +*/
303.11 +
303.12 +/**
303.13 + * AcceleratorTest.java
303.14 + *
303.15 + * summary:
303.16 + */
303.17 +
303.18 +//import java.applet.Applet;
303.19 +import javax.swing.*;
303.20 +import java.awt.*;
303.21 +import java.awt.event.*;
303.22 +import java.util.Hashtable;
303.23 +
303.24 +
303.25 +public class AcceleratorTest extends JApplet
303.26 +{
303.27 + //Declare things used in the test, like buttons and labels here
303.28 + static int pressed = 0;
303.29 + Hashtable<String, Integer> cmdHash = new Hashtable<String, Integer>();
303.30 + String[] CMD = {
303.31 + "\u042E, keep me in focus",
303.32 + "Item Cyrl Be",
303.33 + "Item English Period",
303.34 + "Item English N",
303.35 + "\u0436"
303.36 + };
303.37 +
303.38 + JFrame jfr;
303.39 +
303.40 + public void init()
303.41 + {
303.42 + //Create instructions for the user here, as well as set up
303.43 + // the environment -- set the layout manager, add buttons,
303.44 + // etc.
303.45 + this.setLayout (new BorderLayout ());
303.46 +
303.47 + String[] instructions =
303.48 + {
303.49 + " Ensure you have Russian keyboard layout as a currently active.",
303.50 + "(1) Press Ctrl+\u0411 (a key with \",<\" on it) ",
303.51 + "(2) Find a . (period) in this layout (perhaps \"/?\" or \"7&\" key).",
303.52 + "Press Ctrl+.",
303.53 + "(3) Press Crtl+ regular English . (period) key (on \".>\" )",
303.54 + "(4) Press Ctrl+ key with English N.",
303.55 + "(5) Press Alt+\u042E (key with \".>\")",
303.56 + "(6) Press Alt+\u0436 (key with \";:\")",
303.57 + "If all expected commands will be fired, look for message",
303.58 + "\"All tests passed\""
303.59 + };
303.60 + Sysout.createDialogWithInstructions( instructions );
303.61 + for(int i = 0; i < CMD.length; i++) {
303.62 + cmdHash.put(CMD[i], 0);
303.63 + }
303.64 +
303.65 + jfr = new JFrame();
303.66 + JButton jbu;
303.67 + jfr.add((jbu = new JButton(CMD[0])));
303.68 + jbu.setMnemonic(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u042E'));
303.69 + jbu.addActionListener( new ALi(CMD[0]));
303.70 +
303.71 +
303.72 + JMenuBar menuBar = new JMenuBar();
303.73 + jfr.setJMenuBar(menuBar);
303.74 + JMenu menu = new JMenu("Menu");
303.75 + menuBar.add(menu);
303.76 +
303.77 + JMenuItem menuItem = new JMenuItem(CMD[1]);
303.78 + menuItem.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u0431'),
303.79 + InputEvent.CTRL_DOWN_MASK));
303.80 +
303.81 + JMenuItem menuItemEnglish = new JMenuItem(CMD[2]);
303.82 + menuItemEnglish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD,
303.83 + InputEvent.CTRL_DOWN_MASK));
303.84 + JMenuItem menuItemE1 = new JMenuItem(CMD[3]);
303.85 + menuItemE1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
303.86 + InputEvent.CTRL_DOWN_MASK));
303.87 + menuItem.addActionListener( new ALi(CMD[1]));
303.88 + menuItemEnglish.addActionListener( new ALi(CMD[2]));
303.89 + menuItemE1.addActionListener( new ALi(CMD[3]));
303.90 + menu.add(menuItem);
303.91 + menu.add(menuItemEnglish);
303.92 + menu.add(menuItemE1);
303.93 +
303.94 + KeyStroke ks;
303.95 + InputMap im = new InputMap();
303.96 + ks = KeyStroke.getKeyStroke(KeyEvent.getExtendedKeyCodeForChar('\u0436'), java.awt.event.InputEvent.ALT_DOWN_MASK);
303.97 + im.put(ks, "pushAction");
303.98 + im.setParent(jbu.getInputMap(JComponent.WHEN_FOCUSED));
303.99 + jbu.setInputMap(JComponent.WHEN_FOCUSED, im);
303.100 +
303.101 + jbu.getActionMap().put("pushAction",
303.102 + new AbstractAction("pushAction") {
303.103 + public void actionPerformed(ActionEvent evt) {
303.104 + if( evt.getActionCommand().equals(CMD[4])) {
303.105 + cmdHash.put(CMD[4], 1);
303.106 + }
303.107 + boolean notYet = false;
303.108 + for(int i = 0; i < CMD.length; i++) {
303.109 + if(cmdHash.get(CMD[i]) == 0 ) notYet = true;
303.110 + }
303.111 + Sysout.println("Fired");
303.112 + if( !notYet ) {
303.113 + Sysout.println("All tests passed.");
303.114 + }
303.115 + }
303.116 + }
303.117 + );
303.118 +
303.119 +
303.120 + jfr.setBounds(650,0,200,200);
303.121 + jfr.setVisible(true);
303.122 +
303.123 + }//End init()
303.124 +
303.125 + public void start ()
303.126 + {
303.127 + //Get things going. Request focus, set size, et cetera
303.128 + setSize (200,200);
303.129 + setVisible(true);
303.130 + validate();
303.131 +
303.132 + }// start()
303.133 + public class ALi implements ActionListener {
303.134 + String expectedCmd;
303.135 + public ALi( String eCmd ) {
303.136 + expectedCmd = eCmd;
303.137 + }
303.138 + public void actionPerformed(ActionEvent ae) {
303.139 + if( cmdHash.containsKey(ae.getActionCommand()) ) {
303.140 + cmdHash.put(expectedCmd, 1);
303.141 + }
303.142 + boolean notYet = false;
303.143 + for(int i = 0; i < CMD.length; i++) {
303.144 + if(cmdHash.get(CMD[i]) == 0 ) notYet = true;
303.145 + //Sysout.println(CMD[i]+":"+cmdHash.get(CMD[i]));
303.146 + }
303.147 + Sysout.println("FIRED");
303.148 + if( !notYet ) {
303.149 + Sysout.println("All tests passed.");
303.150 + }
303.151 + }
303.152 + }
303.153 +
303.154 +
303.155 +}// class AcceleratorTest
303.156 +
303.157 +/* Place other classes related to the test after this line */
303.158 +
303.159 +
303.160 +
303.161 +
303.162 +
303.163 +/****************************************************
303.164 + Standard Test Machinery
303.165 + DO NOT modify anything below -- it's a standard
303.166 + chunk of code whose purpose is to make user
303.167 + interaction uniform, and thereby make it simpler
303.168 + to read and understand someone else's test.
303.169 + ****************************************************/
303.170 +
303.171 +/**
303.172 + This is part of the standard test machinery.
303.173 + It creates a dialog (with the instructions), and is the interface
303.174 + for sending text messages to the user.
303.175 + To print the instructions, send an array of strings to Sysout.createDialog
303.176 + WithInstructions method. Put one line of instructions per array entry.
303.177 + To display a message for the tester to see, simply call Sysout.println
303.178 + with the string to be displayed.
303.179 + This mimics System.out.println but works within the test harness as well
303.180 + as standalone.
303.181 + */
303.182 +
303.183 +class Sysout
303.184 +{
303.185 + private static TestDialog dialog;
303.186 + private static boolean numbering = false;
303.187 + private static int messageNumber = 0;
303.188 +
303.189 + public static void createDialogWithInstructions( String[] instructions )
303.190 + {
303.191 + dialog = new TestDialog( new Frame(), "Instructions" );
303.192 + dialog.printInstructions( instructions );
303.193 + dialog.setVisible(true);
303.194 + println( "Any messages for the tester will display here." );
303.195 + }
303.196 +
303.197 + public static void createDialog( )
303.198 + {
303.199 + dialog = new TestDialog( new Frame(), "Instructions" );
303.200 + String[] defInstr = { "Instructions will appear here. ", "" } ;
303.201 + dialog.printInstructions( defInstr );
303.202 + dialog.setVisible(true);
303.203 + println( "Any messages for the tester will display here." );
303.204 + }
303.205 +
303.206 + /* Enables message counting for the tester. */
303.207 + public static void enableNumbering(boolean enable){
303.208 + numbering = enable;
303.209 + }
303.210 +
303.211 + public static void printInstructions( String[] instructions )
303.212 + {
303.213 + dialog.printInstructions( instructions );
303.214 + }
303.215 +
303.216 +
303.217 + public static void println( String messageIn )
303.218 + {
303.219 + if (numbering) {
303.220 + messageIn = "" + messageNumber + " " + messageIn;
303.221 + messageNumber++;
303.222 + }
303.223 + dialog.displayMessage( messageIn );
303.224 + }
303.225 +
303.226 +}// Sysout class
303.227 +
303.228 +/**
303.229 + This is part of the standard test machinery. It provides a place for the
303.230 + test instructions to be displayed, and a place for interactive messages
303.231 + to the user to be displayed.
303.232 + To have the test instructions displayed, see Sysout.
303.233 + To have a message to the user be displayed, see Sysout.
303.234 + Do not call anything in this dialog directly.
303.235 + */
303.236 +class TestDialog extends Dialog
303.237 +{
303.238 +
303.239 + TextArea instructionsText;
303.240 + TextArea messageText;
303.241 + int maxStringLength = 80;
303.242 +
303.243 + //DO NOT call this directly, go through Sysout
303.244 + public TestDialog( Frame frame, String name )
303.245 + {
303.246 + super( frame, name );
303.247 + int scrollBoth = TextArea.SCROLLBARS_BOTH;
303.248 + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
303.249 + add( "North", instructionsText );
303.250 +
303.251 + messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
303.252 + add("Center", messageText);
303.253 +
303.254 + pack();
303.255 +
303.256 + setVisible(true);
303.257 + }// TestDialog()
303.258 +
303.259 + //DO NOT call this directly, go through Sysout
303.260 + public void printInstructions( String[] instructions )
303.261 + {
303.262 + //Clear out any current instructions
303.263 + instructionsText.setText( "" );
303.264 +
303.265 + //Go down array of instruction strings
303.266 +
303.267 + String printStr, remainingStr;
303.268 + for( int i=0; i < instructions.length; i++ )
303.269 + {
303.270 + //chop up each into pieces maxSringLength long
303.271 + remainingStr = instructions[ i ];
303.272 + while( remainingStr.length() > 0 )
303.273 + {
303.274 + //if longer than max then chop off first max chars to print
303.275 + if( remainingStr.length() >= maxStringLength )
303.276 + {
303.277 + //Try to chop on a word boundary
303.278 + int posOfSpace = remainingStr.
303.279 + lastIndexOf( ' ', maxStringLength - 1 );
303.280 +
303.281 + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
303.282 +
303.283 + printStr = remainingStr.substring( 0, posOfSpace + 1 );
303.284 + remainingStr = remainingStr.substring( posOfSpace + 1 );
303.285 + }
303.286 + //else just print
303.287 + else
303.288 + {
303.289 + printStr = remainingStr;
303.290 + remainingStr = "";
303.291 + }
303.292 +
303.293 + instructionsText.append( printStr + "\n" );
303.294 +
303.295 + }// while
303.296 +
303.297 + }// for
303.298 +
303.299 + }//printInstructions()
303.300 +
303.301 + //DO NOT call this directly, go through Sysout
303.302 + public void displayMessage( String messageIn )
303.303 + {
303.304 + messageText.append( messageIn + "\n" );
303.305 + System.out.println(messageIn);
303.306 + }
303.307 +
303.308 +}// TestDialog class
304.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
304.2 +++ b/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.html Thu Apr 16 19:10:32 2009 -0700
304.3 @@ -0,0 +1,20 @@
304.4 +<html>
304.5 +<!--
304.6 + @test
304.7 + @bug 6730447
304.8 + @summary Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported
304.9 + @author dmitry.cherepanov@...: area=awt.mouse
304.10 + @run applet/manual=yesno AWTPanelSmoothWheel.html
304.11 + -->
304.12 +<head>
304.13 +<title> AWTPanelSmoothWheel </title>
304.14 +</head>
304.15 +<body>
304.16 +
304.17 +<h1> AWTPanelSmoothWheel <br>Bug ID: 6730447</h1>
304.18 +
304.19 +<p> See the dialog box (usually in upper left corner) for instructions</p>
304.20 +
304.21 +<APPLET CODE="AWTPanelSmoothWheel.class" WIDTH=200 HEIGHT=200></APPLET>
304.22 +</body>
304.23 +</html>
305.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
305.2 +++ b/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.java Thu Apr 16 19:10:32 2009 -0700
305.3 @@ -0,0 +1,251 @@
305.4 +/*
305.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
305.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
305.7 + *
305.8 + * This code is free software; you can redistribute it and/or modify it
305.9 + * under the terms of the GNU General Public License version 2 only, as
305.10 + * published by the Free Software Foundation.
305.11 + *
305.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
305.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
305.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
305.15 + * version 2 for more details (a copy is included in the LICENSE file that
305.16 + * accompanied this code).
305.17 + *
305.18 + * You should have received a copy of the GNU General Public License version
305.19 + * 2 along with this work; if not, write to the Free Software Foundation,
305.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
305.21 + *
305.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
305.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
305.24 + * have any questions.
305.25 + */
305.26 +
305.27 +/*
305.28 + test
305.29 + @bug 6730447
305.30 + @summary Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported
305.31 + @author dmitry.cherepanov@...: area=awt.mouse
305.32 + @run applet/manual=yesno AWTPanelSmoothWheel.html
305.33 +*/
305.34 +
305.35 +/**
305.36 + * AWTPanelSmoothWheel.java
305.37 + *
305.38 + * summary:
305.39 + */
305.40 +
305.41 +import java.applet.Applet;
305.42 +import java.awt.*;
305.43 +import java.awt.event.*;
305.44 +
305.45 +//Manual tests should run as applet tests if possible because they
305.46 +// get their environments cleaned up, including AWT threads, any
305.47 +// test created threads, and any system resources used by the test
305.48 +// such as file descriptors. (This is normally not a problem as
305.49 +// main tests usually run in a separate VM, however on some platforms
305.50 +// such as the Mac, separate VMs are not possible and non-applet
305.51 +// tests will cause problems). Also, you don't have to worry about
305.52 +// synchronisation stuff in Applet tests the way you do in main
305.53 +// tests...
305.54 +
305.55 +
305.56 +public class AWTPanelSmoothWheel extends Applet
305.57 +{
305.58 + //Declare things used in the test, like buttons and labels here
305.59 +
305.60 + public void init()
305.61 + {
305.62 + //Create instructions for the user here, as well as set up
305.63 + // the environment -- set the layout manager, add buttons,
305.64 + // etc.
305.65 + this.setLayout (new BorderLayout ());
305.66 +
305.67 + String[] instructions =
305.68 + {
305.69 + " the test is relevant for windows platforms and ",
305.70 + " mouses with high-resolution wheel, please just press pass if it's not the case ",
305.71 + " place the mouse cursor above the green panel and rotate the mouse wheel " ,
305.72 + " the test will print all mouse wheel messages into the logging panel, ",
305.73 + " please make sure that some of the messages have non-zero 'wheelRotation' value ",
305.74 + " in this case the test passes, otherwise it fails, ",
305.75 + " please make sure the test works OK if the mouse wheel is rotated very slow "
305.76 + };
305.77 + Sysout.createDialogWithInstructions( instructions );
305.78 +
305.79 + }//End init()
305.80 +
305.81 + public void start ()
305.82 + {
305.83 + Panel panel = new Panel();
305.84 + panel.setBackground(Color.green);
305.85 + panel.addMouseWheelListener(new MouseWheelListener() {
305.86 + public void mouseWheelMoved(MouseWheelEvent e) {
305.87 + Sysout.println(e.toString());
305.88 + }
305.89 + });
305.90 +
305.91 + //Get things going. Request focus, set size, et cetera
305.92 + setSize (200,200);
305.93 + setLayout(new BorderLayout());
305.94 + add(panel, BorderLayout.CENTER);
305.95 + setVisible(true);
305.96 + validate();
305.97 +
305.98 + //What would normally go into main() will probably go here.
305.99 + //Use System.out.println for diagnostic messages that you want
305.100 + // to read after the test is done.
305.101 + //Use Sysout.println for messages you want the tester to read.
305.102 +
305.103 + }// start()
305.104 +
305.105 + //The rest of this class is the actions which perform the test...
305.106 +
305.107 + //Use Sysout.println to communicate with the user NOT System.out!!
305.108 + //Sysout.println ("Something Happened!");
305.109 +
305.110 +}// class ManualYesNoTest
305.111 +
305.112 +/* Place other classes related to the test after this line */
305.113 +
305.114 +
305.115 +
305.116 +
305.117 +
305.118 +/****************************************************
305.119 + Standard Test Machinery
305.120 + DO NOT modify anything below -- it's a standard
305.121 + chunk of code whose purpose is to make user
305.122 + interaction uniform, and thereby make it simpler
305.123 + to read and understand someone else's test.
305.124 + ****************************************************/
305.125 +
305.126 +/**
305.127 + This is part of the standard test machinery.
305.128 + It creates a dialog (with the instructions), and is the interface
305.129 + for sending text messages to the user.
305.130 + To print the instructions, send an array of strings to Sysout.createDialog
305.131 + WithInstructions method. Put one line of instructions per array entry.
305.132 + To display a message for the tester to see, simply call Sysout.println
305.133 + with the string to be displayed.
305.134 + This mimics System.out.println but works within the test harness as well
305.135 + as standalone.
305.136 + */
305.137 +
305.138 +class Sysout
305.139 +{
305.140 + private static TestDialog dialog;
305.141 +
305.142 + public static void createDialogWithInstructions( String[] instructions )
305.143 + {
305.144 + dialog = new TestDialog( new Frame(), "Instructions" );
305.145 + dialog.printInstructions( instructions );
305.146 + dialog.setVisible(true);
305.147 + println( "Any messages for the tester will display here." );
305.148 + }
305.149 +
305.150 + public static void createDialog( )
305.151 + {
305.152 + dialog = new TestDialog( new Frame(), "Instructions" );
305.153 + String[] defInstr = { "Instructions will appear here. ", "" } ;
305.154 + dialog.printInstructions( defInstr );
305.155 + dialog.setVisible(true);
305.156 + println( "Any messages for the tester will display here." );
305.157 + }
305.158 +
305.159 +
305.160 + public static void printInstructions( String[] instructions )
305.161 + {
305.162 + dialog.printInstructions( instructions );
305.163 + }
305.164 +
305.165 +
305.166 + public static void println( String messageIn )
305.167 + {
305.168 + dialog.displayMessage( messageIn );
305.169 + }
305.170 +
305.171 +}// Sysout class
305.172 +
305.173 +/**
305.174 + This is part of the standard test machinery. It provides a place for the
305.175 + test instructions to be displayed, and a place for interactive messages
305.176 + to the user to be displayed.
305.177 + To have the test instructions displayed, see Sysout.
305.178 + To have a message to the user be displayed, see Sysout.
305.179 + Do not call anything in this dialog directly.
305.180 + */
305.181 +class TestDialog extends Dialog
305.182 +{
305.183 +
305.184 + TextArea instructionsText;
305.185 + TextArea messageText;
305.186 + int maxStringLength = 80;
305.187 +
305.188 + //DO NOT call this directly, go through Sysout
305.189 + public TestDialog( Frame frame, String name )
305.190 + {
305.191 + super( frame, name );
305.192 + int scrollBoth = TextArea.SCROLLBARS_BOTH;
305.193 + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
305.194 + add( "North", instructionsText );
305.195 +
305.196 + messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
305.197 + add("Center", messageText);
305.198 +
305.199 + pack();
305.200 +
305.201 + setVisible(true);
305.202 + }// TestDialog()
305.203 +
305.204 + //DO NOT call this directly, go through Sysout
305.205 + public void printInstructions( String[] instructions )
305.206 + {
305.207 + //Clear out any current instructions
305.208 + instructionsText.setText( "" );
305.209 +
305.210 + //Go down array of instruction strings
305.211 +
305.212 + String printStr, remainingStr;
305.213 + for( int i=0; i < instructions.length; i++ )
305.214 + {
305.215 + //chop up each into pieces maxSringLength long
305.216 + remainingStr = instructions[ i ];
305.217 + while( remainingStr.length() > 0 )
305.218 + {
305.219 + //if longer than max then chop off first max chars to print
305.220 + if( remainingStr.length() >= maxStringLength )
305.221 + {
305.222 + //Try to chop on a word boundary
305.223 + int posOfSpace = remainingStr.
305.224 + lastIndexOf( ' ', maxStringLength - 1 );
305.225 +
305.226 + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
305.227 +
305.228 + printStr = remainingStr.substring( 0, posOfSpace + 1 );
305.229 + remainingStr = remainingStr.substring( posOfSpace + 1 );
305.230 + }
305.231 + //else just print
305.232 + else
305.233 + {
305.234 + printStr = remainingStr;
305.235 + remainingStr = "";
305.236 + }
305.237 +
305.238 + instructionsText.append( printStr + "\n" );
305.239 +
305.240 + }// while
305.241 +
305.242 + }// for
305.243 +
305.244 + }//printInstructions()
305.245 +
305.246 + //DO NOT call this directly, go through Sysout
305.247 + public void displayMessage( String messageIn )
305.248 + {
305.249 + messageText.append( messageIn + "\n" );
305.250 + System.out.println(messageIn);
305.251 + }
305.252 +
305.253 +}// TestDialog class
305.254 +
306.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
306.2 +++ b/test/java/beans/Beans/6669869/TestDesignTime.java Thu Apr 16 19:10:32 2009 -0700
306.3 @@ -0,0 +1,52 @@
306.4 +/*
306.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
306.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
306.7 + *
306.8 + * This code is free software; you can redistribute it and/or modify it
306.9 + * under the terms of the GNU General Public License version 2 only, as
306.10 + * published by the Free Software Foundation.
306.11 + *
306.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
306.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
306.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
306.15 + * version 2 for more details (a copy is included in the LICENSE file that
306.16 + * accompanied this code).
306.17 + *
306.18 + * You should have received a copy of the GNU General Public License version
306.19 + * 2 along with this work; if not, write to the Free Software Foundation,
306.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
306.21 + *
306.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
306.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
306.24 + * have any questions.
306.25 + */
306.26 +
306.27 +/*
306.28 + * @test
306.29 + * @bug 6669869
306.30 + * @summary Tests DesignTime property in different application contexts
306.31 + * @author Sergey Malenkov
306.32 + */
306.33 +
306.34 +import java.beans.Beans;
306.35 +import sun.awt.SunToolkit;
306.36 +
306.37 +public class TestDesignTime implements Runnable {
306.38 + public static void main(String[] args) throws InterruptedException {
306.39 + if (Beans.isDesignTime()) {
306.40 + throw new Error("unexpected DesignTime property");
306.41 + }
306.42 + Beans.setDesignTime(!Beans.isDesignTime());
306.43 + ThreadGroup group = new ThreadGroup("$$$");
306.44 + Thread thread = new Thread(group, new TestDesignTime());
306.45 + thread.start();
306.46 + thread.join();
306.47 + }
306.48 +
306.49 + public void run() {
306.50 + SunToolkit.createNewAppContext();
306.51 + if (Beans.isDesignTime()) {
306.52 + throw new Error("shared DesignTime property");
306.53 + }
306.54 + }
306.55 +}
307.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
307.2 +++ b/test/java/beans/Beans/6669869/TestGuiAvailable.java Thu Apr 16 19:10:32 2009 -0700
307.3 @@ -0,0 +1,53 @@
307.4 +/*
307.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
307.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
307.7 + *
307.8 + * This code is free software; you can redistribute it and/or modify it
307.9 + * under the terms of the GNU General Public License version 2 only, as
307.10 + * published by the Free Software Foundation.
307.11 + *
307.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
307.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
307.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
307.15 + * version 2 for more details (a copy is included in the LICENSE file that
307.16 + * accompanied this code).
307.17 + *
307.18 + * You should have received a copy of the GNU General Public License version
307.19 + * 2 along with this work; if not, write to the Free Software Foundation,
307.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
307.21 + *
307.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
307.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
307.24 + * have any questions.
307.25 + */
307.26 +
307.27 +/*
307.28 + * @test
307.29 + * @bug 6669869
307.30 + * @summary Tests GuiAvailable property in different application contexts
307.31 + * @author Sergey Malenkov
307.32 + */
307.33 +
307.34 +import java.awt.GraphicsEnvironment;
307.35 +import java.beans.Beans;
307.36 +import sun.awt.SunToolkit;
307.37 +
307.38 +public class TestGuiAvailable implements Runnable {
307.39 + public static void main(String[] args) throws InterruptedException {
307.40 + if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
307.41 + throw new Error("unexpected GuiAvailable property");
307.42 + }
307.43 + Beans.setGuiAvailable(!Beans.isGuiAvailable());
307.44 + ThreadGroup group = new ThreadGroup("$$$");
307.45 + Thread thread = new Thread(group, new TestGuiAvailable());
307.46 + thread.start();
307.47 + thread.join();
307.48 + }
307.49 +
307.50 + public void run() {
307.51 + SunToolkit.createNewAppContext();
307.52 + if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) {
307.53 + throw new Error("shared GuiAvailable property");
307.54 + }
307.55 + }
307.56 +}
308.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
308.2 +++ b/test/java/lang/ClassLoader/deadlock/Alice.java Thu Apr 16 19:10:32 2009 -0700
308.3 @@ -0,0 +1,29 @@
308.4 +/*
308.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
308.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
308.7 + *
308.8 + * This code is free software; you can redistribute it and/or modify it
308.9 + * under the terms of the GNU General Public License version 2 only, as
308.10 + * published by the Free Software Foundation.
308.11 + *
308.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
308.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308.15 + * version 2 for more details (a copy is included in the LICENSE file that
308.16 + * accompanied this code).
308.17 + *
308.18 + * You should have received a copy of the GNU General Public License version
308.19 + * 2 along with this work; if not, write to the Free Software Foundation,
308.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
308.21 + *
308.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
308.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
308.24 + * have any questions.
308.25 + */
308.26 +package comSA;
308.27 +
308.28 +public class Alice extends comSB.SupAlice {
308.29 + static {
308.30 + System.out.println("comSA.Alice loaded");
308.31 + }
308.32 +}
309.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
309.2 +++ b/test/java/lang/ClassLoader/deadlock/Bob.java Thu Apr 16 19:10:32 2009 -0700
309.3 @@ -0,0 +1,29 @@
309.4 +/*
309.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
309.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
309.7 + *
309.8 + * This code is free software; you can redistribute it and/or modify it
309.9 + * under the terms of the GNU General Public License version 2 only, as
309.10 + * published by the Free Software Foundation.
309.11 + *
309.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
309.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
309.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
309.15 + * version 2 for more details (a copy is included in the LICENSE file that
309.16 + * accompanied this code).
309.17 + *
309.18 + * You should have received a copy of the GNU General Public License version
309.19 + * 2 along with this work; if not, write to the Free Software Foundation,
309.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
309.21 + *
309.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
309.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
309.24 + * have any questions.
309.25 + */
309.26 +package comSB;
309.27 +
309.28 +public class Bob extends comSA.SupBob {
309.29 + static {
309.30 + System.out.println("comSB.Bob loaded");
309.31 + }
309.32 +}
310.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
310.2 +++ b/test/java/lang/ClassLoader/deadlock/DelegatingLoader.java Thu Apr 16 19:10:32 2009 -0700
310.3 @@ -0,0 +1,93 @@
310.4 +/*
310.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
310.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
310.7 + *
310.8 + * This code is free software; you can redistribute it and/or modify it
310.9 + * under the terms of the GNU General Public License version 2 only, as
310.10 + * published by the Free Software Foundation.
310.11 + *
310.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
310.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
310.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
310.15 + * version 2 for more details (a copy is included in the LICENSE file that
310.16 + * accompanied this code).
310.17 + *
310.18 + * You should have received a copy of the GNU General Public License version
310.19 + * 2 along with this work; if not, write to the Free Software Foundation,
310.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
310.21 + *
310.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
310.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
310.24 + * have any questions.
310.25 + */
310.26 +
310.27 +import java.net.MalformedURLException;
310.28 +import java.net.URL;
310.29 +import java.net.URLClassLoader;
310.30 +import java.util.concurrent.ConcurrentHashMap;
310.31 +import java.util.concurrent.locks.*;
310.32 +import java.lang.reflect.*;
310.33 +
310.34 +public class DelegatingLoader extends URLClassLoader {
310.35 +
310.36 + private DelegatingLoader delLoader;
310.37 + private String[] delClasses;
310.38 +
310.39 + static {
310.40 + boolean supportParallel = false;
310.41 + try {
310.42 + Class c = Class.forName("java.lang.ClassLoader");
310.43 + Method m = c.getDeclaredMethod("registerAsParallelCapable",
310.44 + new Class[0]);
310.45 + m.setAccessible(true);
310.46 + Object result = (Boolean) m.invoke(null);
310.47 + if (result instanceof Boolean) {
310.48 + supportParallel = ((Boolean) result).booleanValue();
310.49 + } else {
310.50 + // Should never happen
310.51 + System.out.println("Error: ClassLoader.registerAsParallelCapable() did not return a boolean!");
310.52 + System.exit(1);
310.53 + }
310.54 + } catch (NoSuchMethodException nsme) {
310.55 + System.out.println("No ClassLoader.registerAsParallelCapable() API");
310.56 + } catch (NoSuchMethodError nsme2) {
310.57 + System.out.println("No ClassLoader.registerAsParallelCapable() API");
310.58 + } catch (Exception ex) {
310.59 + ex.printStackTrace();
310.60 + // Exit immediately to indicate an error
310.61 + System.exit(1);
310.62 + }
310.63 + System.out.println("Parallel ClassLoader registration: " +
310.64 + supportParallel);
310.65 + }
310.66 +
310.67 + public DelegatingLoader(URL urls[]) {
310.68 + super(urls);
310.69 + System.out.println("DelegatingLoader using URL " + urls[0]);
310.70 + }
310.71 +
310.72 + public void setDelegate(String[] delClasses, DelegatingLoader delLoader) {
310.73 + this.delClasses = delClasses;
310.74 + this.delLoader = delLoader;
310.75 + }
310.76 +
310.77 + public Class loadClass(String className, boolean resolve)
310.78 + throws ClassNotFoundException {
310.79 + for (int i = 0; i < delClasses.length; i++) {
310.80 + if (delClasses[i].equals(className)) {
310.81 + Starter.log("Delegating class loading for " + className);
310.82 + try {
310.83 + Thread.sleep(500);
310.84 + } catch (InterruptedException ie) {
310.85 + return null;
310.86 + }
310.87 + return delLoader.loadClass(className, resolve);
310.88 + }
310.89 + }
310.90 +
310.91 + Starter.log("Loading local class " + className);
310.92 +// synchronized (getClassLoadingLock(className)) {
310.93 + return super.loadClass(className, resolve);
310.94 +// }
310.95 + }
310.96 +}
311.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
311.2 +++ b/test/java/lang/ClassLoader/deadlock/Starter.java Thu Apr 16 19:10:32 2009 -0700
311.3 @@ -0,0 +1,105 @@
311.4 +/*
311.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
311.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
311.7 + *
311.8 + * This code is free software; you can redistribute it and/or modify it
311.9 + * under the terms of the GNU General Public License version 2 only, as
311.10 + * published by the Free Software Foundation.
311.11 + *
311.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
311.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
311.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
311.15 + * version 2 for more details (a copy is included in the LICENSE file that
311.16 + * accompanied this code).
311.17 + *
311.18 + * You should have received a copy of the GNU General Public License version
311.19 + * 2 along with this work; if not, write to the Free Software Foundation,
311.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
311.21 + *
311.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
311.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
311.24 + * have any questions.
311.25 + */
311.26 +
311.27 +import java.net.MalformedURLException;
311.28 +import java.net.URL;
311.29 +
311.30 +public class Starter implements Runnable {
311.31 +
311.32 + private String id;
311.33 + private DelegatingLoader dl;
311.34 + private String startClass;
311.35 +
311.36 + private static DelegatingLoader saLoader, sbLoader;
311.37 +
311.38 + public static void log(String line) {
311.39 + System.out.println(line);
311.40 + }
311.41 +
311.42 + public static void main(String[] args) {
311.43 + URL[] urlsa = new URL[1];
311.44 + URL[] urlsb = new URL[1];
311.45 + try {
311.46 + String testDir = System.getProperty("test.classes", ".");
311.47 + String sep = System.getProperty("file.separator");
311.48 + urlsa[0] = new URL("file://" + testDir + sep + "SA" + sep);
311.49 + urlsb[0] = new URL("file://" + testDir + sep + "SB" + sep);
311.50 + } catch (MalformedURLException e) {
311.51 + e.printStackTrace();
311.52 + }
311.53 + // Set up Classloader delegation hierarchy
311.54 + saLoader = new DelegatingLoader(urlsa);
311.55 + sbLoader = new DelegatingLoader(urlsb);
311.56 +
311.57 + String[] saClasses = { "comSA.SupBob", "comSA.Alice" };
311.58 + String[] sbClasses = { "comSB.SupAlice", "comSB.Bob" };
311.59 +
311.60 + saLoader.setDelegate(sbClasses, sbLoader);
311.61 + sbLoader.setDelegate(saClasses, saLoader);
311.62 +
311.63 + // test one-way delegate
311.64 + String testType = args[0];
311.65 + if (testType.equals("one-way")) {
311.66 + test("comSA.Alice", "comSA.SupBob");
311.67 + } else if (testType.equals("cross")) {
311.68 + // test cross delegate
311.69 + test("comSA.Alice", "comSB.Bob");
311.70 + } else {
311.71 + System.out.println("ERROR: unsupported - " + testType);
311.72 + }
311.73 + }
311.74 +
311.75 + private static void test(String clsForSA, String clsForSB) {
311.76 + Starter ia = new Starter("SA", saLoader, clsForSA);
311.77 + Starter ib = new Starter("SB", sbLoader, clsForSB);
311.78 + new Thread(ia).start();
311.79 + new Thread(ib).start();
311.80 + }
311.81 +
311.82 + public static void sleep() {
311.83 + try {
311.84 + Thread.sleep(500);
311.85 + } catch (InterruptedException e) {
311.86 + e.printStackTrace();
311.87 + log("Thread interrupted");
311.88 + }
311.89 + }
311.90 +
311.91 + private Starter(String id, DelegatingLoader dl, String startClass) {
311.92 + this.id = id;
311.93 + this.dl = dl;
311.94 + this.startClass = startClass;
311.95 + }
311.96 +
311.97 + public void run() {
311.98 + log("Spawned thread " + id + " running");
311.99 + try {
311.100 + // To mirror the WAS deadlock, need to ensure class load
311.101 + // is routed via the VM.
311.102 + Class.forName(startClass, true, dl);
311.103 + } catch (ClassNotFoundException e) {
311.104 + e.printStackTrace();
311.105 + }
311.106 + log("Thread " + id + " terminating");
311.107 + }
311.108 +}
312.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
312.2 +++ b/test/java/lang/ClassLoader/deadlock/SupAlice.java Thu Apr 16 19:10:32 2009 -0700
312.3 @@ -0,0 +1,29 @@
312.4 +/*
312.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
312.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
312.7 + *
312.8 + * This code is free software; you can redistribute it and/or modify it
312.9 + * under the terms of the GNU General Public License version 2 only, as
312.10 + * published by the Free Software Foundation.
312.11 + *
312.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
312.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
312.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
312.15 + * version 2 for more details (a copy is included in the LICENSE file that
312.16 + * accompanied this code).
312.17 + *
312.18 + * You should have received a copy of the GNU General Public License version
312.19 + * 2 along with this work; if not, write to the Free Software Foundation,
312.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
312.21 + *
312.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
312.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
312.24 + * have any questions.
312.25 + */
312.26 +package comSB;
312.27 +
312.28 +public class SupAlice {
312.29 + static {
312.30 + System.out.println("comSB.SupAlice loaded");
312.31 + }
312.32 +}
313.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
313.2 +++ b/test/java/lang/ClassLoader/deadlock/SupBob.java Thu Apr 16 19:10:32 2009 -0700
313.3 @@ -0,0 +1,29 @@
313.4 +/*
313.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
313.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
313.7 + *
313.8 + * This code is free software; you can redistribute it and/or modify it
313.9 + * under the terms of the GNU General Public License version 2 only, as
313.10 + * published by the Free Software Foundation.
313.11 + *
313.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
313.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
313.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
313.15 + * version 2 for more details (a copy is included in the LICENSE file that
313.16 + * accompanied this code).
313.17 + *
313.18 + * You should have received a copy of the GNU General Public License version
313.19 + * 2 along with this work; if not, write to the Free Software Foundation,
313.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
313.21 + *
313.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
313.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
313.24 + * have any questions.
313.25 + */
313.26 +package comSA;
313.27 +
313.28 +public class SupBob {
313.29 + static {
313.30 + System.out.println("comSA.SupBob loaded");
313.31 + }
313.32 +}
314.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
314.2 +++ b/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh Thu Apr 16 19:10:32 2009 -0700
314.3 @@ -0,0 +1,105 @@
314.4 +#
314.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
314.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
314.7 +#
314.8 +# This code is free software; you can redistribute it and/or modify it
314.9 +# under the terms of the GNU General Public License version 2 only, as
314.10 +# published by the Free Software Foundation.
314.11 +#
314.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
314.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
314.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
314.15 +# version 2 for more details (a copy is included in the LICENSE file that
314.16 +# accompanied this code).
314.17 +#
314.18 +# You should have received a copy of the GNU General Public License version
314.19 +# 2 along with this work; if not, write to the Free Software Foundation,
314.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
314.21 +#
314.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
314.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
314.24 +# have any questions.
314.25 +#
314.26 +# @test
314.27 +# @bug 4735126
314.28 +# @summary (cl) ClassLoader.loadClass locks all instances in chain
314.29 +# when delegating
314.30 +#
314.31 +# @run shell/timeout=10 TestCrossDelegate.sh
314.32 +
314.33 +# if running by hand on windows, change TESTSRC and TESTCLASSES to "."
314.34 +if [ "${TESTSRC}" = "" ] ; then
314.35 + TESTSRC=`pwd`
314.36 +fi
314.37 +if [ "${TESTCLASSES}" = "" ] ; then
314.38 + TESTCLASSES=`pwd`
314.39 +fi
314.40 +
314.41 +# if running by hand on windows, change this to appropriate value
314.42 +if [ "${TESTJAVA}" = "" ] ; then
314.43 + echo "TESTJAVA not set. Test cannot execute."
314.44 + echo "FAILED!!!"
314.45 + exit 1
314.46 +fi
314.47 +echo TESTSRC=${TESTSRC}
314.48 +echo TESTCLASSES=${TESTCLASSES}
314.49 +echo TESTJAVA=${TESTJAVA}
314.50 +echo ""
314.51 +
314.52 +# set platform-specific variables
314.53 +OS=`uname -s`
314.54 +case "$OS" in
314.55 + SunOS )
314.56 + FS="/"
314.57 + ;;
314.58 + Linux )
314.59 + FS="/"
314.60 + ;;
314.61 + Windows* )
314.62 + FS="\\"
314.63 + ;;
314.64 +esac
314.65 +
314.66 +# compile test
314.67 +${TESTJAVA}${FS}bin${FS}javac \
314.68 + -d ${TESTCLASSES} \
314.69 + ${TESTSRC}${FS}Starter.java ${TESTSRC}${FS}DelegatingLoader.java
314.70 +
314.71 +STATUS=$?
314.72 +if [ ${STATUS} -ne 0 ]
314.73 +then
314.74 + exit ${STATUS}
314.75 +fi
314.76 +
314.77 +# set up test
314.78 +${TESTJAVA}${FS}bin${FS}javac \
314.79 + -d ${TESTCLASSES}${FS} \
314.80 + ${TESTSRC}${FS}Alice.java ${TESTSRC}${FS}SupBob.java \
314.81 + ${TESTSRC}${FS}Bob.java ${TESTSRC}${FS}SupAlice.java
314.82 +
314.83 +cd ${TESTCLASSES}
314.84 +DIRS="SA SB"
314.85 +for dir in $DIRS
314.86 +do
314.87 + if [ -d ${dir} ]; then
314.88 + rm -rf ${dir}
314.89 + fi
314.90 + mkdir ${dir}
314.91 + mv com${dir} ${dir}
314.92 +done
314.93 +
314.94 +# run test
314.95 +${TESTJAVA}${FS}bin${FS}java \
314.96 + -verbose:class -XX:+TraceClassLoading -cp . \
314.97 + -Dtest.classes=${TESTCLASSES} \
314.98 + Starter cross
314.99 +# -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass \
314.100 +
314.101 +# save error status
314.102 +STATUS=$?
314.103 +
314.104 +# clean up
314.105 +rm -rf ${TESTCLASSES}${FS}SA ${TESTCLASSES}${FS}SB
314.106 +
314.107 +# return
314.108 +exit ${STATUS}
315.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
315.2 +++ b/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh Thu Apr 16 19:10:32 2009 -0700
315.3 @@ -0,0 +1,105 @@
315.4 +#
315.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
315.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
315.7 +#
315.8 +# This code is free software; you can redistribute it and/or modify it
315.9 +# under the terms of the GNU General Public License version 2 only, as
315.10 +# published by the Free Software Foundation.
315.11 +#
315.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
315.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
315.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
315.15 +# version 2 for more details (a copy is included in the LICENSE file that
315.16 +# accompanied this code).
315.17 +#
315.18 +# You should have received a copy of the GNU General Public License version
315.19 +# 2 along with this work; if not, write to the Free Software Foundation,
315.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
315.21 +#
315.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
315.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
315.24 +# have any questions.
315.25 +#
315.26 +# @test
315.27 +# @bug 4735126
315.28 +# @summary (cl) ClassLoader.loadClass locks all instances in chain
315.29 +# when delegating
315.30 +#
315.31 +# @run shell/timeout=10 TestOneWayDelegate.sh
315.32 +
315.33 +# if running by hand on windows, change TESTSRC and TESTCLASSES to "."
315.34 +if [ "${TESTSRC}" = "" ] ; then
315.35 + TESTSRC=`pwd`
315.36 +fi
315.37 +if [ "${TESTCLASSES}" = "" ] ; then
315.38 + TESTCLASSES=`pwd`
315.39 +fi
315.40 +
315.41 +# if running by hand on windows, change this to appropriate value
315.42 +if [ "${TESTJAVA}" = "" ] ; then
315.43 + echo "TESTJAVA not set. Test cannot execute."
315.44 + echo "FAILED!!!"
315.45 + exit 1
315.46 +fi
315.47 +echo TESTSRC=${TESTSRC}
315.48 +echo TESTCLASSES=${TESTCLASSES}
315.49 +echo TESTJAVA=${TESTJAVA}
315.50 +echo ""
315.51 +
315.52 +# set platform-specific variables
315.53 +OS=`uname -s`
315.54 +case "$OS" in
315.55 + SunOS )
315.56 + FS="/"
315.57 + ;;
315.58 + Linux )
315.59 + FS="/"
315.60 + ;;
315.61 + Windows* )
315.62 + FS="\\"
315.63 + ;;
315.64 +esac
315.65 +
315.66 +# compile test
315.67 +${TESTJAVA}${FS}bin${FS}javac \
315.68 + -d ${TESTCLASSES} \
315.69 + ${TESTSRC}${FS}Starter.java ${TESTSRC}${FS}DelegatingLoader.java
315.70 +
315.71 +STATUS=$?
315.72 +if [ ${STATUS} -ne 0 ]
315.73 +then
315.74 + exit ${STATUS}
315.75 +fi
315.76 +
315.77 +# set up test
315.78 +${TESTJAVA}${FS}bin${FS}javac \
315.79 + -d ${TESTCLASSES}${FS} \
315.80 + ${TESTSRC}${FS}Alice.java ${TESTSRC}${FS}SupBob.java \
315.81 + ${TESTSRC}${FS}Bob.java ${TESTSRC}${FS}SupAlice.java
315.82 +
315.83 +cd ${TESTCLASSES}
315.84 +DIRS="SA SB"
315.85 +for dir in $DIRS
315.86 +do
315.87 + if [ -d ${dir} ]; then
315.88 + rm -rf ${dir}
315.89 + fi
315.90 + mkdir ${dir}
315.91 + mv com${dir} ${dir}
315.92 +done
315.93 +
315.94 +# run test
315.95 +${TESTJAVA}${FS}bin${FS}java \
315.96 + -verbose:class -XX:+TraceClassLoading -cp . \
315.97 + -Dtest.classes=${TESTCLASSES} \
315.98 + Starter one-way
315.99 +# -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass \
315.100 +
315.101 +# save error status
315.102 +STATUS=$?
315.103 +
315.104 +# clean up
315.105 +rm -rf ${TESTCLASSES}${FS}SA ${TESTCLASSES}${FS}SB
315.106 +
315.107 +# return
315.108 +exit ${STATUS}
316.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
316.2 +++ b/test/java/lang/Integer/ValueOf.java Thu Apr 16 19:10:32 2009 -0700
316.3 @@ -0,0 +1,55 @@
316.4 +/*
316.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
316.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
316.7 + *
316.8 + * This code is free software; you can redistribute it and/or modify it
316.9 + * under the terms of the GNU General Public License version 2 only, as
316.10 + * published by the Free Software Foundation.
316.11 + *
316.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
316.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
316.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
316.15 + * version 2 for more details (a copy is included in the LICENSE file that
316.16 + * accompanied this code).
316.17 + *
316.18 + * You should have received a copy of the GNU General Public License version
316.19 + * 2 along with this work; if not, write to the Free Software Foundation,
316.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
316.21 + *
316.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
316.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
316.24 + * have any questions.
316.25 + */
316.26 +
316.27 +/**
316.28 + * @test
316.29 + * @bug 6807702
316.30 + * @summary Basic test for Integer.valueOf
316.31 + * @run main ValueOf
316.32 + * @run main/othervm -esa -XX:+AggressiveOpts ValueOf
316.33 + */
316.34 +
316.35 +public class ValueOf {
316.36 +
316.37 + // test Integer.valueOf over this range (inclusive)
316.38 + private static final int TEST_LOW = -1024;
316.39 + private static final int TEST_HIGH = 24576;
316.40 +
316.41 + public static void main(String[] args) {
316.42 + int i = TEST_LOW;
316.43 + while (i <= TEST_HIGH) {
316.44 + // check that valueOf stores i
316.45 + if (Integer.valueOf(i).intValue() != i)
316.46 + throw new RuntimeException();
316.47 +
316.48 + // check that the same object is returned for integral values
316.49 + // in the range -128 to 127 (inclusive)
316.50 + if (i >= -128 && i <= 127) {
316.51 + if (Integer.valueOf(i) != Integer.valueOf(i))
316.52 + throw new RuntimeException();
316.53 + }
316.54 +
316.55 + i++;
316.56 + }
316.57 + }
316.58 +}
317.1 --- a/test/java/lang/String/ToLowerCase.java Thu Apr 16 17:42:00 2009 +0100
317.2 +++ b/test/java/lang/String/ToLowerCase.java Thu Apr 16 19:10:32 2009 -0700
317.3 @@ -72,7 +72,7 @@
317.4 // I-dot tests (Turkish and Azeri)
317.5 test("\u0130", turkish, "i");
317.6 test("\u0130", az, "i");
317.7 - test("\u0130", Locale.US, "i");
317.8 + test("\u0130", Locale.US, "i\u0307");
317.9
317.10 // Remove dot_above in the sequence I + dot_above (Turkish and Azeri)
317.11 test("I\u0307", turkish, "i");
318.1 --- a/test/java/nio/channels/AsyncCloseAndInterrupt.java Thu Apr 16 17:42:00 2009 +0100
318.2 +++ b/test/java/nio/channels/AsyncCloseAndInterrupt.java Thu Apr 16 19:10:32 2009 -0700
318.3 @@ -22,7 +22,7 @@
318.4 */
318.5
318.6 /* @test
318.7 - * @bug 4460583 4470470 4840199 6419424 6710579 6596323
318.8 + * @bug 4460583 4470470 4840199 6419424 6710579 6596323 6824135
318.9 * @summary Comprehensive test of asynchronous closing and interruption
318.10 * @author Mark Reinhold
318.11 */
319.1 --- a/test/java/nio/channels/DatagramChannel/NotBound.java Thu Apr 16 17:42:00 2009 +0100
319.2 +++ b/test/java/nio/channels/DatagramChannel/NotBound.java Thu Apr 16 19:10:32 2009 -0700
319.3 @@ -22,27 +22,110 @@
319.4 */
319.5
319.6 /* @test
319.7 - * @bug 4512723
319.8 - * @summary Unit test for datagram-socket-channel adaptors
319.9 + * @bug 4512723 6621689
319.10 + * @summary Test that connect/send/receive with unbound DatagramChannel causes
319.11 + * the channel's socket to be bound to a local address
319.12 */
319.13
319.14 import java.net.*;
319.15 -import java.nio.*;
319.16 -import java.nio.channels.*;
319.17 +import java.nio.ByteBuffer;
319.18 +import java.nio.channels.DatagramChannel;
319.19 +import java.io.IOException;
319.20
319.21 -class NotBound {
319.22 - public static void main(String[] args) throws Exception {
319.23 - test1(false);
319.24 - test1(true);
319.25 +public class NotBound {
319.26 +
319.27 + static void checkBound(DatagramChannel dc) throws IOException {
319.28 + if (dc.getLocalAddress() == null)
319.29 + throw new RuntimeException("Not bound??");
319.30 }
319.31
319.32 - static void test1(boolean blocking) throws Exception {
319.33 - ByteBuffer bb = ByteBuffer.allocateDirect(256);
319.34 - DatagramChannel dc1 = DatagramChannel.open();
319.35 - dc1.configureBlocking(false);
319.36 - SocketAddress isa = dc1.receive(bb);
319.37 - if (isa != null)
319.38 - throw new Exception("Unbound dc returned non-null");
319.39 - dc1.close();
319.40 + // starts a thread to send a datagram to the given channel once the channel
319.41 + // is bound to a local address
319.42 + static void wakeupWhenBound(final DatagramChannel dc) {
319.43 + Runnable wakeupTask = new Runnable() {
319.44 + public void run() {
319.45 + try {
319.46 + // poll for local address
319.47 + InetSocketAddress local;
319.48 + do {
319.49 + Thread.sleep(50);
319.50 + local = (InetSocketAddress)dc.getLocalAddress();
319.51 + } while (local == null);
319.52 +
319.53 + // send message to channel to wakeup receiver
319.54 + DatagramChannel sender = DatagramChannel.open();
319.55 + try {
319.56 + ByteBuffer bb = ByteBuffer.wrap("hello".getBytes());
319.57 + InetAddress lh = InetAddress.getLocalHost();
319.58 + SocketAddress target =
319.59 + new InetSocketAddress(lh, local.getPort());
319.60 + sender.send(bb, target);
319.61 + } finally {
319.62 + sender.close();
319.63 + }
319.64 +
319.65 + } catch (Exception x) {
319.66 + x.printStackTrace();
319.67 + }
319.68 + }};
319.69 + new Thread(wakeupTask).start();
319.70 + }
319.71 +
319.72 + public static void main(String[] args) throws IOException {
319.73 + DatagramChannel dc;
319.74 +
319.75 + // connect
319.76 + dc = DatagramChannel.open();
319.77 + try {
319.78 + DatagramChannel peer = DatagramChannel.open()
319.79 + .bind(new InetSocketAddress(0));
319.80 + int peerPort = ((InetSocketAddress)(peer.getLocalAddress())).getPort();
319.81 + try {
319.82 + dc.connect(new InetSocketAddress(InetAddress.getLocalHost(), peerPort));
319.83 + checkBound(dc);
319.84 + } finally {
319.85 + peer.close();
319.86 + }
319.87 + } finally {
319.88 + dc.close();
319.89 + }
319.90 +
319.91 + // send
319.92 + dc = DatagramChannel.open();
319.93 + try {
319.94 + ByteBuffer bb = ByteBuffer.wrap("ignore this".getBytes());
319.95 + SocketAddress target =
319.96 + new InetSocketAddress(InetAddress.getLocalHost(), 5000);
319.97 + dc.send(bb, target);
319.98 + checkBound(dc);
319.99 + } finally {
319.100 + dc.close();
319.101 + }
319.102 +
319.103 + // receive (blocking)
319.104 + dc = DatagramChannel.open();
319.105 + try {
319.106 + ByteBuffer bb = ByteBuffer.allocateDirect(128);
319.107 + wakeupWhenBound(dc);
319.108 + SocketAddress sender = dc.receive(bb);
319.109 + if (sender == null)
319.110 + throw new RuntimeException("Sender should not be null");
319.111 + checkBound(dc);
319.112 + } finally {
319.113 + dc.close();
319.114 + }
319.115 +
319.116 + // receive (non-blocking)
319.117 + dc = DatagramChannel.open();
319.118 + try {
319.119 + dc.configureBlocking(false);
319.120 + ByteBuffer bb = ByteBuffer.allocateDirect(128);
319.121 + SocketAddress sender = dc.receive(bb);
319.122 + if (sender != null)
319.123 + throw new RuntimeException("Sender should be null");
319.124 + checkBound(dc);
319.125 + } finally {
319.126 + dc.close();
319.127 + }
319.128 }
319.129 }
320.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
320.2 +++ b/test/java/nio/channels/Selector/HelperSlowToDie.java Thu Apr 16 19:10:32 2009 -0700
320.3 @@ -0,0 +1,75 @@
320.4 +/*
320.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
320.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
320.7 + *
320.8 + * This code is free software; you can redistribute it and/or modify it
320.9 + * under the terms of the GNU General Public License version 2 only, as
320.10 + * published by the Free Software Foundation.
320.11 + *
320.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
320.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
320.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
320.15 + * version 2 for more details (a copy is included in the LICENSE file that
320.16 + * accompanied this code).
320.17 + *
320.18 + * You should have received a copy of the GNU General Public License version
320.19 + * 2 along with this work; if not, write to the Free Software Foundation,
320.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
320.21 + *
320.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
320.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
320.24 + * have any questions.
320.25 + */
320.26 +
320.27 +/*
320.28 + * @test
320.29 + * @bug 6823609
320.30 + * @summary Selector.select can hangs on Windows for cases where a helper thread
320.31 + * becomes redudant but a new helper is immediately needed.
320.32 + */
320.33 +
320.34 +import java.nio.channels.*;
320.35 +import java.io.IOException;
320.36 +
320.37 +public class HelperSlowToDie {
320.38 + private static final int CHANNELS_PER_THREAD = 1023;
320.39 + private static volatile boolean done;
320.40 +
320.41 + public static void main(String[] args) throws IOException {
320.42 + Selector sel = Selector.open();
320.43 +
320.44 + // register channels
320.45 + SocketChannel[] channels = new SocketChannel[CHANNELS_PER_THREAD];
320.46 + for (int i=0; i<CHANNELS_PER_THREAD; i++) {
320.47 + SocketChannel sc = SocketChannel.open();
320.48 + sc.configureBlocking(false);
320.49 + sc.register(sel, SelectionKey.OP_CONNECT);
320.50 + channels[i] = sc;
320.51 + }
320.52 + sel.selectNow();
320.53 +
320.54 + // Start threads to swamp all cores but one. This improves the chances
320.55 + // of duplicating the bug.
320.56 + Runnable busy = new Runnable() {
320.57 + public void run() {
320.58 + while (!done) ; // no nothing
320.59 + }
320.60 + };
320.61 + int ncores = Runtime.getRuntime().availableProcessors();
320.62 + for (int i=0; i<ncores-1; i++)
320.63 + new Thread(busy).start();
320.64 +
320.65 + // Loop changing the number of channels from 1023 to 1024 and back.
320.66 + for (int i=0; i<1000; i++) {
320.67 + SocketChannel sc = SocketChannel.open();
320.68 + sc.configureBlocking(false);
320.69 + sc.register(sel, SelectionKey.OP_CONNECT);
320.70 + sel.selectNow(); // cause helper to spin up
320.71 + sc.close();
320.72 + sel.selectNow(); // cause helper to retire
320.73 + }
320.74 +
320.75 + // terminate busy threads
320.76 + done = true;
320.77 + }
320.78 +}
321.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
321.2 +++ b/test/java/nio/channels/Selector/LotsOfUpdates.java Thu Apr 16 19:10:32 2009 -0700
321.3 @@ -0,0 +1,38 @@
321.4 +/*
321.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
321.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
321.7 + *
321.8 + * This code is free software; you can redistribute it and/or modify it
321.9 + * under the terms of the GNU General Public License version 2 only, as
321.10 + * published by the Free Software Foundation.
321.11 + *
321.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
321.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
321.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
321.15 + * version 2 for more details (a copy is included in the LICENSE file that
321.16 + * accompanied this code).
321.17 + *
321.18 + * You should have received a copy of the GNU General Public License version
321.19 + * 2 along with this work; if not, write to the Free Software Foundation,
321.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
321.21 + *
321.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
321.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
321.24 + * have any questions.
321.25 + */
321.26 +
321.27 +import java.nio.channels.*;
321.28 +import java.io.IOException;
321.29 +
321.30 +public class LotsOfUpdates {
321.31 + public static void main(String[] args) throws IOException {
321.32 + Selector sel = Selector.open();
321.33 + SocketChannel sc = SocketChannel.open();
321.34 + sc.configureBlocking(false);
321.35 + SelectionKey key = sc.register(sel, 0);
321.36 + for (int i=0; i<50000; i++) {
321.37 + key.interestOps(0);
321.38 + }
321.39 + sel.selectNow();
321.40 + }
321.41 +}
322.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
322.2 +++ b/test/java/nio/channels/Selector/RegAfterPreClose.java Thu Apr 16 19:10:32 2009 -0700
322.3 @@ -0,0 +1,127 @@
322.4 +/*
322.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
322.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
322.7 + *
322.8 + * This code is free software; you can redistribute it and/or modify it
322.9 + * under the terms of the GNU General Public License version 2 only, as
322.10 + * published by the Free Software Foundation.
322.11 + *
322.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
322.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
322.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
322.15 + * version 2 for more details (a copy is included in the LICENSE file that
322.16 + * accompanied this code).
322.17 + *
322.18 + * You should have received a copy of the GNU General Public License version
322.19 + * 2 along with this work; if not, write to the Free Software Foundation,
322.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
322.21 + *
322.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
322.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
322.24 + * have any questions.
322.25 + */
322.26 +
322.27 +/* @test
322.28 + * @bug 6693490
322.29 + * @summary Pre-close file descriptor may inadvertently get registered with
322.30 + * epoll during close
322.31 + */
322.32 +
322.33 +import java.net.*;
322.34 +import java.nio.channels.*;
322.35 +import java.util.concurrent.*;
322.36 +import java.util.*;
322.37 +import java.io.IOException;
322.38 +
322.39 +public class RegAfterPreClose {
322.40 +
322.41 + static volatile boolean done;
322.42 +
322.43 + /**
322.44 + * A task that continuously connects to a given address and immediately
322.45 + * closes the connection.
322.46 + */
322.47 + static class Connector implements Runnable {
322.48 + private final SocketAddress sa;
322.49 + Connector(int port) throws IOException {
322.50 + InetAddress lh = InetAddress.getLocalHost();
322.51 + this.sa = new InetSocketAddress(lh, port);
322.52 + }
322.53 + public void run() {
322.54 + while (!done) {
322.55 + try {
322.56 + SocketChannel.open(sa).close();
322.57 + } catch (IOException x) {
322.58 + // back-off as probably resource related
322.59 + try {
322.60 + Thread.sleep(10);
322.61 + } catch (InterruptedException ignore) { }
322.62 + }
322.63 + }
322.64 + }
322.65 + }
322.66 +
322.67 + /**
322.68 + * A task that closes a channel.
322.69 + */
322.70 + static class Closer implements Runnable {
322.71 + private final Channel channel;
322.72 + Closer(Channel sc) {
322.73 + this.channel = sc;
322.74 + }
322.75 + public void run() {
322.76 + try {
322.77 + channel.close();
322.78 + } catch (IOException ignore) { }
322.79 + }
322.80 + }
322.81 +
322.82 + public static void main(String[] args) throws Exception {
322.83 + // create listener
322.84 + InetSocketAddress isa = new InetSocketAddress(0);
322.85 + ServerSocketChannel ssc = ServerSocketChannel.open();
322.86 + ssc.socket().bind(isa);
322.87 +
322.88 + // register with Selector
322.89 + final Selector sel = Selector.open();
322.90 + ssc.configureBlocking(false);
322.91 + SelectionKey key = ssc.register(sel, SelectionKey.OP_ACCEPT);
322.92 +
322.93 + ThreadFactory factory = new ThreadFactory() {
322.94 + @Override
322.95 + public Thread newThread(Runnable r) {
322.96 + Thread t = new Thread(r);
322.97 + t.setDaemon(true);
322.98 + return t;
322.99 + }
322.100 + };
322.101 +
322.102 + // schedule test to run for 1 minute
322.103 + Executors.newScheduledThreadPool(1, factory).schedule(new Runnable() {
322.104 + public void run() {
322.105 + done = true;
322.106 + sel.wakeup();
322.107 + }}, 1, TimeUnit.MINUTES);
322.108 +
322.109 + // create Executor that handles tasks that closes channels
322.110 + // "asynchronously" - this creates the conditions to provoke the bug.
322.111 + Executor executor = Executors.newFixedThreadPool(2, factory);
322.112 +
322.113 + // submit task that connects to listener
322.114 + executor.execute(new Connector(ssc.socket().getLocalPort()));
322.115 +
322.116 + // loop accepting connections until done (or an IOException is thrown)
322.117 + while (!done) {
322.118 + sel.select();
322.119 + if (key.isAcceptable()) {
322.120 + SocketChannel sc = ssc.accept();
322.121 + if (sc != null) {
322.122 + sc.configureBlocking(false);
322.123 + sc.register(sel, SelectionKey.OP_READ);
322.124 + executor.execute(new Closer(sc));
322.125 + }
322.126 + }
322.127 + sel.selectedKeys().clear();
322.128 + }
322.129 + }
322.130 +}
323.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
323.2 +++ b/test/java/nio/channels/Selector/lots_of_updates.sh Thu Apr 16 19:10:32 2009 -0700
323.3 @@ -0,0 +1,49 @@
323.4 +#
323.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
323.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
323.7 +#
323.8 +# This code is free software; you can redistribute it and/or modify it
323.9 +# under the terms of the GNU General Public License version 2 only, as
323.10 +# published by the Free Software Foundation.
323.11 +#
323.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
323.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
323.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
323.15 +# version 2 for more details (a copy is included in the LICENSE file that
323.16 +# accompanied this code).
323.17 +#
323.18 +# You should have received a copy of the GNU General Public License version
323.19 +# 2 along with this work; if not, write to the Free Software Foundation,
323.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
323.21 +#
323.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
323.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
323.24 +# have any questions.
323.25 +#
323.26 +
323.27 +# @test
323.28 +# @bug 6824477
323.29 +# @summary Selector.select can fail with IOException "Invalid argument" on
323.30 +# Solaris if maximum number of file descriptors is less than 10000
323.31 +# @build LotsOfUpdates
323.32 +# @run shell lots_of_updates.sh
323.33 +
323.34 +OS=`uname -s`
323.35 +case "$OS" in
323.36 + Windows_* )
323.37 + echo "ulimit not on Windows"
323.38 + exit 0
323.39 + ;;
323.40 + * )
323.41 + CLASSPATH=${TESTCLASSES}:${TESTSRC}
323.42 + ;;
323.43 +esac
323.44 +export CLASSPATH
323.45 +
323.46 +# hard limit needs to be less than 10000 for this bug
323.47 +NOFILES=`ulimit -n -H`
323.48 +if [ "$NOFILES" = "unlimited" ] || [ $NOFILES -ge 10000 ]; then
323.49 + ulimit -n 2048
323.50 +fi
323.51 +
323.52 +${TESTJAVA}/bin/java LotsOfUpdates
324.1 --- a/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Thu Apr 16 17:42:00 2009 +0100
324.2 +++ b/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Thu Apr 16 19:10:32 2009 -0700
324.3 @@ -22,7 +22,7 @@
324.4 */
324.5
324.6 /* @test
324.7 - * @bug 6261402
324.8 + * @bug 6261402 6824141
324.9 * @summary If rmid has an inherited channel that is not a server
324.10 * socket (such as it if was started using rsh/rcmd), then it should
324.11 * function normally.
324.12 @@ -37,6 +37,7 @@
324.13
324.14 import java.io.IOException;
324.15 import java.net.Socket;
324.16 +import java.net.ProtocolFamily;
324.17 import java.nio.channels.Channel;
324.18 import java.nio.channels.DatagramChannel;
324.19 import java.nio.channels.Pipe;
324.20 @@ -137,6 +138,12 @@
324.21 return provider.openDatagramChannel();
324.22 }
324.23
324.24 + public DatagramChannel openDatagramChannel(ProtocolFamily family)
324.25 + throws IOException
324.26 + {
324.27 + return provider.openDatagramChannel(family);
324.28 + }
324.29 +
324.30 public Pipe openPipe() throws IOException {
324.31 return provider.openPipe();
324.32 }
325.1 --- a/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Thu Apr 16 17:42:00 2009 +0100
325.2 +++ b/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Thu Apr 16 19:10:32 2009 -0700
325.3 @@ -22,7 +22,7 @@
325.4 */
325.5
325.6 /* @test
325.7 - * @bug 4295885
325.8 + * @bug 4295885 6824141
325.9 * @summary rmid should be startable from inetd
325.10 * @author Ann Wollrath
325.11 *
325.12 @@ -36,6 +36,7 @@
325.13 import java.net.InetAddress;
325.14 import java.net.InetSocketAddress;
325.15 import java.net.ServerSocket;
325.16 +import java.net.ProtocolFamily;
325.17 import java.nio.channels.*;
325.18 import java.nio.channels.spi.*;
325.19 import java.rmi.Remote;
325.20 @@ -126,6 +127,12 @@
325.21 return provider.openDatagramChannel();
325.22 }
325.23
325.24 + public DatagramChannel openDatagramChannel(ProtocolFamily family)
325.25 + throws IOException
325.26 + {
325.27 + return provider.openDatagramChannel(family);
325.28 + }
325.29 +
325.30 public Pipe openPipe()
325.31 throws IOException
325.32 {
326.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
326.2 +++ b/test/java/security/Security/ClassLoaderDeadlock/CreateSerialized.java Thu Apr 16 19:10:32 2009 -0700
326.3 @@ -0,0 +1,35 @@
326.4 +/*
326.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
326.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
326.7 + *
326.8 + * This code is free software; you can redistribute it and/or modify it
326.9 + * under the terms of the GNU General Public License version 2 only, as
326.10 + * published by the Free Software Foundation.
326.11 + *
326.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
326.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
326.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
326.15 + * version 2 for more details (a copy is included in the LICENSE file that
326.16 + * accompanied this code).
326.17 + *
326.18 + * You should have received a copy of the GNU General Public License version
326.19 + * 2 along with this work; if not, write to the Free Software Foundation,
326.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
326.21 + *
326.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
326.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
326.24 + * have any questions.
326.25 + */
326.26 +import java.io.*;
326.27 +import sun.misc.*;
326.28 +
326.29 +public class CreateSerialized {
326.30 + public static void main(String[] args) throws Exception {
326.31 + Object o = new com.sun.crypto.provider.SunJCE();
326.32 +
326.33 + FileOutputStream fos = new FileOutputStream("object.tmp");
326.34 + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fos);
326.35 + objectOutputStream.writeObject(o);
326.36 + fos.close();
326.37 + }
326.38 +}
327.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
327.2 +++ b/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.java Thu Apr 16 19:10:32 2009 -0700
327.3 @@ -0,0 +1,70 @@
327.4 +/*
327.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
327.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
327.7 + *
327.8 + * This code is free software; you can redistribute it and/or modify it
327.9 + * under the terms of the GNU General Public License version 2 only, as
327.10 + * published by the Free Software Foundation.
327.11 + *
327.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
327.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
327.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
327.15 + * version 2 for more details (a copy is included in the LICENSE file that
327.16 + * accompanied this code).
327.17 + *
327.18 + * You should have received a copy of the GNU General Public License version
327.19 + * 2 along with this work; if not, write to the Free Software Foundation,
327.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
327.21 + *
327.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
327.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
327.24 + * have any questions.
327.25 + */
327.26 +import java.io.*;
327.27 +import javax.xml.parsers.DocumentBuilderFactory;
327.28 +import java.security.*;
327.29 +
327.30 +public class Deadlock2 {
327.31 + public static void main(String[] args) throws Exception {
327.32 + File file = new File("object.tmp");
327.33 + final byte[] bytes = new byte[(int) file.length()];
327.34 + FileInputStream fileInputStream = new FileInputStream(file);
327.35 + int read = fileInputStream.read(bytes);
327.36 + if (read != file.length()) {
327.37 + throw new Exception("Didn't read all");
327.38 + }
327.39 + Thread.sleep(1000);
327.40 +
327.41 + Runnable xmlRunnable = new Runnable() {
327.42 + public void run() {
327.43 + try {
327.44 + DocumentBuilderFactory.newInstance();
327.45 + } catch (Exception e) {
327.46 + e.printStackTrace();
327.47 + }
327.48 + }
327.49 + };
327.50 +
327.51 + Runnable readObjectRunnable = new Runnable() {
327.52 + public void run() {
327.53 + try {
327.54 + ObjectInputStream objectInputStream =
327.55 + new ObjectInputStream(new ByteArrayInputStream(bytes));
327.56 + Object o = objectInputStream.readObject();
327.57 + System.out.println(o.getClass());
327.58 + } catch (Exception e) {
327.59 + e.printStackTrace();
327.60 + }
327.61 + }
327.62 + }
327.63 +
327.64 + Thread thread1 = new Thread(readObjectRunnable, "Read Object");
327.65 + Thread thread2 = new Thread(xmlRunnable, "XML");
327.66 +
327.67 + thread1.start();
327.68 + thread2.start();
327.69 +
327.70 + thread1.join();
327.71 + thread2.join();
327.72 + }
327.73 +}
328.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
328.2 +++ b/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh Thu Apr 16 19:10:32 2009 -0700
328.3 @@ -0,0 +1,99 @@
328.4 +#!/bin/sh
328.5 +
328.6 +#
328.7 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
328.8 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
328.9 +#
328.10 +# This code is free software; you can redistribute it and/or modify it
328.11 +# under the terms of the GNU General Public License version 2 only, as
328.12 +# published by the Free Software Foundation.
328.13 +#
328.14 +# This code is distributed in the hope that it will be useful, but WITHOUT
328.15 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
328.16 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
328.17 +# version 2 for more details (a copy is included in the LICENSE file that
328.18 +# accompanied this code).
328.19 +#
328.20 +# You should have received a copy of the GNU General Public License version
328.21 +# 2 along with this work; if not, write to the Free Software Foundation,
328.22 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
328.23 +#
328.24 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
328.25 +# CA 95054 USA or visit www.sun.com if you need additional information or
328.26 +# have any questions.
328.27 +#
328.28 +
328.29 +
328.30 +# @test
328.31 +# @bug 6440846
328.32 +# @summary make sure we do not deadlock between ExtClassLoader and AppClassLoader
328.33 +# @author Valerie Peng
328.34 +# @run shell/timeout=20 Deadlock2.sh
328.35 +
328.36 +# set a few environment variables so that the shell-script can run stand-alone
328.37 +# in the source directory
328.38 +
328.39 +if [ "${TESTSRC}" = "" ] ; then
328.40 + TESTSRC="."
328.41 +fi
328.42 +
328.43 +if [ "${TESTCLASSES}" = "" ] ; then
328.44 + TESTCLASSES="."
328.45 +fi
328.46 +
328.47 +if [ "${TESTJAVA}" = "" ] ; then
328.48 + echo "TESTJAVA not set. Test cannot execute."
328.49 + echo "FAILED!!!"
328.50 + exit 1
328.51 +fi
328.52 +
328.53 +# set platform-dependent variables
328.54 +OS=`uname -s`
328.55 +case "$OS" in
328.56 + SunOS )
328.57 + PATHSEP=":"
328.58 + FILESEP="/"
328.59 + ;;
328.60 + Linux )
328.61 + PATHSEP=":"
328.62 + FILESEP="/"
328.63 + ;;
328.64 + Windows* )
328.65 + PATHSEP=";"
328.66 + FILESEP="\\"
328.67 + ;;
328.68 + * )
328.69 + echo "Unrecognized system!"
328.70 + exit 1;
328.71 + ;;
328.72 +esac
328.73 +
328.74 +# remove old class files
328.75 +cd ${TESTCLASSES}
328.76 +rm -f Deadlock2*.class
328.77 +if [ -d testlib ] ; then
328.78 + rm -rf testlib
328.79 +fi
328.80 +cp -r ${TESTJAVA}${FILESEP}lib${FILESEP}ext testlib
328.81 +
328.82 +# compile and package the test program
328.83 +${TESTJAVA}${FILESEP}bin${FILESEP}javac \
328.84 + -d ${TESTCLASSES} \
328.85 + ${TESTSRC}${FILESEP}CreateSerialized.java \
328.86 + ${TESTSRC}${FILESEP}Deadlock2.java
328.87 +
328.88 +${TESTJAVA}${FILESEP}bin${FILESEP}jar \
328.89 + -cvf testlib${FILESEP}Deadlock2.jar \
328.90 + Deadlock2*.class
328.91 +
328.92 +rm Deadlock2*.class
328.93 +
328.94 +# create serialized object and run the test
328.95 +${TESTJAVA}${FILESEP}bin${FILESEP}java CreateSerialized
328.96 +${TESTJAVA}${FILESEP}bin${FILESEP}java -Djava.ext.dirs=${TESTCLASSES}${FILESEP}testlib Deadlock2
328.97 +STATUS=$?
328.98 +
328.99 +# clean up
328.100 +rm object.tmp CreateSerialized.class
328.101 +rm -rf testlib
328.102 +exit ${STATUS}
329.1 --- a/test/java/util/Collection/MOAT.java Thu Apr 16 17:42:00 2009 +0100
329.2 +++ b/test/java/util/Collection/MOAT.java Thu Apr 16 19:10:32 2009 -0700
329.3 @@ -555,6 +555,7 @@
329.4
329.5 NavigableMap<Integer,Integer> nm =
329.6 (NavigableMap<Integer,Integer>) m;
329.7 + testNavigableMapRemovers(nm);
329.8 testNavigableMap(nm);
329.9 testNavigableMap(nm.headMap(6, false));
329.10 testNavigableMap(nm.headMap(5, true));
329.11 @@ -742,6 +743,97 @@
329.12 equal(it.next(), expected);
329.13 }
329.14
329.15 + static void equalMaps(Map m1, Map m2) {
329.16 + equal(m1, m2);
329.17 + equal(m2, m1);
329.18 + equal(m1.size(), m2.size());
329.19 + equal(m1.isEmpty(), m2.isEmpty());
329.20 + equal(m1.toString(), m2.toString());
329.21 + check(Arrays.equals(m1.entrySet().toArray(), m2.entrySet().toArray()));
329.22 + }
329.23 +
329.24 + @SuppressWarnings({"unchecked", "rawtypes"})
329.25 + static void testNavigableMapRemovers(NavigableMap m)
329.26 + {
329.27 + final Map emptyMap = new HashMap();
329.28 +
329.29 + final Map singletonMap = new HashMap();
329.30 + singletonMap.put(1, 2);
329.31 +
329.32 + abstract class NavigableMapView {
329.33 + abstract NavigableMap view(NavigableMap m);
329.34 + }
329.35 +
329.36 + NavigableMapView[] views = {
329.37 + new NavigableMapView() { NavigableMap view(NavigableMap m) {
329.38 + return m; }},
329.39 + new NavigableMapView() { NavigableMap view(NavigableMap m) {
329.40 + return m.headMap(99, true); }},
329.41 + new NavigableMapView() { NavigableMap view(NavigableMap m) {
329.42 + return m.tailMap(-99, false); }},
329.43 + new NavigableMapView() { NavigableMap view(NavigableMap m) {
329.44 + return m.subMap(-99, true, 99, false); }},
329.45 + };
329.46 +
329.47 + abstract class Remover {
329.48 + abstract void remove(NavigableMap m, Object k, Object v);
329.49 + }
329.50 +
329.51 + Remover[] removers = {
329.52 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.53 + equal(m.remove(k), v); }},
329.54 +
329.55 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.56 + equal(m.descendingMap().remove(k), v); }},
329.57 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.58 + equal(m.descendingMap().headMap(-86, false).remove(k), v); }},
329.59 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.60 + equal(m.descendingMap().tailMap(86, true).remove(k), v); }},
329.61 +
329.62 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.63 + equal(m.headMap(86, true).remove(k), v); }},
329.64 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.65 + equal(m.tailMap(-86, true).remove(k), v); }},
329.66 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.67 + equal(m.subMap(-86, false, 86, true).remove(k), v); }},
329.68 +
329.69 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.70 + check(m.keySet().remove(k)); }},
329.71 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.72 + check(m.navigableKeySet().remove(k)); }},
329.73 +
329.74 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.75 + check(m.navigableKeySet().headSet(86, true).remove(k)); }},
329.76 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.77 + check(m.navigableKeySet().tailSet(-86, false).remove(k)); }},
329.78 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.79 + check(m.navigableKeySet().subSet(-86, true, 86, false)
329.80 + .remove(k)); }},
329.81 +
329.82 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.83 + check(m.descendingKeySet().headSet(-86, false).remove(k)); }},
329.84 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.85 + check(m.descendingKeySet().tailSet(86, true).remove(k)); }},
329.86 + new Remover() { void remove(NavigableMap m, Object k, Object v) {
329.87 + check(m.descendingKeySet().subSet(86, true, -86, false)
329.88 + .remove(k)); }},
329.89 + };
329.90 +
329.91 + for (NavigableMapView view : views) {
329.92 + for (Remover remover : removers) {
329.93 + try {
329.94 + m.clear();
329.95 + equalMaps(m, emptyMap);
329.96 + equal(m.put(1, 2), null);
329.97 + equalMaps(m, singletonMap);
329.98 + NavigableMap v = view.view(m);
329.99 + remover.remove(v, 1, 2);
329.100 + equalMaps(m, emptyMap);
329.101 + } catch (Throwable t) { unexpected(t); }
329.102 + }
329.103 + }
329.104 + }
329.105 +
329.106 private static void testNavigableMap(NavigableMap<Integer,Integer> m)
329.107 {
329.108 clear(m);
330.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
330.2 +++ b/test/java/util/concurrent/Semaphore/RacingReleases.java Thu Apr 16 19:10:32 2009 -0700
330.3 @@ -0,0 +1,116 @@
330.4 +/*
330.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
330.6 + *
330.7 + * This code is free software; you can redistribute it and/or modify it
330.8 + * under the terms of the GNU General Public License version 2 only, as
330.9 + * published by the Free Software Foundation.
330.10 + *
330.11 + * This code is distributed in the hope that it will be useful, but WITHOUT
330.12 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
330.13 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
330.14 + * version 2 for more details (a copy is included in the LICENSE file that
330.15 + * accompanied this code).
330.16 + *
330.17 + * You should have received a copy of the GNU General Public License version
330.18 + * 2 along with this work; if not, write to the Free Software Foundation,
330.19 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
330.20 + *
330.21 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
330.22 + * CA 95054 USA or visit www.sun.com if you need additional information or
330.23 + * have any questions.
330.24 + */
330.25 +
330.26 +/*
330.27 + * This file is available under and governed by the GNU General Public
330.28 + * License version 2 only, as published by the Free Software Foundation.
330.29 + * However, the following notice accompanied the original version of this
330.30 + * file:
330.31 + *
330.32 + * Written by Doug Lea with assistance from members of JCP JSR-166
330.33 + * Expert Group and released to the public domain, as explained at
330.34 + * http://creativecommons.org/licenses/publicdomain
330.35 + */
330.36 +
330.37 +/*
330.38 + * @test
330.39 + * @bug 6801020 6803402
330.40 + * @summary Try to tickle race conditions in
330.41 + * AbstractQueuedSynchronizer "shared" code
330.42 + */
330.43 +
330.44 +import java.util.concurrent.Semaphore;
330.45 +
330.46 +public class RacingReleases {
330.47 +
330.48 + /** Increase this for better chance of tickling races */
330.49 + static final int iterations = 1000;
330.50 +
330.51 + public static void test(final boolean fair,
330.52 + final boolean interruptibly)
330.53 + throws Throwable {
330.54 + for (int i = 0; i < iterations; i++) {
330.55 + final Semaphore sem = new Semaphore(0, fair);
330.56 + final Throwable[] badness = new Throwable[1];
330.57 + Runnable blocker = interruptibly ?
330.58 + new Runnable() {
330.59 + public void run() {
330.60 + try {
330.61 + sem.acquire();
330.62 + } catch (Throwable t) {
330.63 + badness[0] = t;
330.64 + throw new Error(t);
330.65 + }}}
330.66 + :
330.67 + new Runnable() {
330.68 + public void run() {
330.69 + try {
330.70 + sem.acquireUninterruptibly();
330.71 + } catch (Throwable t) {
330.72 + badness[0] = t;
330.73 + throw new Error(t);
330.74 + }}};
330.75 +
330.76 + Thread b1 = new Thread(blocker);
330.77 + Thread b2 = new Thread(blocker);
330.78 + Runnable signaller = new Runnable() {
330.79 + public void run() {
330.80 + try {
330.81 + sem.release();
330.82 + } catch (Throwable t) {
330.83 + badness[0] = t;
330.84 + throw new Error(t);
330.85 + }}};
330.86 + Thread s1 = new Thread(signaller);
330.87 + Thread s2 = new Thread(signaller);
330.88 + Thread[] threads = { b1, b2, s1, s2 };
330.89 + java.util.Collections.shuffle(java.util.Arrays.asList(threads));
330.90 + for (Thread thread : threads)
330.91 + thread.start();
330.92 + for (Thread thread : threads) {
330.93 + thread.join(60 * 1000);
330.94 + if (thread.isAlive())
330.95 + throw new Error
330.96 + (String.format
330.97 + ("Semaphore stuck: permits %d, thread waiting %s%n",
330.98 + sem.availablePermits(),
330.99 + sem.hasQueuedThreads() ? "true" : "false"));
330.100 + }
330.101 + if (badness[0] != null)
330.102 + throw new Error(badness[0]);
330.103 + if (sem.availablePermits() != 0)
330.104 + throw new Error(String.valueOf(sem.availablePermits()));
330.105 + if (sem.hasQueuedThreads())
330.106 + throw new Error(String.valueOf(sem.hasQueuedThreads()));
330.107 + if (sem.getQueueLength() != 0)
330.108 + throw new Error(String.valueOf(sem.getQueueLength()));
330.109 + if (sem.isFair() != fair)
330.110 + throw new Error(String.valueOf(sem.isFair()));
330.111 + }
330.112 + }
330.113 +
330.114 + public static void main(String[] args) throws Throwable {
330.115 + for (boolean fair : new boolean[] { true, false })
330.116 + for (boolean interruptibly : new boolean[] { true, false })
330.117 + test(fair, interruptibly);
330.118 + }
330.119 +}
331.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
331.2 +++ b/test/java/util/zip/LargeZip.java Thu Apr 16 19:10:32 2009 -0700
331.3 @@ -0,0 +1,193 @@
331.4 +/*
331.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
331.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
331.7 + *
331.8 + * This code is free software; you can redistribute it and/or modify it
331.9 + * under the terms of the GNU General Public License version 2 only, as
331.10 + * published by the Free Software Foundation. Sun designates this
331.11 + * particular file as subject to the "Classpath" exception as provided
331.12 + * by Sun in the LICENSE file that accompanied this code.
331.13 + *
331.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
331.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
331.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
331.17 + * version 2 for more details (a copy is included in the LICENSE file that
331.18 + * accompanied this code).
331.19 + *
331.20 + * You should have received a copy of the GNU General Public License version
331.21 + * 2 along with this work; if not, write to the Free Software Foundation,
331.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
331.23 + *
331.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
331.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
331.26 + * have any questions.
331.27 + */
331.28 +
331.29 +import java.io.*;
331.30 +import java.nio.*;
331.31 +import java.util.*;
331.32 +import java.util.zip.*;
331.33 +
331.34 +public class LargeZip {
331.35 + // If true, don't delete large ZIP file created for test.
331.36 + static final boolean debug = System.getProperty("debug") != null;
331.37 +
331.38 + //static final int DATA_LEN = 1024 * 1024;
331.39 + static final int DATA_LEN = 80 * 1024;
331.40 + static final int DATA_SIZE = 8;
331.41 +
331.42 + static long fileSize = 6L * 1024L * 1024L * 1024L; // 6GB
331.43 +
331.44 + static boolean userFile = false;
331.45 +
331.46 + static byte[] data;
331.47 + static File largeFile;
331.48 + static String lastEntryName;
331.49 +
331.50 + /* args can be empty, in which case check a 3 GB file which is created for
331.51 + * this test (and then deleted). Or it can be a number, in which case
331.52 + * that designates the size of the file that's created for this test (and
331.53 + * then deleted). Or it can be the name of a file to use for the test, in
331.54 + * which case it is *not* deleted. Note that in this last case, the data
331.55 + * comparison might fail.
331.56 + */
331.57 + static void realMain (String[] args) throws Throwable {
331.58 + if (args.length > 0) {
331.59 + try {
331.60 + fileSize = Long.parseLong(args[0]);
331.61 + System.out.println("Testing with file of size " + fileSize);
331.62 + } catch (NumberFormatException ex) {
331.63 + largeFile = new File(args[0]);
331.64 + if (!largeFile.exists()) {
331.65 + throw new Exception("Specified file " + args[0] + " does not exist");
331.66 + }
331.67 + userFile = true;
331.68 + System.out.println("Testing with user-provided file " + largeFile);
331.69 + }
331.70 + }
331.71 + File testDir = null;
331.72 + if (largeFile == null) {
331.73 + testDir = new File(System.getProperty("test.scratch", "."),
331.74 + "LargeZip");
331.75 + if (testDir.exists()) {
331.76 + if (!testDir.delete()) {
331.77 + throw new Exception("Cannot delete already-existing test directory");
331.78 + }
331.79 + }
331.80 + check(!testDir.exists() && testDir.mkdirs());
331.81 + largeFile = new File(testDir, "largezip.zip");
331.82 + createLargeZip();
331.83 + }
331.84 +
331.85 + readLargeZip1();
331.86 + readLargeZip2();
331.87 +
331.88 + if (!userFile && !debug) {
331.89 + check(largeFile.delete());
331.90 + check(testDir.delete());
331.91 + }
331.92 + }
331.93 +
331.94 + static void createLargeZip() throws Throwable {
331.95 + int iterations = DATA_LEN / DATA_SIZE;
331.96 + ByteBuffer bb = ByteBuffer.allocate(DATA_SIZE);
331.97 + ByteArrayOutputStream baos = new ByteArrayOutputStream();
331.98 + for (int i = 0; i < iterations; i++) {
331.99 + bb.putDouble(0, Math.random());
331.100 + baos.write(bb.array(), 0, DATA_SIZE);
331.101 + }
331.102 + data = baos.toByteArray();
331.103 +
331.104 + ZipOutputStream zos = new ZipOutputStream(
331.105 + new BufferedOutputStream(new FileOutputStream(largeFile)));
331.106 + long length = 0;
331.107 + while (length < fileSize) {
331.108 + ZipEntry ze = new ZipEntry("entry-" + length);
331.109 + lastEntryName = ze.getName();
331.110 + zos.putNextEntry(ze);
331.111 + zos.write(data, 0, data.length);
331.112 + zos.closeEntry();
331.113 + length = largeFile.length();
331.114 + }
331.115 + System.out.println("Last entry written is " + lastEntryName);
331.116 + zos.close();
331.117 + }
331.118 +
331.119 + static void readLargeZip1() throws Throwable {
331.120 + ZipFile zipFile = new ZipFile(largeFile);
331.121 + ZipEntry entry = null;
331.122 + String entryName = null;
331.123 + int count = 0;
331.124 + Enumeration<? extends ZipEntry> entries = zipFile.entries();
331.125 + while (entries.hasMoreElements()) {
331.126 + entry = entries.nextElement();
331.127 + entryName = entry.getName();
331.128 + count++;
331.129 + }
331.130 + System.out.println("Number of entries read: " + count);
331.131 + System.out.println("Last entry read is " + entryName);
331.132 + check(!entry.isDirectory());
331.133 + if (check(entryName.equals(lastEntryName))) {
331.134 + ByteArrayOutputStream baos = new ByteArrayOutputStream();
331.135 + InputStream is = zipFile.getInputStream(entry);
331.136 + byte buf[] = new byte[4096];
331.137 + int len;
331.138 + while ((len = is.read(buf)) >= 0) {
331.139 + baos.write(buf, 0, len);
331.140 + }
331.141 + baos.close();
331.142 + is.close();
331.143 + check(Arrays.equals(data, baos.toByteArray()));
331.144 + }
331.145 + }
331.146 +
331.147 +
331.148 + static void readLargeZip2() throws Throwable {
331.149 + ZipInputStream zis = new ZipInputStream(
331.150 + new BufferedInputStream(new FileInputStream(largeFile)));
331.151 + ZipEntry entry = null;
331.152 + String entryName = null;
331.153 + int count = 0;
331.154 + while ((entry = zis.getNextEntry()) != null) {
331.155 + entryName = entry.getName();
331.156 + if (entryName.equals(lastEntryName)) {
331.157 + break;
331.158 + }
331.159 + count++;
331.160 + }
331.161 + System.out.println("Number of entries read: " + count);
331.162 + System.out.println("Last entry read is " + entryName);
331.163 + check(!entry.isDirectory());
331.164 +
331.165 + ByteArrayOutputStream baos = new ByteArrayOutputStream();
331.166 +
331.167 + byte buf[] = new byte[4096];
331.168 + int len;
331.169 + while ((len = zis.read(buf)) >= 0) {
331.170 + baos.write(buf, 0, len);
331.171 + }
331.172 + baos.close();
331.173 + check(Arrays.equals(data, baos.toByteArray()));
331.174 + check(zis.getNextEntry() == null);
331.175 + zis.close();
331.176 + }
331.177 +
331.178 +
331.179 + //--------------------- Infrastructure ---------------------------
331.180 + static volatile int passed = 0, failed = 0;
331.181 + static void pass() {passed++;}
331.182 + static void pass(String msg) {System.out.println(msg); passed++;}
331.183 + static void fail() {failed++; Thread.dumpStack();}
331.184 + static void fail(String msg) {System.out.println(msg); fail();}
331.185 + static void unexpected(Throwable t) {failed++; t.printStackTrace();}
331.186 + static void unexpected(Throwable t, String msg) {
331.187 + System.out.println(msg); failed++; t.printStackTrace();}
331.188 + static boolean check(boolean cond) {if (cond) pass(); else fail(); return cond;}
331.189 + static void equal(Object x, Object y) {
331.190 + if (x == null ? y == null : x.equals(y)) pass();
331.191 + else fail(x + " not equal to " + y);}
331.192 + public static void main(String[] args) throws Throwable {
331.193 + try {realMain(args);} catch (Throwable t) {unexpected(t);}
331.194 + System.out.println("\nPassed = " + passed + " failed = " + failed);
331.195 + if (failed > 0) throw new AssertionError("Some tests failed");}
331.196 +}
332.1 --- a/test/java/util/zip/ZipFile/LargeZipFile.java Thu Apr 16 17:42:00 2009 +0100
332.2 +++ b/test/java/util/zip/ZipFile/LargeZipFile.java Thu Apr 16 19:10:32 2009 -0700
332.3 @@ -158,4 +158,3 @@
332.4 System.out.println("\nPassed = " + passed + " failed = " + failed);
332.5 if (failed > 0) throw new AssertionError("Some tests failed");}
332.6 }
332.7 -
333.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
333.2 +++ b/test/javax/swing/JFileChooser/6570445/bug6570445.java Thu Apr 16 19:10:32 2009 -0700
333.3 @@ -0,0 +1,20 @@
333.4 +/*
333.5 + * @test
333.6 + * @bug 6570445
333.7 + * @summary Checks if Win32ShellFolder2's COM-using methods work under a security manager
333.8 + * @author Leonid Popov
333.9 + */
333.10 +
333.11 +import javax.swing.filechooser.FileSystemView;
333.12 +
333.13 +public class bug6570445 {
333.14 + public static void main(String[] args) {
333.15 + System.setSecurityManager(new SecurityManager());
333.16 +
333.17 + // The next line of code forces FileSystemView to request data from Win32ShellFolder2,
333.18 + // what causes an exception if a security manager installed (see the bug 6570445 description)
333.19 + FileSystemView.getFileSystemView().getRoots();
333.20 +
333.21 + System.out.println("Passed.");
333.22 + }
333.23 +}
334.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
334.2 +++ b/test/javax/swing/JFileChooser/6738668/bug6738668.java Thu Apr 16 19:10:32 2009 -0700
334.3 @@ -0,0 +1,44 @@
334.4 +/*
334.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
334.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
334.7 + *
334.8 + * This code is free software; you can redistribute it and/or modify it
334.9 + * under the terms of the GNU General Public License version 2 only, as
334.10 + * published by the Free Software Foundation.
334.11 + *
334.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
334.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
334.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
334.15 + * version 2 for more details (a copy is included in the LICENSE file that
334.16 + * accompanied this code).
334.17 + *
334.18 + * You should have received a copy of the GNU General Public License version
334.19 + * 2 along with this work; if not, write to the Free Software Foundation,
334.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
334.21 + *
334.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
334.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
334.24 + * have any questions.
334.25 + */
334.26 +
334.27 +/* @test
334.28 + @bug 6738668
334.29 + @summary JFileChooser cannot be created under SecurityManager
334.30 + @author Pavel Porvatov
334.31 + @run main/othervm/policy=security.policy bug6738668
334.32 +*/
334.33 +
334.34 +import javax.swing.*;
334.35 +import java.io.File;
334.36 +
334.37 +public class bug6738668 {
334.38 + public static void main(String[] args) throws Exception {
334.39 + for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) {
334.40 + UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
334.41 +
334.42 + new JFileChooser(new File("c:/temp"));
334.43 +
334.44 + System.out.println("Test passed for LookAndFeel " + lookAndFeelInfo.getClassName());
334.45 + }
334.46 + }
334.47 +}
335.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
335.2 +++ b/test/javax/swing/JFileChooser/6738668/security.policy Thu Apr 16 19:10:32 2009 -0700
335.3 @@ -0,0 +1,5 @@
335.4 +grant {
335.5 + permission java.io.FilePermission "C:\\temp\\*", "read";
335.6 + permission java.io.FilePermission "C:\\temp", "read";
335.7 + permission java.util.PropertyPermission "*", "read";
335.8 +};
336.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
336.2 +++ b/test/javax/swing/JFileChooser/6798062/bug6798062.html Thu Apr 16 19:10:32 2009 -0700
336.3 @@ -0,0 +1,11 @@
336.4 +<html>
336.5 +<body>
336.6 +<applet code="bug6798062.class" width=400 height=300></applet>
336.7 +1. Create a link
336.8 +2. Copy path to the link into TextField
336.9 +3. Run the Windows Task Manager. Select the Processes tab and find the java process
336.10 +4. Press the Start button in the test window
336.11 +5. Wait several minutes and observe in the Windows Task Manager
336.12 +that Memory Usage of java process is not increasing
336.13 +</body>
336.14 +</html>
337.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
337.2 +++ b/test/javax/swing/JFileChooser/6798062/bug6798062.java Thu Apr 16 19:10:32 2009 -0700
337.3 @@ -0,0 +1,189 @@
337.4 +/*
337.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
337.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
337.7 + *
337.8 + * This code is free software; you can redistribute it and/or modify it
337.9 + * under the terms of the GNU General Public License version 2 only, as
337.10 + * published by the Free Software Foundation.
337.11 + *
337.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
337.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
337.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
337.15 + * version 2 for more details (a copy is included in the LICENSE file that
337.16 + * accompanied this code).
337.17 + *
337.18 + * You should have received a copy of the GNU General Public License version
337.19 + * 2 along with this work; if not, write to the Free Software Foundation,
337.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
337.21 + *
337.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
337.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
337.24 + * have any questions.
337.25 + */
337.26 +
337.27 +/* @test %W% %E%
337.28 + @bug 6798062
337.29 + @summary Memory Leak on using getFiles of FileSystemView
337.30 + @author Pavel Porvatov
337.31 + @run applet/manual=done bug6798062.html
337.32 +*/
337.33 +
337.34 +import sun.awt.shell.ShellFolder;
337.35 +
337.36 +import javax.swing.*;
337.37 +import java.awt.event.ActionEvent;
337.38 +import java.awt.event.ActionListener;
337.39 +import java.awt.*;
337.40 +import java.io.File;
337.41 +import java.io.FileNotFoundException;
337.42 +
337.43 +public class bug6798062 extends JApplet {
337.44 +
337.45 + private final JSlider slider = new JSlider(0, 100);
337.46 +
337.47 + private final JTextField tfLink = new JTextField();
337.48 +
337.49 + private final JButton btnStart = new JButton("Start");
337.50 +
337.51 + private final JButton btnStop = new JButton("Stop");
337.52 +
337.53 + private final JButton btnGC = new JButton("Run System.gc()");
337.54 +
337.55 + private ShellFolder folder;
337.56 +
337.57 + private Thread thread;
337.58 +
337.59 + public static void main(String[] args) {
337.60 + JFrame frame = new JFrame("bug6798062");
337.61 +
337.62 + frame.setSize(400, 300);
337.63 + frame.setLocationRelativeTo(null);
337.64 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
337.65 + frame.add(new bug6798062().initialize());
337.66 +
337.67 + frame.setVisible(true);
337.68 + }
337.69 +
337.70 + public void init() {
337.71 + add(initialize());
337.72 + }
337.73 +
337.74 + private JPanel initialize() {
337.75 + File file = new File("c:/");
337.76 +
337.77 + try {
337.78 + folder = ShellFolder.getShellFolder(file);
337.79 + } catch (FileNotFoundException e) {
337.80 + fail("Directory " + file.getPath() + " not found");
337.81 + }
337.82 +
337.83 + slider.setMajorTickSpacing(10);
337.84 + slider.setPaintTicks(true);
337.85 + slider.setPaintLabels(true);
337.86 + slider.setSnapToTicks(true);
337.87 + slider.setValue(10);
337.88 +
337.89 + btnStart.addActionListener(new ActionListener() {
337.90 + public void actionPerformed(ActionEvent e) {
337.91 + setEnabledState(false);
337.92 +
337.93 + thread = new MyThread(slider.getValue(), tfLink.getText());
337.94 + thread.start();
337.95 + }
337.96 + });
337.97 +
337.98 + btnStop.setEnabled(false);
337.99 +
337.100 + btnStop.addActionListener(new ActionListener() {
337.101 + public void actionPerformed(ActionEvent e) {
337.102 + thread.interrupt();
337.103 + thread = null;
337.104 +
337.105 + setEnabledState(true);
337.106 + }
337.107 + });
337.108 +
337.109 + btnGC.addActionListener(new ActionListener() {
337.110 + public void actionPerformed(ActionEvent e) {
337.111 + System.gc();
337.112 + }
337.113 + });
337.114 +
337.115 + setEnabledState(true);
337.116 +
337.117 + JPanel pnButtons = new JPanel();
337.118 +
337.119 + pnButtons.setLayout(new BoxLayout(pnButtons, BoxLayout.X_AXIS));
337.120 +
337.121 + pnButtons.add(btnStart);
337.122 + pnButtons.add(btnStop);
337.123 + pnButtons.add(btnGC);
337.124 +
337.125 + tfLink.setMaximumSize(new Dimension(300, 20));
337.126 +
337.127 + JPanel pnContent = new JPanel();
337.128 +
337.129 + pnContent.setLayout(new BoxLayout(pnContent, BoxLayout.Y_AXIS));
337.130 + pnContent.add(new JLabel("Delay between listFiles() invocation (ms):"));
337.131 + pnContent.add(slider);
337.132 + pnContent.add(new JLabel("Provide link here:"));
337.133 + pnContent.add(tfLink);
337.134 + pnContent.add(pnButtons);
337.135 +
337.136 + return pnContent;
337.137 + }
337.138 +
337.139 + private void setEnabledState(boolean enabled) {
337.140 + slider.setEnabled(enabled);
337.141 + btnStart.setEnabled(enabled);
337.142 + btnStop.setEnabled(!enabled);
337.143 + }
337.144 +
337.145 + private static void fail(String msg) {
337.146 + throw new RuntimeException(msg);
337.147 + }
337.148 +
337.149 + private class MyThread extends Thread {
337.150 + private final int delay;
337.151 +
337.152 + private final ShellFolder link;
337.153 +
337.154 + private MyThread(int delay, String link) {
337.155 + this.delay = delay;
337.156 +
337.157 + ShellFolder linkFolder;
337.158 +
337.159 + try {
337.160 + linkFolder = ShellFolder.getShellFolder(new File(link));
337.161 + } catch (FileNotFoundException e) {
337.162 + e.printStackTrace();
337.163 +
337.164 + linkFolder = null;
337.165 + }
337.166 +
337.167 + this.link = linkFolder;
337.168 + }
337.169 +
337.170 + public void run() {
337.171 + while (!isInterrupted()) {
337.172 + folder.listFiles();
337.173 + if (link != null) {
337.174 + try {
337.175 + link.getLinkLocation();
337.176 + } catch (FileNotFoundException e) {
337.177 + e.printStackTrace();
337.178 + }
337.179 + }
337.180 +
337.181 + if (delay > 0) {
337.182 + try {
337.183 + Thread.sleep(delay);
337.184 + } catch (InterruptedException e1) {
337.185 + // The thread was interrupted
337.186 + return;
337.187 + }
337.188 + }
337.189 + }
337.190 + }
337.191 + }
337.192 +}
338.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
338.2 +++ b/test/javax/swing/JSlider/6794831/bug6794831.java Thu Apr 16 19:10:32 2009 -0700
338.3 @@ -0,0 +1,105 @@
338.4 +/*
338.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
338.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
338.7 + *
338.8 + * This code is free software; you can redistribute it and/or modify it
338.9 + * under the terms of the GNU General Public License version 2 only, as
338.10 + * published by the Free Software Foundation.
338.11 + *
338.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
338.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
338.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
338.15 + * version 2 for more details (a copy is included in the LICENSE file that
338.16 + * accompanied this code).
338.17 + *
338.18 + * You should have received a copy of the GNU General Public License version
338.19 + * 2 along with this work; if not, write to the Free Software Foundation,
338.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
338.21 + *
338.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
338.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
338.24 + * have any questions.
338.25 + */
338.26 +
338.27 +/* @test
338.28 + * @bug 6794831
338.29 + * @summary Infinite loop while painting ticks on Slider with maximum=MAX_INT
338.30 + * @author Pavel Porvatov
338.31 + @run main bug6794831
338.32 + */
338.33 +
338.34 +import javax.swing.*;
338.35 +import javax.swing.plaf.basic.BasicSliderUI;
338.36 +import java.awt.image.BufferedImage;
338.37 +import java.util.concurrent.CountDownLatch;
338.38 +import java.util.concurrent.TimeUnit;
338.39 +
338.40 +public class bug6794831 {
338.41 + private final CountDownLatch countDownLatch = new CountDownLatch(1);
338.42 +
338.43 + public static void main(String args[]) throws InterruptedException {
338.44 + new bug6794831().run();
338.45 + }
338.46 +
338.47 + private void run() throws InterruptedException {
338.48 + SwingUtilities.invokeLater(new Runnable() {
338.49 + public void run() {
338.50 + for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) {
338.51 + try {
338.52 + UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
338.53 + } catch (Exception e) {
338.54 + fail(e.getMessage());
338.55 + }
338.56 +
338.57 + BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB);
338.58 +
338.59 + // Test 1
338.60 + JSlider slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
338.61 +
338.62 + slider.setMajorTickSpacing((Integer.MAX_VALUE - 1) / 4);
338.63 + slider.setPaintTicks(true);
338.64 +
338.65 + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
338.66 +
338.67 + // Test 2
338.68 + slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
338.69 +
338.70 + slider.setMinorTickSpacing((Integer.MAX_VALUE - 1) / 4);
338.71 + slider.setPaintTicks(true);
338.72 +
338.73 + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
338.74 +
338.75 + // Test 3
338.76 + slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
338.77 +
338.78 + slider.setOrientation(JSlider.VERTICAL);
338.79 + slider.setMajorTickSpacing((Integer.MAX_VALUE - 1) / 4);
338.80 + slider.setPaintTicks(true);
338.81 +
338.82 + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
338.83 +
338.84 + // Test 4
338.85 + slider = new JSlider(0, Integer.MAX_VALUE - 1, 0);
338.86 +
338.87 + slider.setOrientation(JSlider.VERTICAL);
338.88 + slider.setMinorTickSpacing((Integer.MAX_VALUE - 1) / 4);
338.89 + slider.setPaintTicks(true);
338.90 +
338.91 + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics());
338.92 +
338.93 + countDownLatch.countDown();
338.94 + }
338.95 + }
338.96 + });
338.97 +
338.98 + if (countDownLatch.await(3000, TimeUnit.MILLISECONDS)) {
338.99 + System.out.println("bug6794831 passed");
338.100 + } else {
338.101 + fail("bug6794831 failed");
338.102 + }
338.103 + }
338.104 +
338.105 + private static void fail(String msg) {
338.106 + throw new RuntimeException(msg);
338.107 + }
338.108 +}
339.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
339.2 +++ b/test/javax/swing/system/6799345/TestShutdown.java Thu Apr 16 19:10:32 2009 -0700
339.3 @@ -0,0 +1,203 @@
339.4 +/*
339.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
339.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
339.7 + *
339.8 + * This code is free software; you can redistribute it and/or modify it
339.9 + * under the terms of the GNU General Public License version 2 only, as
339.10 + * published by the Free Software Foundation.
339.11 + *
339.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
339.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
339.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
339.15 + * version 2 for more details (a copy is included in the LICENSE file that
339.16 + * accompanied this code).
339.17 + *
339.18 + * You should have received a copy of the GNU General Public License version
339.19 + * 2 along with this work; if not, write to the Free Software Foundation,
339.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
339.21 + *
339.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
339.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
339.24 + * have any questions.
339.25 + */
339.26 +
339.27 +/* @test
339.28 + @bug 6799345
339.29 + @summary Tests that no exceptions are thrown from TimerQueue and
339.30 +SwingWorker on AppContext shutdown
339.31 + @author art
339.32 + @run main TestShutdown
339.33 +*/
339.34 +
339.35 +import java.awt.*;
339.36 +import java.awt.event.*;
339.37 +
339.38 +import java.util.*;
339.39 +
339.40 +import javax.swing.*;
339.41 +
339.42 +import sun.awt.*;
339.43 +
339.44 +public class TestShutdown
339.45 +{
339.46 + private static AppContext targetAppContext;
339.47 +
339.48 + private static JFrame f;
339.49 + private static JTextField tf;
339.50 +
339.51 + private static volatile boolean exceptionsOccurred = false;
339.52 + private static volatile boolean appcontextInitDone = false;
339.53 +
339.54 + private static int timerValue = 0;
339.55 +
339.56 + public static void main(String[] args)
339.57 + throws Exception
339.58 + {
339.59 + ThreadGroup tg = new TestThreadGroup("TTG");
339.60 + Thread t = new Thread(tg, new TestRunnable(), "InitThread");
339.61 + t.start();
339.62 +
339.63 + while (!appcontextInitDone)
339.64 + {
339.65 + Thread.sleep(500);
339.66 + }
339.67 +
339.68 + targetAppContext.dispose();
339.69 +
339.70 + if (exceptionsOccurred)
339.71 + {
339.72 + throw new RuntimeException("Test FAILED: some exceptions occurred");
339.73 + }
339.74 + }
339.75 +
339.76 + static void initGUI()
339.77 + {
339.78 + f = new JFrame("F");
339.79 + f.setBounds(100, 100, 200, 100);
339.80 + tf = new JTextField("Test");
339.81 + f.add(tf);
339.82 + f.setVisible(true);
339.83 + }
339.84 +
339.85 + static void startGUI()
339.86 + {
339.87 + // caret blink Timer
339.88 + tf.requestFocusInWindow();
339.89 +
339.90 + // misc Timer
339.91 + ActionListener al = new ActionListener()
339.92 + {
339.93 + @Override
339.94 + public void actionPerformed(ActionEvent ae)
339.95 + {
339.96 + System.out.println("Timer tick: " + timerValue++);
339.97 + }
339.98 + };
339.99 + new javax.swing.Timer(30, al).start();
339.100 + }
339.101 +
339.102 + static class TestThreadGroup extends ThreadGroup
339.103 + {
339.104 + public TestThreadGroup(String name)
339.105 + {
339.106 + super(name);
339.107 + }
339.108 +
339.109 + @Override
339.110 + public synchronized void uncaughtException(Thread thread, Throwable t)
339.111 + {
339.112 + if (t instanceof ThreadDeath)
339.113 + {
339.114 + // this one is expected, rethrow
339.115 + throw (ThreadDeath)t;
339.116 + }
339.117 + System.err.println("Test FAILED: an exception is caught in the " +
339.118 + "target thread group on thread " + thread.getName());
339.119 + t.printStackTrace(System.err);
339.120 + exceptionsOccurred = true;
339.121 + }
339.122 + }
339.123 +
339.124 + static class TestRunnable implements Runnable
339.125 + {
339.126 + @Override
339.127 + public void run()
339.128 + {
339.129 + SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
339.130 + targetAppContext = stk.createNewAppContext();
339.131 +
339.132 + // create and show frame and text field
339.133 + SwingUtilities.invokeLater(new Runnable()
339.134 + {
339.135 + @Override
339.136 + public void run()
339.137 + {
339.138 + initGUI();
339.139 + }
339.140 + });
339.141 + stk.realSync();
339.142 +
339.143 + // start some Timers
339.144 + SwingUtilities.invokeLater(new Runnable()
339.145 + {
339.146 + @Override
339.147 + public void run()
339.148 + {
339.149 + startGUI();
339.150 + }
339.151 + });
339.152 + stk.realSync();
339.153 +
339.154 + // start multiple SwingWorkers
339.155 + while (!Thread.interrupted())
339.156 + {
339.157 + try
339.158 + {
339.159 + new TestSwingWorker().execute();
339.160 + Thread.sleep(40);
339.161 + }
339.162 + catch (Exception e)
339.163 + {
339.164 + // exception here is expected, skip
339.165 + break;
339.166 + }
339.167 + }
339.168 + }
339.169 + }
339.170 +
339.171 + static class TestSwingWorker extends SwingWorker<String, Integer>
339.172 + {
339.173 + @Override
339.174 + public String doInBackground()
339.175 + {
339.176 + Random r = new Random();
339.177 + for (int i = 0; i < 10; i++)
339.178 + {
339.179 + try
339.180 + {
339.181 + int delay = r.nextInt() % 50;
339.182 + Thread.sleep(delay);
339.183 + publish(delay);
339.184 + }
339.185 + catch (Exception z)
339.186 + {
339.187 + break;
339.188 + }
339.189 + }
339.190 + if (!appcontextInitDone)
339.191 + {
339.192 + appcontextInitDone = true;
339.193 + }
339.194 + return "Done";
339.195 + }
339.196 +
339.197 + @Override
339.198 + public void process(java.util.List<Integer> chunks)
339.199 + {
339.200 + for (Integer i : chunks)
339.201 + {
339.202 + System.err.println("Processed: " + i);
339.203 + }
339.204 + }
339.205 + }
339.206 +}
340.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
340.2 +++ b/test/javax/swing/text/LayoutQueue/Test6588003.java Thu Apr 16 19:10:32 2009 -0700
340.3 @@ -0,0 +1,59 @@
340.4 +/*
340.5 + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
340.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
340.7 + *
340.8 + * This code is free software; you can redistribute it and/or modify it
340.9 + * under the terms of the GNU General Public License version 2 only, as
340.10 + * published by the Free Software Foundation.
340.11 + *
340.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
340.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
340.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
340.15 + * version 2 for more details (a copy is included in the LICENSE file that
340.16 + * accompanied this code).
340.17 + *
340.18 + * You should have received a copy of the GNU General Public License version
340.19 + * 2 along with this work; if not, write to the Free Software Foundation,
340.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
340.21 + *
340.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
340.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
340.24 + * have any questions.
340.25 + */
340.26 +
340.27 +/* @test
340.28 + @bug 6588003
340.29 + @summary LayoutQueue should not share its DefaultQueue across AppContexts
340.30 + @author Peter Zhelezniakov
340.31 + @run main Test6588003
340.32 +*/
340.33 +
340.34 +import javax.swing.text.LayoutQueue;
340.35 +import sun.awt.SunToolkit;
340.36 +
340.37 +public class Test6588003 implements Runnable {
340.38 + private static final LayoutQueue DEFAULT = new LayoutQueue();
340.39 +
340.40 + public static void main(String[] args) throws InterruptedException {
340.41 + LayoutQueue.setDefaultQueue(DEFAULT);
340.42 +
340.43 + ThreadGroup group = new ThreadGroup("Test6588003");
340.44 + Thread thread = new Thread(group, new Test6588003());
340.45 + thread.start();
340.46 + thread.join();
340.47 +
340.48 + if (LayoutQueue.getDefaultQueue() != DEFAULT) {
340.49 + throw new RuntimeException("Sharing detected");
340.50 + }
340.51 + }
340.52 +
340.53 + public void run() {
340.54 + SunToolkit.createNewAppContext();
340.55 +
340.56 + if (LayoutQueue.getDefaultQueue() == DEFAULT) {
340.57 + throw new RuntimeException("Sharing detected");
340.58 + }
340.59 +
340.60 + LayoutQueue.setDefaultQueue(new LayoutQueue());
340.61 + }
340.62 +}
341.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
341.2 +++ b/test/javax/swing/text/html/Test4783068.java Thu Apr 16 19:10:32 2009 -0700
341.3 @@ -0,0 +1,93 @@
341.4 +/*
341.5 + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
341.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
341.7 + *
341.8 + * This code is free software; you can redistribute it and/or modify it
341.9 + * under the terms of the GNU General Public License version 2 only, as
341.10 + * published by the Free Software Foundation.
341.11 + *
341.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
341.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
341.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
341.15 + * version 2 for more details (a copy is included in the LICENSE file that
341.16 + * accompanied this code).
341.17 + *
341.18 + * You should have received a copy of the GNU General Public License version
341.19 + * 2 along with this work; if not, write to the Free Software Foundation,
341.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
341.21 + *
341.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
341.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
341.24 + * have any questions.
341.25 + */
341.26 +
341.27 +/* @test
341.28 + @bug 4783068
341.29 + @summary Disabled components should render grayed-out HTML
341.30 + @author Peter Zhelezniakov
341.31 + @run main Test4783068
341.32 +*/
341.33 +
341.34 +import java.awt.*;
341.35 +import java.awt.image.BufferedImage;
341.36 +import javax.swing.*;
341.37 +import javax.swing.plaf.metal.MetalLookAndFeel;
341.38 +
341.39 +public class Test4783068 {
341.40 + final static Color TEST_COLOR = Color.WHITE;
341.41 +
341.42 + final static String html = "<html>" +
341.43 + "This is a <font color='red'>colored</font> <b>text</b>" +
341.44 + "<p>with a <a href='http://ru.sun.com'>link</a>" +
341.45 + "<ul><li>an unordered<li>list</ul>" +
341.46 + "<ol><li>and an ordered<li>list</ol>" +
341.47 + "</html>";
341.48 +
341.49 +
341.50 + void test() {
341.51 + try {
341.52 + UIManager.setLookAndFeel(new MetalLookAndFeel());
341.53 + } catch (UnsupportedLookAndFeelException e) {
341.54 + throw new Error("Cannot set Metal LAF");
341.55 + }
341.56 + // Render text using background color
341.57 + UIManager.put("textInactiveText", TEST_COLOR);
341.58 +
341.59 + test(new JLabel(html));
341.60 + test(new JButton(html));
341.61 +
341.62 + JEditorPane pane = new JEditorPane("text/html", html);
341.63 + pane.setDisabledTextColor(TEST_COLOR);
341.64 + test(pane);
341.65 + }
341.66 +
341.67 + void test(JComponent c) {
341.68 + c.setEnabled(false);
341.69 + c.setOpaque(true);
341.70 + c.setBackground(TEST_COLOR);
341.71 + c.setBorder(null);
341.72 + Dimension size = c.getPreferredSize();
341.73 + c.setBounds(0, 0, size.width, size.height);
341.74 +
341.75 + BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
341.76 + c.paint(image.getGraphics());
341.77 +
341.78 + int rgb = TEST_COLOR.getRGB();
341.79 + for (int i = 0; i < size.height; i++) {
341.80 + for (int j = 0; j < size.width; j++) {
341.81 + if (image.getRGB(j, i) != rgb) {
341.82 + throw new RuntimeException(
341.83 + String.format("Color mismatch at [%d, %d]", j, i));
341.84 + }
341.85 + }
341.86 + }
341.87 + }
341.88 +
341.89 + public static void main(String[] args) throws Exception {
341.90 + SwingUtilities.invokeAndWait(new Runnable() {
341.91 + @Override public void run() {
341.92 + new Test4783068().test();
341.93 + }
341.94 + });
341.95 + }
341.96 +}
342.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
342.2 +++ b/test/sun/java2d/pipe/RegionOps.java Thu Apr 16 19:10:32 2009 -0700
342.3 @@ -0,0 +1,510 @@
342.4 +/*
342.5 + * @test %W% %E%
342.6 + * @bug 6504874
342.7 + * @summary This test verifies the operation (and performance) of the
342.8 + * various CAG operations on the internal Region class.
342.9 + * @run main RegionOps
342.10 + */
342.11 +
342.12 +import java.awt.Rectangle;
342.13 +import java.awt.geom.Area;
342.14 +import java.awt.geom.AffineTransform;
342.15 +import java.awt.image.BufferedImage;
342.16 +import java.util.Random;
342.17 +import sun.java2d.pipe.Region;
342.18 +
342.19 +public class RegionOps {
342.20 + public static final int DEFAULT_NUMREGIONS = 50;
342.21 + public static final int DEFAULT_MINSUBRECTS = 1;
342.22 + public static final int DEFAULT_MAXSUBRECTS = 10;
342.23 +
342.24 + public static final int MINCOORD = -20;
342.25 + public static final int MAXCOORD = 20;
342.26 +
342.27 + public static boolean useArea;
342.28 +
342.29 + static int numops;
342.30 + static int numErrors;
342.31 + static Random rand = new Random();
342.32 + static boolean skipCheck;
342.33 + static boolean countErrors;
342.34 +
342.35 + static {
342.36 + // Instantiating BufferedImage initializes sun.java2d
342.37 + BufferedImage bimg =
342.38 + new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
342.39 + }
342.40 +
342.41 + public static void usage(String error) {
342.42 + if (error != null) {
342.43 + System.err.println("Error: "+error);
342.44 + }
342.45 + System.err.println("Usage: java RegionOps "+
342.46 + "[-regions N] [-rects M] "+
342.47 + "[-[min|max]rects M] [-area]");
342.48 + System.err.println(" "+
342.49 + "[-add|union] [-sub|diff] "+
342.50 + "[-int[ersect]] [-xor]");
342.51 + System.err.println(" "+
342.52 + "[-seed S] [-nocheck] [-count[errors]] [-help]");
342.53 + System.exit((error != null) ? 1 : 0);
342.54 + }
342.55 +
342.56 + public static void error(RectListImpl a, RectListImpl b, String problem) {
342.57 + System.err.println("Operating on: "+a);
342.58 + if (b != null) {
342.59 + System.err.println("and: "+b);
342.60 + }
342.61 + if (countErrors) {
342.62 + System.err.println(problem);
342.63 + numErrors++;
342.64 + } else {
342.65 + throw new RuntimeException(problem);
342.66 + }
342.67 + }
342.68 +
342.69 + public static void main(String argv[]) {
342.70 + int numregions = DEFAULT_NUMREGIONS;
342.71 + int minsubrects = DEFAULT_MINSUBRECTS;
342.72 + int maxsubrects = DEFAULT_MAXSUBRECTS;
342.73 + boolean doUnion = false;
342.74 + boolean doIntersect = false;
342.75 + boolean doSubtract = false;
342.76 + boolean doXor = false;
342.77 +
342.78 + for (int i = 0; i < argv.length; i++) {
342.79 + String arg = argv[i];
342.80 + if (arg.equalsIgnoreCase("-regions")) {
342.81 + if (i+1 >= argv.length) {
342.82 + usage("missing arg for -regions");
342.83 + }
342.84 + numregions = Integer.parseInt(argv[++i]);
342.85 + } else if (arg.equalsIgnoreCase("-rects")) {
342.86 + if (i+1 >= argv.length) {
342.87 + usage("missing arg for -rects");
342.88 + }
342.89 + minsubrects = maxsubrects = Integer.parseInt(argv[++i]);
342.90 + } else if (arg.equalsIgnoreCase("-minrects")) {
342.91 + if (i+1 >= argv.length) {
342.92 + usage("missing arg for -minrects");
342.93 + }
342.94 + minsubrects = Integer.parseInt(argv[++i]);
342.95 + } else if (arg.equalsIgnoreCase("-maxrects")) {
342.96 + if (i+1 >= argv.length) {
342.97 + usage("missing arg for -maxrects");
342.98 + }
342.99 + maxsubrects = Integer.parseInt(argv[++i]);
342.100 + } else if (arg.equalsIgnoreCase("-area")) {
342.101 + useArea = true;
342.102 + } else if (arg.equalsIgnoreCase("-add") ||
342.103 + arg.equalsIgnoreCase("-union"))
342.104 + {
342.105 + doUnion = true;
342.106 + } else if (arg.equalsIgnoreCase("-sub") ||
342.107 + arg.equalsIgnoreCase("-diff"))
342.108 + {
342.109 + doSubtract = true;
342.110 + } else if (arg.equalsIgnoreCase("-int") ||
342.111 + arg.equalsIgnoreCase("-intersect"))
342.112 + {
342.113 + doIntersect = true;
342.114 + } else if (arg.equalsIgnoreCase("-xor")) {
342.115 + doXor = true;
342.116 + } else if (arg.equalsIgnoreCase("-seed")) {
342.117 + if (i+1 >= argv.length) {
342.118 + usage("missing arg for -seed");
342.119 + }
342.120 + rand.setSeed(Long.decode(argv[++i]).longValue());
342.121 + } else if (arg.equalsIgnoreCase("-nocheck")) {
342.122 + skipCheck = true;
342.123 + } else if (arg.equalsIgnoreCase("-count") ||
342.124 + arg.equalsIgnoreCase("-counterrors"))
342.125 + {
342.126 + countErrors = true;
342.127 + } else if (arg.equalsIgnoreCase("-help")) {
342.128 + usage(null);
342.129 + } else {
342.130 + usage("Unknown argument: "+arg);
342.131 + }
342.132 + }
342.133 +
342.134 + if (maxsubrects < minsubrects) {
342.135 + usage("maximum number of subrectangles less than minimum");
342.136 + }
342.137 +
342.138 + if (minsubrects <= 0) {
342.139 + usage("minimum number of subrectangles must be positive");
342.140 + }
342.141 +
342.142 + if (!doUnion && !doSubtract && !doIntersect && !doXor) {
342.143 + doUnion = doSubtract = doIntersect = doXor = true;
342.144 + }
342.145 +
342.146 + long start = System.currentTimeMillis();
342.147 + RectListImpl rlist[] = new RectListImpl[numregions];
342.148 + int totalrects = 0;
342.149 + for (int i = 0; i < rlist.length; i++) {
342.150 + RectListImpl rli = RectListImpl.getInstance();
342.151 + int numsubrects =
342.152 + minsubrects + rand.nextInt(maxsubrects - minsubrects + 1);
342.153 + for (int j = 0; j < numsubrects; j++) {
342.154 + addRectTo(rli);
342.155 + totalrects++;
342.156 + }
342.157 + rlist[i] = rli;
342.158 + }
342.159 + long end = System.currentTimeMillis();
342.160 + System.out.println((end-start)+"ms to create "+
342.161 + rlist.length+" regions containing "+
342.162 + totalrects+" subrectangles");
342.163 +
342.164 + start = System.currentTimeMillis();
342.165 + for (int i = 0; i < rlist.length; i++) {
342.166 + RectListImpl a = rlist[i];
342.167 + testTranslate(a);
342.168 + for (int j = i; j < rlist.length; j++) {
342.169 + RectListImpl b = rlist[j];
342.170 + if (doUnion) testUnion(a, b);
342.171 + if (doSubtract) testDifference(a, b);
342.172 + if (doIntersect) testIntersection(a, b);
342.173 + if (doXor) testExclusiveOr(a, b);
342.174 + }
342.175 + }
342.176 + end = System.currentTimeMillis();
342.177 + System.out.println(numops+" ops took "+(end-start)+"ms");
342.178 +
342.179 + if (numErrors > 0) {
342.180 + throw new RuntimeException(numErrors+" errors encountered");
342.181 + }
342.182 + }
342.183 +
342.184 + public static void addRectTo(RectListImpl rli) {
342.185 + int lox = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
342.186 + int hix = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
342.187 + int loy = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
342.188 + int hiy = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1);
342.189 + rli.addRect(lox, loy, hix, hiy);
342.190 + }
342.191 +
342.192 + public static void checkEqual(RectListImpl a, RectListImpl b,
342.193 + String optype)
342.194 + {
342.195 + if (a.hashCode() != b.hashCode()) {
342.196 + error(a, b, "hashcode failed for "+optype);
342.197 + }
342.198 + if (!a.equals(b)) {
342.199 + error(a, b, "equals failed for "+optype);
342.200 + }
342.201 + }
342.202 +
342.203 + public static void testTranslate(RectListImpl a) {
342.204 + RectListImpl maxTrans =
342.205 + a.getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE)
342.206 + .getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE)
342.207 + .getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE);
342.208 + if (!maxTrans.checkTransEmpty()) {
342.209 + error(maxTrans, null, "overflow translated RectList not empty");
342.210 + }
342.211 + RectListImpl minTrans =
342.212 + a.getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE)
342.213 + .getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE)
342.214 + .getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE);
342.215 + if (!minTrans.checkTransEmpty()) {
342.216 + error(minTrans, null, "overflow translated RectList not empty");
342.217 + }
342.218 + testTranslate(a, Integer.MAX_VALUE, Integer.MAX_VALUE, false,
342.219 + MINCOORD, 0, MINCOORD, 0);
342.220 + testTranslate(a, Integer.MAX_VALUE, Integer.MIN_VALUE, false,
342.221 + MINCOORD, 0, 0, MAXCOORD);
342.222 + testTranslate(a, Integer.MIN_VALUE, Integer.MAX_VALUE, false,
342.223 + 0, MAXCOORD, MINCOORD, 0);
342.224 + testTranslate(a, Integer.MIN_VALUE, Integer.MIN_VALUE, false,
342.225 + 0, MAXCOORD, 0, MAXCOORD);
342.226 + for (int dy = -100; dy <= 100; dy += 50) {
342.227 + for (int dx = -100; dx <= 100; dx += 50) {
342.228 + testTranslate(a, dx, dy, true,
342.229 + MINCOORD, MAXCOORD,
342.230 + MINCOORD, MAXCOORD);
342.231 + }
342.232 + }
342.233 + }
342.234 +
342.235 + public static void testTranslate(RectListImpl a, int dx, int dy,
342.236 + boolean isNonDestructive,
342.237 + int xmin, int xmax,
342.238 + int ymin, int ymax)
342.239 + {
342.240 + RectListImpl theTrans = a.getTranslation(dx, dy); numops++;
342.241 + if (skipCheck) return;
342.242 + RectListImpl unTrans = theTrans.getTranslation(-dx, -dy);
342.243 + if (isNonDestructive) checkEqual(a, unTrans, "Translate");
342.244 + for (int x = xmin; x < xmax; x++) {
342.245 + for (int y = ymin; y < ymax; y++) {
342.246 + boolean inside = a.contains(x, y);
342.247 + if (theTrans.contains(x+dx, y+dy) != inside) {
342.248 + error(a, null, "translation failed for "+
342.249 + dx+", "+dy+" at "+x+", "+y);
342.250 + }
342.251 + }
342.252 + }
342.253 + }
342.254 +
342.255 + public static void testUnion(RectListImpl a, RectListImpl b) {
342.256 + RectListImpl aUb = a.getUnion(b); numops++;
342.257 + RectListImpl bUa = b.getUnion(a); numops++;
342.258 + if (skipCheck) return;
342.259 + checkEqual(aUb, bUa, "Union");
342.260 + testUnion(a, b, aUb);
342.261 + testUnion(a, b, bUa);
342.262 + }
342.263 +
342.264 + public static void testUnion(RectListImpl a, RectListImpl b,
342.265 + RectListImpl theUnion)
342.266 + {
342.267 + for (int x = MINCOORD; x < MAXCOORD; x++) {
342.268 + for (int y = MINCOORD; y < MAXCOORD; y++) {
342.269 + boolean inside = (a.contains(x, y) || b.contains(x, y));
342.270 + if (theUnion.contains(x, y) != inside) {
342.271 + error(a, b, "union failed at "+x+", "+y);
342.272 + }
342.273 + }
342.274 + }
342.275 + }
342.276 +
342.277 + public static void testDifference(RectListImpl a, RectListImpl b) {
342.278 + RectListImpl aDb = a.getDifference(b); numops++;
342.279 + RectListImpl bDa = b.getDifference(a); numops++;
342.280 + if (skipCheck) return;
342.281 + // Note that difference is not commutative so we cannot check equals
342.282 + // checkEqual(a, b, "Difference");
342.283 + testDifference(a, b, aDb);
342.284 + testDifference(b, a, bDa);
342.285 + }
342.286 +
342.287 + public static void testDifference(RectListImpl a, RectListImpl b,
342.288 + RectListImpl theDifference)
342.289 + {
342.290 + for (int x = MINCOORD; x < MAXCOORD; x++) {
342.291 + for (int y = MINCOORD; y < MAXCOORD; y++) {
342.292 + boolean inside = (a.contains(x, y) && !b.contains(x, y));
342.293 + if (theDifference.contains(x, y) != inside) {
342.294 + error(a, b, "difference failed at "+x+", "+y);
342.295 + }
342.296 + }
342.297 + }
342.298 + }
342.299 +
342.300 + public static void testIntersection(RectListImpl a, RectListImpl b) {
342.301 + RectListImpl aIb = a.getIntersection(b); numops++;
342.302 + RectListImpl bIa = b.getIntersection(a); numops++;
342.303 + if (skipCheck) return;
342.304 + checkEqual(aIb, bIa, "Intersection");
342.305 + testIntersection(a, b, aIb);
342.306 + testIntersection(a, b, bIa);
342.307 + }
342.308 +
342.309 + public static void testIntersection(RectListImpl a, RectListImpl b,
342.310 + RectListImpl theIntersection)
342.311 + {
342.312 + for (int x = MINCOORD; x < MAXCOORD; x++) {
342.313 + for (int y = MINCOORD; y < MAXCOORD; y++) {
342.314 + boolean inside = (a.contains(x, y) && b.contains(x, y));
342.315 + if (theIntersection.contains(x, y) != inside) {
342.316 + error(a, b, "intersection failed at "+x+", "+y);
342.317 + }
342.318 + }
342.319 + }
342.320 + }
342.321 +
342.322 + public static void testExclusiveOr(RectListImpl a, RectListImpl b) {
342.323 + RectListImpl aXb = a.getExclusiveOr(b); numops++;
342.324 + RectListImpl bXa = b.getExclusiveOr(a); numops++;
342.325 + if (skipCheck) return;
342.326 + checkEqual(aXb, bXa, "ExclusiveOr");
342.327 + testExclusiveOr(a, b, aXb);
342.328 + testExclusiveOr(a, b, bXa);
342.329 + }
342.330 +
342.331 + public static void testExclusiveOr(RectListImpl a, RectListImpl b,
342.332 + RectListImpl theExclusiveOr)
342.333 + {
342.334 + for (int x = MINCOORD; x < MAXCOORD; x++) {
342.335 + for (int y = MINCOORD; y < MAXCOORD; y++) {
342.336 + boolean inside = (a.contains(x, y) != b.contains(x, y));
342.337 + if (theExclusiveOr.contains(x, y) != inside) {
342.338 + error(a, b, "xor failed at "+x+", "+y);
342.339 + }
342.340 + }
342.341 + }
342.342 + }
342.343 +
342.344 + public abstract static class RectListImpl {
342.345 + public static RectListImpl getInstance() {
342.346 + if (useArea) {
342.347 + return new AreaImpl();
342.348 + } else {
342.349 + return new RegionImpl();
342.350 + }
342.351 + }
342.352 +
342.353 + public abstract void addRect(int lox, int loy, int hix, int hiy);
342.354 +
342.355 + public abstract RectListImpl getTranslation(int dx, int dy);
342.356 +
342.357 + public abstract RectListImpl getIntersection(RectListImpl rli);
342.358 + public abstract RectListImpl getExclusiveOr(RectListImpl rli);
342.359 + public abstract RectListImpl getDifference(RectListImpl rli);
342.360 + public abstract RectListImpl getUnion(RectListImpl rli);
342.361 +
342.362 + // Used for making sure that 3xMAX translates yields an empty region
342.363 + public abstract boolean checkTransEmpty();
342.364 +
342.365 + public abstract boolean contains(int x, int y);
342.366 +
342.367 + public abstract int hashCode();
342.368 + public abstract boolean equals(RectListImpl other);
342.369 + }
342.370 +
342.371 + public static class AreaImpl extends RectListImpl {
342.372 + Area theArea;
342.373 +
342.374 + public AreaImpl() {
342.375 + }
342.376 +
342.377 + public AreaImpl(Area a) {
342.378 + theArea = a;
342.379 + }
342.380 +
342.381 + public void addRect(int lox, int loy, int hix, int hiy) {
342.382 + Area a2 = new Area(new Rectangle(lox, loy, hix-lox, hiy-loy));
342.383 + if (theArea == null) {
342.384 + theArea = a2;
342.385 + } else {
342.386 + theArea.add(a2);
342.387 + }
342.388 + }
342.389 +
342.390 + public RectListImpl getTranslation(int dx, int dy) {
342.391 + AffineTransform at = AffineTransform.getTranslateInstance(dx, dy);
342.392 + return new AreaImpl(theArea.createTransformedArea(at));
342.393 + }
342.394 +
342.395 + public RectListImpl getIntersection(RectListImpl rli) {
342.396 + Area a2 = new Area(theArea);
342.397 + a2.intersect(((AreaImpl) rli).theArea);
342.398 + return new AreaImpl(a2);
342.399 + }
342.400 +
342.401 + public RectListImpl getExclusiveOr(RectListImpl rli) {
342.402 + Area a2 = new Area(theArea);
342.403 + a2.exclusiveOr(((AreaImpl) rli).theArea);
342.404 + return new AreaImpl(a2);
342.405 + }
342.406 +
342.407 + public RectListImpl getDifference(RectListImpl rli) {
342.408 + Area a2 = new Area(theArea);
342.409 + a2.subtract(((AreaImpl) rli).theArea);
342.410 + return new AreaImpl(a2);
342.411 + }
342.412 +
342.413 + public RectListImpl getUnion(RectListImpl rli) {
342.414 + Area a2 = new Area(theArea);
342.415 + a2.add(((AreaImpl) rli).theArea);
342.416 + return new AreaImpl(a2);
342.417 + }
342.418 +
342.419 + // Used for making sure that 3xMAX translates yields an empty region
342.420 + public boolean checkTransEmpty() {
342.421 + // Area objects will actually survive 3 MAX translates so just
342.422 + // pretend that it had the intended effect...
342.423 + return true;
342.424 + }
342.425 +
342.426 + public boolean contains(int x, int y) {
342.427 + return theArea.contains(x, y);
342.428 + }
342.429 +
342.430 + public int hashCode() {
342.431 + // Area does not override hashCode...
342.432 + return 0;
342.433 + }
342.434 +
342.435 + public boolean equals(RectListImpl other) {
342.436 + return theArea.equals(((AreaImpl) other).theArea);
342.437 + }
342.438 +
342.439 + public String toString() {
342.440 + return theArea.toString();
342.441 + }
342.442 + }
342.443 +
342.444 + public static class RegionImpl extends RectListImpl {
342.445 + Region theRegion;
342.446 +
342.447 + public RegionImpl() {
342.448 + }
342.449 +
342.450 + public RegionImpl(Region r) {
342.451 + theRegion = r;
342.452 + }
342.453 +
342.454 + public void addRect(int lox, int loy, int hix, int hiy) {
342.455 + Region r2 = Region.getInstanceXYXY(lox, loy, hix, hiy);
342.456 + if (theRegion == null) {
342.457 + theRegion = r2;
342.458 + } else {
342.459 + theRegion = theRegion.getUnion(r2);
342.460 + }
342.461 + }
342.462 +
342.463 + public RectListImpl getTranslation(int dx, int dy) {
342.464 + return new RegionImpl(theRegion.getTranslatedRegion(dx, dy));
342.465 + }
342.466 +
342.467 + public RectListImpl getIntersection(RectListImpl rli) {
342.468 + Region r2 = ((RegionImpl) rli).theRegion;
342.469 + r2 = theRegion.getIntersection(r2);
342.470 + return new RegionImpl(r2);
342.471 + }
342.472 +
342.473 + public RectListImpl getExclusiveOr(RectListImpl rli) {
342.474 + Region r2 = ((RegionImpl) rli).theRegion;
342.475 + r2 = theRegion.getExclusiveOr(r2);
342.476 + return new RegionImpl(r2);
342.477 + }
342.478 +
342.479 + public RectListImpl getDifference(RectListImpl rli) {
342.480 + Region r2 = ((RegionImpl) rli).theRegion;
342.481 + r2 = theRegion.getDifference(r2);
342.482 + return new RegionImpl(r2);
342.483 + }
342.484 +
342.485 + public RectListImpl getUnion(RectListImpl rli) {
342.486 + Region r2 = ((RegionImpl) rli).theRegion;
342.487 + r2 = theRegion.getUnion(r2);
342.488 + return new RegionImpl(r2);
342.489 + }
342.490 +
342.491 + // Used for making sure that 3xMAX translates yields an empty region
342.492 + public boolean checkTransEmpty() {
342.493 + // Region objects should be empty after 3 MAX translates...
342.494 + return theRegion.isEmpty();
342.495 + }
342.496 +
342.497 + public boolean contains(int x, int y) {
342.498 + return theRegion.contains(x, y);
342.499 + }
342.500 +
342.501 + public int hashCode() {
342.502 + return theRegion.hashCode();
342.503 + }
342.504 +
342.505 + public boolean equals(RectListImpl other) {
342.506 + return theRegion.equals(((RegionImpl) other).theRegion);
342.507 + }
342.508 +
342.509 + public String toString() {
342.510 + return theRegion.toString();
342.511 + }
342.512 + }
342.513 +}
343.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
343.2 +++ b/test/sun/net/sdp/ProbeIB.java Thu Apr 16 19:10:32 2009 -0700
343.3 @@ -0,0 +1,59 @@
343.4 +/*
343.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
343.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
343.7 + *
343.8 + * This code is free software; you can redistribute it and/or modify it
343.9 + * under the terms of the GNU General Public License version 2 only, as
343.10 + * published by the Free Software Foundation.
343.11 + *
343.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
343.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
343.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
343.15 + * version 2 for more details (a copy is included in the LICENSE file that
343.16 + * accompanied this code).
343.17 + *
343.18 + * You should have received a copy of the GNU General Public License version
343.19 + * 2 along with this work; if not, write to the Free Software Foundation,
343.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
343.21 + *
343.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
343.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
343.24 + * have any questions.
343.25 + */
343.26 +
343.27 +import java.io.File;
343.28 +import java.io.IOException;
343.29 +import java.net.NetworkInterface;
343.30 +import java.net.InetAddress;
343.31 +import java.util.Scanner;
343.32 +import java.util.Enumeration;
343.33 +
343.34 +/**
343.35 + * Probes for InfiniBand devices plumbed with IP addresses.
343.36 + */
343.37 +
343.38 +public class ProbeIB {
343.39 + public static void main(String[] args) throws IOException {
343.40 + Scanner s = new Scanner(new File("/etc/path_to_inst"));
343.41 + try {
343.42 + while (s.hasNextLine()) {
343.43 + String line = s.nextLine();
343.44 + if (line.startsWith("#"))
343.45 + continue;
343.46 + String[] fields = line.split("\\s+");
343.47 + if (!fields[2].equals("\"ibd\""))
343.48 + continue;
343.49 + String name = fields[2].substring(1, fields[2].length()-1) + fields[1];
343.50 + NetworkInterface ni = NetworkInterface.getByName(name);
343.51 + if (ni != null) {
343.52 + Enumeration<InetAddress> addrs = ni.getInetAddresses();
343.53 + while (addrs.hasMoreElements()) {
343.54 + System.out.println(addrs.nextElement().getHostAddress());
343.55 + }
343.56 + }
343.57 + }
343.58 + } finally {
343.59 + s.close();
343.60 + }
343.61 + }
343.62 +}
344.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
344.2 +++ b/test/sun/net/sdp/Sanity.java Thu Apr 16 19:10:32 2009 -0700
344.3 @@ -0,0 +1,168 @@
344.4 +/*
344.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
344.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
344.7 + *
344.8 + * This code is free software; you can redistribute it and/or modify it
344.9 + * under the terms of the GNU General Public License version 2 only, as
344.10 + * published by the Free Software Foundation.
344.11 + *
344.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
344.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
344.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
344.15 + * version 2 for more details (a copy is included in the LICENSE file that
344.16 + * accompanied this code).
344.17 + *
344.18 + * You should have received a copy of the GNU General Public License version
344.19 + * 2 along with this work; if not, write to the Free Software Foundation,
344.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
344.21 + *
344.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
344.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
344.24 + * have any questions.
344.25 + */
344.26 +
344.27 +import java.net.*;
344.28 +import java.io.*;
344.29 +import java.nio.channels.*;
344.30 +import java.util.Enumeration;
344.31 +
344.32 +/**
344.33 + * Sanity check Socket/ServerSocket and each of the stream-oriented channels
344.34 + * on each IP address plumbed to the network adapters.
344.35 + */
344.36 +
344.37 +public class Sanity {
344.38 + public static void main(String[] args) throws Exception {
344.39 + Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
344.40 + while (nifs.hasMoreElements()) {
344.41 + NetworkInterface ni = nifs.nextElement();
344.42 + Enumeration<InetAddress> addrs = ni.getInetAddresses();
344.43 + while (addrs.hasMoreElements()) {
344.44 + InetAddress addr = addrs.nextElement();
344.45 + test(addr);
344.46 + }
344.47 + }
344.48 + }
344.49 +
344.50 + static void test(InetAddress addr) throws Exception {
344.51 + System.out.println(addr.getHostAddress());
344.52 +
344.53 + // ServerSocketChannel.bind
344.54 + ServerSocketChannel ssc = ServerSocketChannel.open();
344.55 + try {
344.56 + ssc.bind(new InetSocketAddress(addr, 0));
344.57 + int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort();
344.58 +
344.59 + // SocketChannel.connect (implicit bind)
344.60 + SocketChannel client = SocketChannel.open();
344.61 + try {
344.62 + client.connect(new InetSocketAddress(addr, port));
344.63 + SocketChannel peer = ssc.accept();
344.64 + try {
344.65 + testConnection(Channels.newOutputStream(client),
344.66 + Channels.newInputStream(peer));
344.67 + } finally {
344.68 + peer.close();
344.69 + }
344.70 + } finally {
344.71 + client.close();
344.72 + }
344.73 +
344.74 + // SocketChannel.connect (explicit bind)
344.75 + client = SocketChannel.open();
344.76 + try {
344.77 + client.bind(new InetSocketAddress(addr, 0))
344.78 + .connect(new InetSocketAddress(addr, port));
344.79 + ssc.accept().close();
344.80 + } finally {
344.81 + client.close();
344.82 + }
344.83 + } finally {
344.84 + ssc.close();
344.85 + }
344.86 +
344.87 + // AsynchronousServerSocketChannel.bind
344.88 + AsynchronousServerSocketChannel server =
344.89 + AsynchronousServerSocketChannel.open();
344.90 + try {
344.91 + server.bind(new InetSocketAddress(addr, 0));
344.92 + int port = ((InetSocketAddress)(server.getLocalAddress())).getPort();
344.93 +
344.94 + // AsynchronousSocketChannel.connect (implicit bind)
344.95 + AsynchronousSocketChannel client = AsynchronousSocketChannel.open();
344.96 + try {
344.97 + client.connect(new InetSocketAddress(addr, port)).get();
344.98 + AsynchronousSocketChannel peer = server.accept().get();
344.99 + try {
344.100 + testConnection(Channels.newOutputStream(client),
344.101 + Channels.newInputStream(peer));
344.102 + } finally {
344.103 + peer.close();
344.104 + }
344.105 + } finally {
344.106 + client.close();
344.107 + }
344.108 +
344.109 + // AsynchronousSocketChannel.connect (explicit bind)
344.110 + client = AsynchronousSocketChannel.open();
344.111 + try {
344.112 + client.bind(new InetSocketAddress(addr, 0))
344.113 + .connect(new InetSocketAddress(addr, port)).get();
344.114 + server.accept().get().close();
344.115 + } finally {
344.116 + client.close();
344.117 + }
344.118 + } finally {
344.119 + server.close();
344.120 + }
344.121 +
344.122 + // ServerSocket.bind
344.123 + ServerSocket ss = new ServerSocket();
344.124 + try {
344.125 + ss.bind(new InetSocketAddress(addr, 0));
344.126 + int port = ss.getLocalPort();
344.127 +
344.128 + // Socket.connect (implicit bind)
344.129 + Socket s = new Socket();
344.130 + try {
344.131 + s.connect(new InetSocketAddress(addr, port));
344.132 + Socket peer = ss.accept();
344.133 + try {
344.134 + testConnection(s.getOutputStream(), peer.getInputStream());
344.135 + } finally {
344.136 + peer.close();
344.137 + }
344.138 + } finally {
344.139 + s.close();
344.140 + }
344.141 +
344.142 + // Socket.connect (explicit bind)
344.143 + s = new Socket();
344.144 + try {
344.145 + s.bind(new InetSocketAddress(addr, 0));
344.146 + s.connect(new InetSocketAddress(addr, port));
344.147 + ss.accept().close();
344.148 + } finally {
344.149 + s.close();
344.150 + }
344.151 + } finally {
344.152 + ss.close();
344.153 + }
344.154 + }
344.155 +
344.156 + static void testConnection(OutputStream out, InputStream in)
344.157 + throws IOException
344.158 + {
344.159 + byte[] msg = "hello".getBytes();
344.160 + out.write(msg);
344.161 +
344.162 + byte[] ba = new byte[100];
344.163 + int nread = 0;
344.164 + while (nread < msg.length) {
344.165 + int n = in.read(ba);
344.166 + if (n < 0)
344.167 + throw new IOException("EOF not expected!");
344.168 + nread += n;
344.169 + }
344.170 + }
344.171 +}
345.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
345.2 +++ b/test/sun/net/sdp/sanity.sh Thu Apr 16 19:10:32 2009 -0700
345.3 @@ -0,0 +1,72 @@
345.4 +#
345.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
345.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
345.7 +#
345.8 +# This code is free software; you can redistribute it and/or modify it
345.9 +# under the terms of the GNU General Public License version 2 only, as
345.10 +# published by the Free Software Foundation.
345.11 +#
345.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
345.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
345.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
345.15 +# version 2 for more details (a copy is included in the LICENSE file that
345.16 +# accompanied this code).
345.17 +#
345.18 +# You should have received a copy of the GNU General Public License version
345.19 +# 2 along with this work; if not, write to the Free Software Foundation,
345.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
345.21 +#
345.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
345.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
345.24 +# have any questions.
345.25 +#
345.26 +
345.27 +# @test
345.28 +# @bug 4890703
345.29 +# @summary Unit test for Solaris SDP support
345.30 +# @build ProbeIB Sanity
345.31 +# @run shell sanity.sh
345.32 +
345.33 +# Check we are on Solaris and that SDP is enabled
345.34 +OS=`uname -s`
345.35 +if [ "$OS" != "SunOS" ]; then
345.36 + echo "This is a Solaris-only test"
345.37 + exit 0
345.38 +fi
345.39 +SDPADM=/usr/sbin/sdpadm
345.40 +if [ ! -f ${SDPADM} ]; then
345.41 + echo "SDP not available"
345.42 + exit 0
345.43 +fi
345.44 +${SDPADM} status|grep Enabled
345.45 +if [ $? != 0 ]; then
345.46 + echo "SDP not enabled"
345.47 + exit 0
345.48 +fi
345.49 +
345.50 +if [ -z "$TESTJAVA" ]; then
345.51 + JAVA=java
345.52 + TESTCLASSES=.
345.53 + TESTSRC=.
345.54 +else
345.55 + JAVA="${TESTJAVA}/bin/java"
345.56 +fi
345.57 +
345.58 +CLASSPATH=${TESTCLASSES}:${TESTSRC}
345.59 +export CLASSPATH
345.60 +
345.61 +# Probe for IP addresses plumbed to IB interfaces
345.62 +$JAVA -Djava.net.preferIPv4Stack=true ProbeIB > ib_addrs
345.63 +
345.64 +# Create sdp.conf
345.65 +SDPCONF=sdp.conf
345.66 +rm ${SDPCONF}
345.67 +touch ${SDPCONF}
345.68 +cat ib_addrs | while read ADDR
345.69 +do
345.70 + echo "bind ${ADDR} *" > ${SDPCONF}
345.71 + echo "connect ${ADDR} *" >> ${SDPCONF}
345.72 +done
345.73 +
345.74 +# Sanity check
345.75 +$JAVA -Djava.net.preferIPv4Stack=true -Dcom.sun.sdp.conf=${SDPCONF} -Dcom.sun.sdp.debug Sanity
346.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
346.2 +++ b/test/sun/security/tools/jarsigner/concise_jarsigner.sh Thu Apr 16 19:10:32 2009 -0700
346.3 @@ -0,0 +1,200 @@
346.4 +#
346.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
346.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
346.7 +#
346.8 +# This code is free software; you can redistribute it and/or modify it
346.9 +# under the terms of the GNU General Public License version 2 only, as
346.10 +# published by the Free Software Foundation.
346.11 +#
346.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
346.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
346.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
346.15 +# version 2 for more details (a copy is included in the LICENSE file that
346.16 +# accompanied this code).
346.17 +#
346.18 +# You should have received a copy of the GNU General Public License version
346.19 +# 2 along with this work; if not, write to the Free Software Foundation,
346.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
346.21 +#
346.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
346.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
346.24 +# have any questions.
346.25 +#
346.26 +
346.27 +# @test
346.28 +# @bug 6802846
346.29 +# @summary jarsigner needs enhanced cert validation(options)
346.30 +#
346.31 +# @run shell concise_jarsigner.sh
346.32 +#
346.33 +
346.34 +if [ "${TESTJAVA}" = "" ] ; then
346.35 + JAVAC_CMD=`which javac`
346.36 + TESTJAVA=`dirname $JAVAC_CMD`/..
346.37 +fi
346.38 +
346.39 +# set platform-dependent variables
346.40 +OS=`uname -s`
346.41 +case "$OS" in
346.42 + Windows_* )
346.43 + FS="\\"
346.44 + ;;
346.45 + * )
346.46 + FS="/"
346.47 + ;;
346.48 +esac
346.49 +
346.50 +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore js.jks"
346.51 +JAR=$TESTJAVA${FS}bin${FS}jar
346.52 +JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner
346.53 +JAVAC=$TESTJAVA${FS}bin${FS}javac
346.54 +
346.55 +rm js.jks
346.56 +
346.57 +echo class A1 {} > A1.java
346.58 +echo class A2 {} > A2.java
346.59 +echo class A3 {} > A3.java
346.60 +echo class A4 {} > A4.java
346.61 +echo class A5 {} > A5.java
346.62 +echo class A6 {} > A6.java
346.63 +
346.64 +$JAVAC A1.java A2.java A3.java A4.java A5.java A6.java
346.65 +YEAR=`date +%Y`
346.66 +
346.67 +# ==========================================================
346.68 +# First part: output format
346.69 +# ==========================================================
346.70 +
346.71 +$KT -genkeypair -alias a1 -dname CN=a1 -validity 365
346.72 +$KT -genkeypair -alias a2 -dname CN=a2 -validity 365
346.73 +
346.74 +# a.jar includes 8 unsigned, 2 signed by a1 and a2, 2 signed by a3
346.75 +$JAR cvf a.jar A1.class A2.class
346.76 +$JARSIGNER -keystore js.jks -storepass changeit a.jar a1
346.77 +$JAR uvf a.jar A3.class A4.class
346.78 +$JARSIGNER -keystore js.jks -storepass changeit a.jar a2
346.79 +$JAR uvf a.jar A5.class A6.class
346.80 +
346.81 +# Verify OK
346.82 +$JARSIGNER -verify a.jar
346.83 +[ $? = 0 ] || exit $LINENO
346.84 +
346.85 +# 4(chainNotValidated)+16(hasUnsignedEntry)+32(aliasNotInStore)
346.86 +$JARSIGNER -verify a.jar -strict
346.87 +[ $? = 52 ] || exit $LINENO
346.88 +
346.89 +# 16(hasUnsignedEntry)
346.90 +$JARSIGNER -verify a.jar -strict -keystore js.jks
346.91 +[ $? = 16 ] || exit $LINENO
346.92 +
346.93 +# 16(hasUnsignedEntry)+32(notSignedByAlias)
346.94 +$JARSIGNER -verify a.jar a1 -strict -keystore js.jks
346.95 +[ $? = 48 ] || exit $LINENO
346.96 +
346.97 +# 16(hasUnsignedEntry)
346.98 +$JARSIGNER -verify a.jar a1 a2 -strict -keystore js.jks
346.99 +[ $? = 16 ] || exit $LINENO
346.100 +
346.101 +# 12 entries all together
346.102 +LINES=`$JARSIGNER -verify a.jar -verbose | grep $YEAR | wc -l`
346.103 +[ $LINES = 12 ] || exit $LINENO
346.104 +
346.105 +# 12 entries all listed
346.106 +LINES=`$JARSIGNER -verify a.jar -verbose:grouped | grep $YEAR | wc -l`
346.107 +[ $LINES = 12 ] || exit $LINENO
346.108 +
346.109 +# 3 groups: unrelated, signed, unsigned
346.110 +LINES=`$JARSIGNER -verify a.jar -verbose:summary | grep $YEAR | wc -l`
346.111 +[ $LINES = 3 ] || exit $LINENO
346.112 +
346.113 +# 4 groups: unrelated, signed by a1/a2, signed by a2, unsigned
346.114 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep $YEAR | wc -l`
346.115 +[ $LINES = 4 ] || exit $LINENO
346.116 +
346.117 +# 2*2 for A1/A2, 2 for A3/A4
346.118 +LINES=`$JARSIGNER -verify a.jar -verbose -certs | grep "\[certificate" | wc -l`
346.119 +[ $LINES = 6 ] || exit $LINENO
346.120 +
346.121 +# a1,a2 for A1/A2, a2 for A3/A4
346.122 +LINES=`$JARSIGNER -verify a.jar -verbose:grouped -certs | grep "\[certificate" | wc -l`
346.123 +[ $LINES = 3 ] || exit $LINENO
346.124 +
346.125 +# a1,a2 for A1/A2, a2 for A3/A4
346.126 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "\[certificate" | wc -l`
346.127 +[ $LINES = 3 ] || exit $LINENO
346.128 +
346.129 +# 4 groups
346.130 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "more)" | wc -l`
346.131 +[ $LINES = 4 ] || exit $LINENO
346.132 +
346.133 +# ==========================================================
346.134 +# Second part: exit code 2, 4, 8
346.135 +# 16 and 32 already covered in the first part
346.136 +# ==========================================================
346.137 +
346.138 +$KT -genkeypair -alias expiring -dname CN=expiring -startdate -1m
346.139 +$KT -genkeypair -alias expired -dname CN=expired -startdate -10m
346.140 +$KT -genkeypair -alias notyetvalid -dname CN=notyetvalid -startdate +1m
346.141 +$KT -genkeypair -alias badku -dname CN=badku -ext KU=cRLSign -validity 365
346.142 +$KT -genkeypair -alias badeku -dname CN=badeku -ext EKU=sa -validity 365
346.143 +$KT -genkeypair -alias goodku -dname CN=goodku -ext KU=dig -validity 365
346.144 +$KT -genkeypair -alias goodeku -dname CN=goodeku -ext EKU=codesign -validity 365
346.145 +
346.146 +# badchain signed by ca, but ca is removed later
346.147 +$KT -genkeypair -alias badchain -dname CN=badchain -validity 365
346.148 +$KT -genkeypair -alias ca -dname CN=ca -ext bc -validity 365
346.149 +$KT -certreq -alias badchain | $KT -gencert -alias ca -validity 365 | \
346.150 + $KT -importcert -alias badchain
346.151 +$KT -delete -alias ca
346.152 +
346.153 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expiring
346.154 +[ $? = 2 ] || exit $LINENO
346.155 +
346.156 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expired
346.157 +[ $? = 4 ] || exit $LINENO
346.158 +
346.159 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar notyetvalid
346.160 +[ $? = 4 ] || exit $LINENO
346.161 +
346.162 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badku
346.163 +[ $? = 8 ] || exit $LINENO
346.164 +
346.165 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badeku
346.166 +[ $? = 8 ] || exit $LINENO
346.167 +
346.168 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar goodku
346.169 +[ $? = 0 ] || exit $LINENO
346.170 +
346.171 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar goodeku
346.172 +[ $? = 0 ] || exit $LINENO
346.173 +
346.174 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badchain
346.175 +[ $? = 4 ] || exit $LINENO
346.176 +
346.177 +$JARSIGNER -verify a.jar
346.178 +[ $? = 0 ] || exit $LINENO
346.179 +
346.180 +# ==========================================================
346.181 +# Third part: -certchain test
346.182 +# ==========================================================
346.183 +
346.184 +# altchain signed by ca2, but ca2 is removed later
346.185 +$KT -genkeypair -alias altchain -dname CN=altchain -validity 365
346.186 +$KT -genkeypair -alias ca2 -dname CN=ca2 -ext bc -validity 365
346.187 +$KT -certreq -alias altchain | $KT -gencert -alias ca2 -validity 365 -rfc > certchain
346.188 +$KT -exportcert -alias ca2 -rfc >> certchain
346.189 +$KT -delete -alias ca2
346.190 +
346.191 +# Now altchain is still self-signed
346.192 +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar altchain
346.193 +[ $? = 0 ] || exit $LINENO
346.194 +
346.195 +# If -certchain is used, then it's bad
346.196 +$JARSIGNER -strict -keystore js.jks -storepass changeit -certchain certchain a.jar altchain
346.197 +[ $? = 4 ] || exit $LINENO
346.198 +
346.199 +$JARSIGNER -verify a.jar
346.200 +[ $? = 0 ] || exit $LINENO
346.201 +
346.202 +echo OK
346.203 +exit 0
347.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
347.2 +++ b/test/sun/security/tools/keytool/selfissued.sh Thu Apr 16 19:10:32 2009 -0700
347.3 @@ -0,0 +1,69 @@
347.4 +#
347.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
347.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
347.7 +#
347.8 +# This code is free software; you can redistribute it and/or modify it
347.9 +# under the terms of the GNU General Public License version 2 only, as
347.10 +# published by the Free Software Foundation.
347.11 +#
347.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
347.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
347.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
347.15 +# version 2 for more details (a copy is included in the LICENSE file that
347.16 +# accompanied this code).
347.17 +#
347.18 +# You should have received a copy of the GNU General Public License version
347.19 +# 2 along with this work; if not, write to the Free Software Foundation,
347.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
347.21 +#
347.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
347.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
347.24 +# have any questions.
347.25 +#
347.26 +
347.27 +# @test
347.28 +# @bug 6825352
347.29 +# @summary support self-issued certificate in keytool
347.30 +#
347.31 +# @run shell selfissued.sh
347.32 +#
347.33 +
347.34 +if [ "${TESTJAVA}" = "" ] ; then
347.35 + JAVAC_CMD=`which javac`
347.36 + TESTJAVA=`dirname $JAVAC_CMD`/..
347.37 +fi
347.38 +
347.39 +# set platform-dependent variables
347.40 +OS=`uname -s`
347.41 +case "$OS" in
347.42 + Windows_* )
347.43 + FS="\\"
347.44 + ;;
347.45 + * )
347.46 + FS="/"
347.47 + ;;
347.48 +esac
347.49 +
347.50 +KS=selfsigned.jks
347.51 +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS"
347.52 +
347.53 +rm $KS
347.54 +
347.55 +$KT -alias ca -dname CN=CA -genkeypair
347.56 +$KT -alias me -dname CN=CA -genkeypair
347.57 +$KT -alias e1 -dname CN=E1 -genkeypair
347.58 +$KT -alias e2 -dname CN=E2 -genkeypair
347.59 +
347.60 +# me signed by ca, self-issued
347.61 +$KT -alias me -certreq | $KT -alias ca -gencert | $KT -alias me -importcert
347.62 +
347.63 +# Import e1 signed by me, should add me and ca
347.64 +$KT -alias e1 -certreq | $KT -alias me -gencert | $KT -alias e1 -importcert
347.65 +$KT -alias e1 -list -v | grep '\[3\]' || { echo Bad E1; exit 1; }
347.66 +
347.67 +# Import (e2 signed by me,ca,me), should reorder to (e2,me,ca)
347.68 +( $KT -alias e2 -certreq | $KT -alias me -gencert; $KT -exportcert -alias ca; $KT -exportcert -alias me ) | $KT -alias e2 -importcert
347.69 +$KT -alias e2 -list -v | grep '\[3\]' || { echo Bad E2; exit 1; }
347.70 +
347.71 +echo Good
347.72 +