src/windows/native/sun/windows/awt_Window.cpp
Print this page
*** 146,155 ****
--- 146,160 ----
struct SetFullScreenExclusiveModeStateStruct {
jobject window;
jboolean isFSEMState;
};
+ // struct for _Ungrab() method
+ struct UngrabStruct {
+ jobject window;
+ jboolean doPost;
+ };
/************************************************************************
* AwtWindow fields
*/
*** 318,344 ****
}
void AwtWindow::_Ungrab(void * param) {
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
! jobject self = (jobject)param;
if (env->EnsureLocalCapacity(1) < 0)
{
env->DeleteGlobalRef(self);
return;
}
AwtWindow *p = NULL;
PDATA pData;
JNI_CHECK_PEER_GOTO(self, ret);
p = (AwtWindow *)pData;
! p->Ungrab(FALSE);
ret:
env->DeleteGlobalRef(self);
}
MsgRouting AwtWindow::WmNcMouseDown(WPARAM hitTest, int x, int y, int button) {
if (m_grabbedWindow != NULL && !m_grabbedWindow->IsOneOfOwnersOf(this)) {
m_grabbedWindow->Ungrab();
--- 323,353 ----
}
void AwtWindow::_Ungrab(void * param) {
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
! UngrabStruct* us = (UngrabStruct*)param;
! jobject self = us->window;
! jboolean doPost = us->doPost;
if (env->EnsureLocalCapacity(1) < 0)
{
env->DeleteGlobalRef(self);
+ delete us;
return;
}
AwtWindow *p = NULL;
PDATA pData;
JNI_CHECK_PEER_GOTO(self, ret);
p = (AwtWindow *)pData;
! p->Ungrab(doPost);
ret:
env->DeleteGlobalRef(self);
+ delete us;
}
MsgRouting AwtWindow::WmNcMouseDown(WPARAM hitTest, int x, int y, int button) {
if (m_grabbedWindow != NULL && !m_grabbedWindow->IsOneOfOwnersOf(this)) {
m_grabbedWindow->Ungrab();
*** 3505,3520 ****
CATCH_BAD_ALLOC;
}
JNIEXPORT void JNICALL
! Java_sun_awt_windows_WWindowPeer_nativeUngrab(JNIEnv *env, jobject self)
{
TRY;
! AwtToolkit::GetInstance().SyncCall(AwtWindow::_Ungrab, env->NewGlobalRef(self));
! // global ref is deleted in _Ungrab()
CATCH_BAD_ALLOC;
}
/*
--- 3514,3533 ----
CATCH_BAD_ALLOC;
}
JNIEXPORT void JNICALL
! Java_sun_awt_windows_WWindowPeer_nativeUngrab(JNIEnv *env, jobject self, jboolean doPost)
{
TRY;
! UngrabStruct *us = new UngrabStruct;
! us->window = env->NewGlobalRef(self);
! us->doPost = doPost;
!
! AwtToolkit::GetInstance().SyncCall(AwtWindow::_Ungrab, us);
! // global ref and us are deleted in _Ungrab()
CATCH_BAD_ALLOC;
}
/*