aboutsummaryrefslogtreecommitdiffstats
path: root/make/config/nativewindow/win32-CustomJavaCode.java
diff options
context:
space:
mode:
Diffstat (limited to 'make/config/nativewindow/win32-CustomJavaCode.java')
-rw-r--r--make/config/nativewindow/win32-CustomJavaCode.java58
1 files changed, 44 insertions, 14 deletions
diff --git a/make/config/nativewindow/win32-CustomJavaCode.java b/make/config/nativewindow/win32-CustomJavaCode.java
index 54a7fa53a..5d0c82998 100644
--- a/make/config/nativewindow/win32-CustomJavaCode.java
+++ b/make/config/nativewindow/win32-CustomJavaCode.java
@@ -1,28 +1,58 @@
- private static final long hInstance;
+ private static final boolean DEBUG = Debug.debug("GDI");
- static {
- NWJNILibLoader.loadNativeWindow("win32");
- hInstance = initIDs0();
- if( 0 == hInstance ) {
- throw new NativeWindowException("GDI: Could not initialized native stub");
+ private static final String dummyWindowClassNameBase = "_dummyWindow_clazz" ;
+ private static RegisteredClassFactory dummyWindowClassFactory;
+ private static boolean isInit = false;
+
+ private static native boolean initIDs0();
+ private static native long getDummyWndProc0();
+
+ public static synchronized void initSingleton(boolean firstX11ActionOnProcess) {
+ if(!isInit) {
+ NWJNILibLoader.loadNativeWindow("win32");
+
+ if( !initIDs0() ) {
+ throw new NativeWindowException("GDI: Could not initialized native stub");
+ }
+
+ if(DEBUG) {
+ System.out.println("GDI.isFirstX11ActionOnProcess: "+firstX11ActionOnProcess);
+ }
+
+ dummyWindowClassFactory = new RegisteredClassFactory(dummyWindowClassNameBase, getDummyWndProc0());
+ isInit = true;
}
}
- public static synchronized void initSingleton() {
- }
- private static native long initIDs0();
+ private static RegisteredClass dummyWindowClass = null;
+ private static Object dummyWindowSync = new Object();
- public static long getModuleHandle() {
- return hInstance;
+ public static long CreateDummyWindow(int x, int y, int width, int height) {
+ synchronized(dummyWindowSync) {
+ dummyWindowClass = dummyWindowClassFactory.getSharedClass();
+ return CreateDummyWindow0(dummyWindowClass.getHandle(), dummyWindowClass.getName(), dummyWindowClass.getName(), x, y, width, height);
+ }
}
- public static long CreateDummyWindow(int x, int y, int width, int height) {
- return CreateDummyWindow0(getModuleHandle(), x, y, width, height);
+ public static boolean DestroyDummyWindow(long hwnd) {
+ boolean res;
+ synchronized(dummyWindowSync) {
+ if( null == dummyWindowClass ) {
+ throw new InternalError("GDI Error ("+dummyWindowClassFactory.getSharedRefCount()+"): SharedClass is null");
+ }
+ res = DestroyWindow(hwnd);
+ dummyWindowClassFactory.releaseSharedClass();
+ }
+ return res;
}
public static Point GetRelativeLocation(long src_win, long dest_win, int src_x, int src_y) {
- return (Point) GetRelativeLocation0(src_win, dest_win, src_x, src_y);
+ return (Point) GetRelativeLocation0(src_win, dest_win, src_x, src_y);
}
private static native Object GetRelativeLocation0(long src_win, long dest_win, int src_x, int src_y);
+ public static native boolean CreateWindowClass(long hInstance, String clazzName, long wndProc);
+ public static native boolean DestroyWindowClass(long hInstance, String className);
+ static native long CreateDummyWindow0(long hInstance, String className, String windowName, int x, int y, int width, int height);
+