src/windows/native/sun/windows/awt_Frame.cpp
Print this page
@@ -80,10 +80,14 @@
struct BlockedThreadStruct {
int framesCount;
HHOOK mouseHook;
HHOOK modalHook;
};
+// Struct for _SetLwFrameUnderMouse method
+struct SetLwFrameUnderMouseStruct {
+ jobject frame;
+};
/************************************************************************
* AwtFrame fields
*/
jfieldID AwtFrame::handleID;
@@ -94,10 +98,12 @@
jmethodID AwtFrame::activateEmbeddingTopLevelMID;
Hashtable AwtFrame::sm_BlockedThreads("AWTBlockedThreads");
+AwtFrame* AwtFrame::sm_lwFrameUnderMouse = NULL;
+
/************************************************************************
* AwtFrame methods
*/
AwtFrame::AwtFrame() {
@@ -1574,10 +1580,36 @@
env->DeleteGlobalRef(blockerPeer);
delete nmbs;
}
+void AwtFrame::_SetLwFrameUnderMouse(void *param)
+{
+ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+
+ SetLwFrameUnderMouseStruct *sfums = (SetLwFrameUnderMouseStruct *)param;
+ jobject self = sfums->frame;
+
+ if (self == NULL) {
+ AwtFrame::sm_lwFrameUnderMouse = NULL;
+ } else {
+ AwtFrame *frame = NULL;
+
+ PDATA pData;
+ JNI_CHECK_PEER_GOTO(self, ret);
+ frame = (AwtFrame *)pData;
+ if (::IsWindow(frame->GetHWnd()))
+ {
+ AwtFrame::sm_lwFrameUnderMouse = frame;
+ }
+ }
+ret:
+ env->DeleteGlobalRef(self);
+
+ delete sfums;
+}
+
/************************************************************************
* WFramePeer native methods
*/
extern "C" {
@@ -1925,6 +1957,20 @@
// global ref and sas are deleted in _SynthesizeWmActivate()
CATCH_BAD_ALLOC;
}
+JNIEXPORT void JNICALL
+Java_sun_awt_windows_WLightweightFramePeer_setLWFrameUnderMouse(JNIEnv *env, jclass selfClass, jobject peer)
+{
+ TRY;
+
+ SetLwFrameUnderMouseStruct *sfums = new SetLwFrameUnderMouseStruct;
+ sfums->frame = env->NewGlobalRef(peer);
+
+ AwtToolkit::GetInstance().InvokeFunction(AwtFrame::_SetLwFrameUnderMouse, sfums);
+ // global ref and sfums are deleted in _SetLwFrameUnderMouse()
+
+ CATCH_BAD_ALLOC;
+}
+
} /* extern "C" */