src/windows/native/sun/windows/awt_Frame.cpp
Print this page
*** 80,89 ****
--- 80,93 ----
struct BlockedThreadStruct {
int framesCount;
HHOOK mouseHook;
HHOOK modalHook;
};
+ // Struct for _SetLwFrameUnderMouse method
+ struct SetLwFrameUnderMouseStruct {
+ jobject frame;
+ };
/************************************************************************
* AwtFrame fields
*/
jfieldID AwtFrame::handleID;
*** 94,103 ****
--- 98,109 ----
jmethodID AwtFrame::activateEmbeddingTopLevelMID;
Hashtable AwtFrame::sm_BlockedThreads("AWTBlockedThreads");
+ AwtFrame* AwtFrame::sm_lwFrameUnderMouse = NULL;
+
/************************************************************************
* AwtFrame methods
*/
AwtFrame::AwtFrame() {
*** 1574,1583 ****
--- 1580,1615 ----
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,1930 ****
--- 1957,1976 ----
// 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" */