< prev index next >
src/java.desktop/windows/native/libawt/windows/awt_FileDialog.cpp
Print this page
@@ -105,10 +105,13 @@
jobject peer = (jobject)(::GetProp(hWnd, ModalDialogPeerProp));
env->CallVoidMethod(peer, AwtFileDialog::setHWndMID, (jlong)0);
}
break;
}
+ case WM_SETICON: {
+ return 0;
+ }
}
WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp));
return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam);
}
@@ -138,10 +141,15 @@
jobject awtParent = env->GetObjectField(peer, AwtFileDialog::parentID);
if (awtParent == NULL) {
::SendMessage(parent, WM_SETICON, (WPARAM)ICON_BIG,
(LPARAM)AwtToolkit::GetInstance().GetAwtIcon());
} else {
+ AwtWindow *awtWindow = (AwtWindow *)JNI_GET_PDATA(awtParent);
+ ::SendMessage(parent, WM_SETICON, (WPARAM)ICON_BIG,
+ (LPARAM)(awtWindow->GetHIcon()));
+ ::SendMessage(parent, WM_SETICON, (WPARAM)ICON_SMALL,
+ (LPARAM)(awtWindow->GetHIconSm()));
env->DeleteLocalRef(awtParent);
}
// subclass dialog's parent to receive additional messages
WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(parent,
@@ -642,6 +650,74 @@
// global ref is deleted in _ToBack
CATCH_BAD_ALLOC;
}
+int ScaleDownX(int x, HWND hwnd) {
+ int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(hwnd);
+ Devices::InstanceAccess devices;
+ AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
+ return device == NULL ? x : device->ScaleDownX(x);
+}
+
+int ScaleDownY(int y, HWND hwnd) {
+ int screen = AwtWin32GraphicsDevice::DeviceIndexForWindow(hwnd);
+ Devices::InstanceAccess devices;
+ AwtWin32GraphicsDevice* device = devices->GetDevice(screen);
+ return device == NULL ? y : device->ScaleDownY(y);
+}
+
+jobject AwtFileDialog::_GetLocationOnScreen(void *param)
+{
+ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+
+ jobject result = NULL;
+ HWND hwnd = (HWND)env->GetLongField((jobject)param, AwtComponent::hwndID);
+
+ if (::IsWindow(hwnd))
+ {
+ RECT rect;
+ VERIFY(::GetWindowRect(hwnd, &rect));
+ result = JNU_NewObjectByName(env, "java/awt/Point", "(II)V",
+ ScaleDownX(rect.left, hwnd), ScaleDownY(rect.top, hwnd));
+ }
+
+ if (result != NULL)
+ {
+ jobject resultRef = env->NewGlobalRef(result);
+ env->DeleteLocalRef(result);
+ return resultRef;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+/*
+ * Class: sun_awt_windows_WFileDialogPeer
+ * Method: getLocationOnScreen
+ * Signature: ()Ljava/awt/Point;
+ */
+JNIEXPORT jobject JNICALL
+Java_sun_awt_windows_WFileDialogPeer_getLocationOnScreen(JNIEnv *env,
+ jobject peer) {
+ TRY;
+
+ jobject peerRef = env->NewGlobalRef(peer);
+ jobject resultRef = (jobject)AwtToolkit::GetInstance().SyncCall(
+ (void*(*)(void*))AwtFileDialog::_GetLocationOnScreen, (void *)peerRef);
+ env->DeleteLocalRef(peerRef);
+
+ if (resultRef != NULL)
+ {
+ jobject result = env->NewLocalRef(resultRef);
+ env->DeleteGlobalRef(resultRef);
+ return result;
+ }
+
+ return NULL;
+
+ CATCH_BAD_ALLOC_RET(NULL);
+}
+
} /* extern "C" */
< prev index next >