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" */