diff options
5 files changed, 138 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties index 73a219de8d..b0e1e5b1a6 100644 --- a/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties +++ b/bundles/org.eclipse.swt.tools/JNI Generation/org/eclipse/swt/tools/internal/org.eclipse.swt.internal.win32.OS.properties @@ -4460,8 +4460,12 @@ SHFILEINFO_iIcon= SHFILEINFO_dwAttributes= org_eclipse_swt_internal_win32_SHFILEINFOA= +SHFILEINFOA_szDisplayName= +SHFILEINFOA_szTypeName= org_eclipse_swt_internal_win32_SHFILEINFOW= +SHFILEINFOW_szDisplayName= +SHFILEINFOW_szTypeName= org_eclipse_swt_internal_win32_SHMENUBARINFO= SHMENUBARINFO_cbSize= diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c index 5187c3ab1f..ae44828cb9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.c @@ -5268,6 +5268,112 @@ void setSHFILEINFOFields(JNIEnv *env, jobject lpObject, SHFILEINFO *lpStruct) } #endif +#ifndef NO_SHFILEINFOA +typedef struct SHFILEINFOA_FID_CACHE { + int cached; + jclass clazz; + jfieldID szDisplayName, szTypeName; +} SHFILEINFOA_FID_CACHE; + +SHFILEINFOA_FID_CACHE SHFILEINFOAFc; + +void cacheSHFILEINFOAFields(JNIEnv *env, jobject lpObject) +{ + if (SHFILEINFOAFc.cached) return; + cacheSHFILEINFOFields(env, lpObject); + SHFILEINFOAFc.clazz = (*env)->GetObjectClass(env, lpObject); + SHFILEINFOAFc.szDisplayName = (*env)->GetFieldID(env, SHFILEINFOAFc.clazz, "szDisplayName", "[B"); + SHFILEINFOAFc.szTypeName = (*env)->GetFieldID(env, SHFILEINFOAFc.clazz, "szTypeName", "[B"); + SHFILEINFOAFc.cached = 1; +} + +SHFILEINFOA *getSHFILEINFOAFields(JNIEnv *env, jobject lpObject, SHFILEINFOA *lpStruct) +{ + if (!SHFILEINFOAFc.cached) cacheSHFILEINFOAFields(env, lpObject); + lpStruct->hIcon = (HICON)(*env)->GetIntField(env, lpObject, SHFILEINFOFc.hIcon); + lpStruct->iIcon = (*env)->GetIntField(env, lpObject, SHFILEINFOFc.iIcon); + lpStruct->dwAttributes = (*env)->GetIntField(env, lpObject, SHFILEINFOFc.dwAttributes); + { + jbyteArray lpObject1 = (jbyteArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOAFc.szDisplayName); + (*env)->GetByteArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szDisplayName), (jbyte *)lpStruct->szDisplayName); + } + { + jbyteArray lpObject1 = (jbyteArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOAFc.szTypeName); + (*env)->GetByteArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szTypeName), (jbyte *)lpStruct->szTypeName); + } + return lpStruct; +} + +void setSHFILEINFOAFields(JNIEnv *env, jobject lpObject, SHFILEINFOA *lpStruct) +{ + if (!SHFILEINFOAFc.cached) cacheSHFILEINFOAFields(env, lpObject); + (*env)->SetIntField(env, lpObject, SHFILEINFOFc.hIcon, (jint)lpStruct->hIcon); + (*env)->SetIntField(env, lpObject, SHFILEINFOFc.iIcon, (jint)lpStruct->iIcon); + (*env)->SetIntField(env, lpObject, SHFILEINFOFc.dwAttributes, (jint)lpStruct->dwAttributes); + { + jbyteArray lpObject1 = (jbyteArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOAFc.szDisplayName); + (*env)->SetByteArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szDisplayName), (jbyte *)lpStruct->szDisplayName); + } + { + jbyteArray lpObject1 = (jbyteArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOAFc.szTypeName); + (*env)->SetByteArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szTypeName), (jbyte *)lpStruct->szTypeName); + } +} +#endif + +#ifndef NO_SHFILEINFOW +typedef struct SHFILEINFOW_FID_CACHE { + int cached; + jclass clazz; + jfieldID szDisplayName, szTypeName; +} SHFILEINFOW_FID_CACHE; + +SHFILEINFOW_FID_CACHE SHFILEINFOWFc; + +void cacheSHFILEINFOWFields(JNIEnv *env, jobject lpObject) +{ + if (SHFILEINFOWFc.cached) return; + cacheSHFILEINFOFields(env, lpObject); + SHFILEINFOWFc.clazz = (*env)->GetObjectClass(env, lpObject); + SHFILEINFOWFc.szDisplayName = (*env)->GetFieldID(env, SHFILEINFOWFc.clazz, "szDisplayName", "[C"); + SHFILEINFOWFc.szTypeName = (*env)->GetFieldID(env, SHFILEINFOWFc.clazz, "szTypeName", "[C"); + SHFILEINFOWFc.cached = 1; +} + +SHFILEINFOW *getSHFILEINFOWFields(JNIEnv *env, jobject lpObject, SHFILEINFOW *lpStruct) +{ + if (!SHFILEINFOWFc.cached) cacheSHFILEINFOWFields(env, lpObject); + lpStruct->hIcon = (HICON)(*env)->GetIntField(env, lpObject, SHFILEINFOFc.hIcon); + lpStruct->iIcon = (*env)->GetIntField(env, lpObject, SHFILEINFOFc.iIcon); + lpStruct->dwAttributes = (*env)->GetIntField(env, lpObject, SHFILEINFOFc.dwAttributes); + { + jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOWFc.szDisplayName); + (*env)->GetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szDisplayName) / 2, (jchar *)lpStruct->szDisplayName); + } + { + jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOWFc.szTypeName); + (*env)->GetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szTypeName) / 2, (jchar *)lpStruct->szTypeName); + } + return lpStruct; +} + +void setSHFILEINFOWFields(JNIEnv *env, jobject lpObject, SHFILEINFOW *lpStruct) +{ + if (!SHFILEINFOWFc.cached) cacheSHFILEINFOWFields(env, lpObject); + (*env)->SetIntField(env, lpObject, SHFILEINFOFc.hIcon, (jint)lpStruct->hIcon); + (*env)->SetIntField(env, lpObject, SHFILEINFOFc.iIcon, (jint)lpStruct->iIcon); + (*env)->SetIntField(env, lpObject, SHFILEINFOFc.dwAttributes, (jint)lpStruct->dwAttributes); + { + jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOWFc.szDisplayName); + (*env)->SetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szDisplayName) / 2, (jchar *)lpStruct->szDisplayName); + } + { + jcharArray lpObject1 = (jcharArray)(*env)->GetObjectField(env, lpObject, SHFILEINFOWFc.szTypeName); + (*env)->SetCharArrayRegion(env, lpObject1, 0, sizeof(lpStruct->szTypeName) / 2, (jchar *)lpStruct->szTypeName); + } +} +#endif + #ifndef NO_SHMENUBARINFO typedef struct SHMENUBARINFO_FID_CACHE { int cached; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h index 49b4d92d31..cce2b214a2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/library/os_structs.h @@ -1187,6 +1187,30 @@ void setSHFILEINFOFields(JNIEnv *env, jobject lpObject, SHFILEINFO *lpStruct); #define SHFILEINFO_sizeof() 0 #endif +#ifndef NO_SHFILEINFOA +void cacheSHFILEINFOAFields(JNIEnv *env, jobject lpObject); +SHFILEINFOA *getSHFILEINFOAFields(JNIEnv *env, jobject lpObject, SHFILEINFOA *lpStruct); +void setSHFILEINFOAFields(JNIEnv *env, jobject lpObject, SHFILEINFOA *lpStruct); +#define SHFILEINFOA_sizeof() sizeof(SHFILEINFOA) +#else +#define cacheSHFILEINFOAFields(a,b) +#define getSHFILEINFOAFields(a,b,c) NULL +#define setSHFILEINFOAFields(a,b,c) +#define SHFILEINFOA_sizeof() 0 +#endif + +#ifndef NO_SHFILEINFOW +void cacheSHFILEINFOWFields(JNIEnv *env, jobject lpObject); +SHFILEINFOW *getSHFILEINFOWFields(JNIEnv *env, jobject lpObject, SHFILEINFOW *lpStruct); +void setSHFILEINFOWFields(JNIEnv *env, jobject lpObject, SHFILEINFOW *lpStruct); +#define SHFILEINFOW_sizeof() sizeof(SHFILEINFOW) +#else +#define cacheSHFILEINFOWFields(a,b) +#define getSHFILEINFOWFields(a,b,c) NULL +#define setSHFILEINFOWFields(a,b,c) +#define SHFILEINFOW_sizeof() 0 +#endif + #ifndef NO_SHMENUBARINFO void cacheSHMENUBARINFOFields(JNIEnv *env, jobject lpObject); SHMENUBARINFO *getSHMENUBARINFOFields(JNIEnv *env, jobject lpObject, SHMENUBARINFO *lpStruct); diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java index 110e79daee..e79376b4e6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOA.java @@ -11,7 +11,7 @@ package org.eclipse.swt.internal.win32; public class SHFILEINFOA extends SHFILEINFO { - byte [] szDisplayName = new byte [OS.MAX_PATH]; - byte [] szTypeName = new byte [80]; + public byte [] szDisplayName = new byte [OS.MAX_PATH]; + public byte [] szTypeName = new byte [80]; public static int sizeof = 352; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java index 20e44c9524..b8b7c21ce5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/win32/org/eclipse/swt/internal/win32/SHFILEINFOW.java @@ -11,7 +11,7 @@ package org.eclipse.swt.internal.win32; public class SHFILEINFOW extends SHFILEINFO { - char [] szDisplayName = new char [OS.MAX_PATH]; - char [] szTypeName = new char [80]; + public char [] szDisplayName = new char [OS.MAX_PATH]; + public char [] szTypeName = new char [80]; public static int sizeof = 692; } |