< prev index next >
src/windows/native/sun/windows/awt_Scrollbar.cpp
Print this page
rev 12527 : 8165543: Better window framing
Reviewed-by: serb
@@ -36,11 +36,15 @@
struct SetValuesStruct {
jobject scrollbar;
jint value;
jint visible;
jint min, max;
-
+};
+// struct for _SetLineIncrement()/_SetPageIncrement() methods
+struct SetIncrementStruct {
+ jobject scrollbar;
+ jint increment;
};
/************************************************************************
* AwtScrollbar fields
*/
@@ -106,14 +110,13 @@
return NULL;
}
PDATA pData;
AwtCanvas* awtParent;
- JNI_CHECK_PEER_GOTO(parent, done);
+ JNI_CHECK_PEER_GOTO(parent, done);
awtParent = (AwtCanvas*)pData;
- JNI_CHECK_NULL_GOTO(awtParent, "null awtParent", done);
target = env->GetObjectField(peer, AwtObject::targetID);
JNI_CHECK_NULL_GOTO(target, "null target", done);
c = new AwtScrollbar();
@@ -469,10 +472,56 @@
env->DeleteGlobalRef(self);
delete svs;
}
+void AwtScrollbar::_SetLineIncrement(void *param)
+{
+ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+
+ SetIncrementStruct *sis = (SetIncrementStruct *)param;
+ jobject self = sis->scrollbar;
+ jint increment = sis->increment;
+
+ AwtScrollbar *sb = NULL;
+
+ PDATA pData;
+ JNI_CHECK_PEER_GOTO(self, ret);
+ sb = (AwtScrollbar *)pData;
+ if (::IsWindow(sb->GetHWnd()))
+ {
+ sb->SetLineIncrement(increment);
+ }
+ret:
+ env->DeleteGlobalRef(self);
+
+ delete sis;
+}
+
+void AwtScrollbar::_SetPageIncrement(void *param)
+{
+ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+
+ SetIncrementStruct *sis = (SetIncrementStruct *)param;
+ jobject self = sis->scrollbar;
+ jint increment = sis->increment;
+
+ AwtScrollbar *sb = NULL;
+
+ PDATA pData;
+ JNI_CHECK_PEER_GOTO(self, ret);
+ sb = (AwtScrollbar *)pData;
+ if (::IsWindow(sb->GetHWnd()))
+ {
+ sb->SetPageIncrement(increment);
+ }
+ret:
+ env->DeleteGlobalRef(self);
+
+ delete sis;
+}
+
/************************************************************************
* Scrollbar native methods
*/
extern "C" {
@@ -544,14 +593,16 @@
Java_sun_awt_windows_WScrollbarPeer_setLineIncrement(JNIEnv *env, jobject self,
jint increment)
{
TRY;
- PDATA pData;
- JNI_CHECK_PEER_RETURN(self);
- AwtScrollbar* c = (AwtScrollbar*)pData;
- c->SetLineIncrement(increment);
+ SetIncrementStruct *sis = new SetIncrementStruct;
+ sis->scrollbar = env->NewGlobalRef(self);
+ sis->increment = increment;
+
+ AwtToolkit::GetInstance().SyncCall(AwtScrollbar::_SetLineIncrement, sis);
+ // global ref and svs are deleted in _SetValues
CATCH_BAD_ALLOC;
}
/*
@@ -563,14 +614,16 @@
Java_sun_awt_windows_WScrollbarPeer_setPageIncrement(JNIEnv *env, jobject self,
jint increment)
{
TRY;
- PDATA pData;
- JNI_CHECK_PEER_RETURN(self);
- AwtScrollbar* c = (AwtScrollbar*)pData;
- c->SetPageIncrement(increment);
+ SetIncrementStruct *sis = new SetIncrementStruct;
+ sis->scrollbar = env->NewGlobalRef(self);
+ sis->increment = increment;
+
+ AwtToolkit::GetInstance().SyncCall(AwtScrollbar::_SetPageIncrement, sis);
+ // global ref and svs are deleted in _SetValues
CATCH_BAD_ALLOC;
}
/*
@@ -582,16 +635,13 @@
Java_sun_awt_windows_WScrollbarPeer_create(JNIEnv *env, jobject self,
jobject parent)
{
TRY;
- PDATA pData;
- JNI_CHECK_PEER_RETURN(parent);
AwtToolkit::CreateComponent(self, parent,
(AwtToolkit::ComponentFactory)
AwtScrollbar::Create);
- JNI_CHECK_PEER_CREATION_RETURN(self);
CATCH_BAD_ALLOC;
}
/*
< prev index next >