Index: /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/structs.c
===================================================================
--- /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/structs.c	(revision 122)
+++ /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/structs.c	(revision 123)
@@ -172,4 +172,6 @@
 ACCEL_FID_CACHE ACCELFc;
 ACCELTABLE_FID_CACHE ACCELTABLEFc;
+CURSORINFO_FID_CACHE CURSORINFOFc;
+POINTL_FID_CACHE POINTLFc;
 
 /*@@TODO (dmik): remove
@@ -1462,5 +1464,5 @@
 }
 
-/* ACCELTABLE struct */
+/***************************************** ACCELTABLE struct ***************************************/
 
 void cacheACCELTABLEFids(JNIEnv *env, jobject lpObject, PACCELTABLE_FID_CACHE lpCache)
@@ -1511,5 +1513,83 @@
 }
 
-/* FACENAMEDESC struct */
+/******************************************** CURSORINFO struct *************************************/
+
+void cacheCURSORINFOFids(JNIEnv *env, jobject lpObject, PCURSORINFO_FID_CACHE lpCache)
+{
+    if (lpCache->cached) return;
+    lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+    lpCache->hwnd = (*env)->GetFieldID(env, lpCache->clazz, "hwnd", "I");
+    lpCache->x = (*env)->GetFieldID(env, lpCache->clazz, "x", "I");
+    lpCache->y = (*env)->GetFieldID(env, lpCache->clazz, "y", "I");
+    lpCache->cx = (*env)->GetFieldID(env, lpCache->clazz, "cx", "I");
+    lpCache->cy = (*env)->GetFieldID(env, lpCache->clazz, "cy", "I");
+    lpCache->fs = (*env)->GetFieldID(env, lpCache->clazz, "fs", "I");
+    lpCache->rclClip = (*env)->GetFieldID(env, lpCache->clazz, "rclClip", "Lorg/eclipse/swt/internal/pm/RECTL;");
+    lpCache->cached = 1;
+}
+
+PCURSORINFO getCURSORINFOFields(JNIEnv *env, jobject lpObject, PCURSORINFO lpStruct, PCURSORINFO_FID_CACHE lpCache)
+{
+    if (!lpCache->cached) cacheCURSORINFOFids(env, lpObject, lpCache);
+    lpStruct->hwnd = (*env)->GetIntField(env, lpObject, lpCache->hwnd);
+    lpStruct->x = (*env)->GetIntField(env, lpObject, lpCache->x);
+    lpStruct->y = (*env)->GetIntField(env, lpObject, lpCache->y);
+    lpStruct->cx = (*env)->GetIntField(env, lpObject, lpCache->cx);
+    lpStruct->cy = (*env)->GetIntField(env, lpObject, lpCache->cy);
+    lpStruct->fs = (*env)->GetIntField(env, lpObject, lpCache->fs);
+    {
+        jobject prclClip = (*env)->GetObjectField(env, lpObject, lpCache->rclClip);
+        if (prclClip){
+		if(&(lpStruct->rclClip)){
+			getRECTLFields(env, prclClip, &(lpStruct->rclClip), &PGLOB(RECTLFc));
+		}
+	}
+    }    
+    return lpStruct;
+}
+
+void setCURSORINFOFields(JNIEnv *env, jobject lpObject, PCURSORINFO lpStruct, PCURSORINFO_FID_CACHE lpCache)
+{
+    if (!lpCache->cached) cacheCURSORINFOFids(env, lpObject, lpCache);
+    (*env)->SetIntField(env, lpObject, lpCache->hwnd, lpStruct->hwnd);
+    (*env)->SetIntField(env, lpObject, lpCache->x, lpStruct->x);
+    (*env)->SetIntField(env, lpObject, lpCache->y, lpStruct->y);
+    (*env)->SetIntField(env, lpObject, lpCache->cx, lpStruct->cx);
+    (*env)->SetIntField(env, lpObject, lpCache->cy, lpStruct->cy);
+    (*env)->SetIntField(env, lpObject, lpCache->fs, lpStruct->fs);
+    {
+        jobject prclClip = (*env)->GetObjectField(env, lpObject, lpCache->rclClip);
+        if (prclClip && &(lpStruct->rclClip))
+		setRECTLFields(env, prclClip, &(lpStruct->rclClip), &PGLOB(RECTLFc));
+    }
+}
+
+/***************************************** POINTL struct ***************************************/
+
+void cachePOINTLFids(JNIEnv *env, jobject lpObject, PPOINTL_FID_CACHE lpCache)
+{
+    if (lpCache->cached) return;
+    lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+    lpCache->x = (*env)->GetFieldID(env, lpCache->clazz, "x", "I");
+    lpCache->y = (*env)->GetFieldID(env, lpCache->clazz, "y", "I");
+    lpCache->cached = 1;
+}
+
+PPOINTL getPOINTLFields(JNIEnv *env, jobject lpObject, PPOINTL lpStruct, PPOINTL_FID_CACHE lpCache)
+{
+    if (!lpCache->cached) cachePOINTLFids(env, lpObject, lpCache);
+    lpStruct->x = (*env)->GetIntField(env, lpObject, lpCache->x);
+    lpStruct->y = (*env)->GetIntField(env, lpObject, lpCache->y);
+    return lpStruct;
+}
+
+void setPOINTLFields(JNIEnv *env, jobject lpObject, PPOINTL lpStruct, PPOINTL_FID_CACHE lpCache)
+{
+    if (!lpCache->cached) cachePOINTLFids(env, lpObject, lpCache);
+    (*env)->SetIntField(env, lpObject, lpCache->x, lpStruct->x);
+    (*env)->SetIntField(env, lpObject, lpCache->y, lpStruct->y);
+}
+
+/***************************************** FACENAMEDESC struct ********************************************/
 /*@@TODO (dmik): don't need, remove!
 void cacheFACENAMEDESCFids(JNIEnv *env, jobject lpObject, PFACENAMEDESC_FID_CACHE lpCache)
Index: /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/structs.h
===================================================================
--- /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/structs.h	(revision 122)
+++ /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/structs.h	(revision 123)
@@ -1,5 +1,5 @@
 /*
  * OS/2 version.
- * Copyright (c) 2002, 2004 EclipseOS2 Team.
+ * Copyright (c) 2002, 2008 EclipseOS2 Team.
  */
 
@@ -533,4 +533,38 @@
 void setACCELTABLEFields(JNIEnv *env, jobject lpObject, PACCELTABLE lpStruct, PACCELTABLE_FID_CACHE lpCache);
 
+/* CURSORINFO struct */
+typedef struct CURSORINFO_FID_CACHE {
+    int cached;
+    jclass clazz;
+    jfieldID
+        hwnd,     
+        x,        
+        y,        
+        cx,       
+        cy,       
+        fs,     
+        rclClip;
+} CURSORINFO_FID_CACHE;
+typedef CURSORINFO_FID_CACHE *PCURSORINFO_FID_CACHE;
+
+void cacheCURSORINFOFids(JNIEnv *env, jobject lpObject, PCURSORINFO_FID_CACHE lpCache);
+PCURSORINFO getCURSORINFOFields(JNIEnv *env, jobject lpObject, PCURSORINFO lpStruct, PCURSORINFO_FID_CACHE lpCache);
+void setCURSORINFOFields(JNIEnv *env, jobject lpObject, PCURSORINFO lpStruct, PCURSORINFO_FID_CACHE lpCache);
+
+/* POINTL struct */
+typedef struct POINTL_FID_CACHE {
+    int cached;
+    jclass clazz;
+    jfieldID
+        x,        
+        y;        
+} POINTL_FID_CACHE;
+typedef POINTL_FID_CACHE *PPOINTL_FID_CACHE;
+
+void cachePOINTLFids(JNIEnv *env, jobject lpObject, PPOINTL_FID_CACHE lpCache);
+PPOINTL getPOINTLFields(JNIEnv *env, jobject lpObject, PPOINTL lpStruct, PPOINTL_FID_CACHE lpCache);
+void setPOINTLFields(JNIEnv *env, jobject lpObject, PPOINTL lpStruct, PPOINTL_FID_CACHE lpCache);
+
+
 /* FACENAMEDESC struct */
 /*@@TODO (dmik): remove!
@@ -576,4 +610,6 @@
 extern ACCEL_FID_CACHE ACCELFc;
 extern ACCELTABLE_FID_CACHE ACCELTABLEFc;
+extern CURSORINFO_FID_CACHE CURSORINFOFc;
+extern POINTL_FID_CACHE POINTLFc;
 /*@@TODO (dmik): remove! 
 extern FACENAMEDESC_FID_CACHE FACENAMEDESCFc;
Index: /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/swt.c
===================================================================
--- /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/swt.c	(revision 122)
+++ /trunk/src/plugins/org.eclipse.swt/Eclipse SWT PI/pm/library/swt.c	(revision 123)
@@ -1493,5 +1493,35 @@
     return rc;
 }
-
+JNIEXPORT jint JNICALL Java_org_eclipse_swt_internal_pm_OS_WinQueryCursorInfo
+        (JNIEnv *env, jclass that, jint hwndDeskTop, jobject pcsriCursorInfo)
+{
+    CURSORINFO c_pcsriCursorInfo, *c_ppcsriCursorInfo = NULL;
+    jboolean rc;
+    DEBUG_CALL("WinQueryCursorInfo\n")
+
+    if (pcsriCursorInfo) c_ppcsriCursorInfo = getCURSORINFOFields(env, pcsriCursorInfo, &c_pcsriCursorInfo, &PGLOB(CURSORINFOFc));
+
+    rc = (jboolean)WinQueryCursorInfo((HWND)hwndDeskTop, c_ppcsriCursorInfo);
+
+    if (pcsriCursorInfo) setCURSORINFOFields(env, pcsriCursorInfo, c_ppcsriCursorInfo, &PGLOB(CURSORINFOFc));
+
+    return rc;
+}
+JNIEXPORT jboolean JNICALL Java_org_eclipse_swt_internal_pm_OS_WinWindowFromPoint
+        (JNIEnv *env, jclass that, jint hab, jint hwndParent, jobject pptlPoint, jboolean fEnumChildren)
+{
+    POINTL c_pptlPoint, *c_ppptlPoint = NULL;
+    jint rc;
+    DEBUG_CALL("WinWindowFromPoint\n")
+
+    if (pptlPoint) c_ppptlPoint = getPOINTLFields(env, pptlPoint, &c_pptlPoint, &PGLOB(POINTLFc));
+
+    rc = (jint)WinWindowFromPoint((HWND)hwndParent, c_ppptlPoint, fEnumChildren);
+
+    if (pptlPoint) setPOINTLFields(env, pptlPoint, c_ppptlPoint, &PGLOB(POINTLFc));
+
+    return rc;
+
+}
 JNIEXPORT jboolean JNICALL Java_org_eclipse_swt_internal_pm_OS_PrfQueryProfileSize
         (JNIEnv *env, jclass that, jint hini, jobject pszApp, jobject pszKey,
