/* * Class: sun_awt_windows_WCheckboxPeer * Method: setLabel * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WCheckboxPeer_setLabel(JNIEnv *env, jobject self, jstring label) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtComponent* c = (AwtComponent*)JNI_GET_PDATA(self); LPCTSTR labelStr; // Fix for 4378378: by convention null label means empty string if (label == NULL) { labelStr = TEXT(""); } else { labelStr = JNU_GetStringPlatformChars(env, label, JNI_FALSE); } if (labelStr == NULL) { throw std::bad_alloc(); } c->SetText(labelStr); c->VerifyState(); // Fix for 4378378: release StringPlatformChars only if label is not null if (label != NULL) { JNU_ReleaseStringPlatformChars(env, label, labelStr); } CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WCheckboxPeer * Method: setState * Signature: (Z)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WCheckboxPeer_setState(JNIEnv *env, jobject self, jboolean state) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtComponent* c = (AwtComponent*)JNI_GET_PDATA(self); /* * when multifont and group checkbox receive setState native * method, it must be redraw to display correct check mark */ jobject target = env->GetObjectField(self, AwtObject::targetID); jobject group = env->GetObjectField(target, AwtCheckbox::groupID); if (group != NULL) { HWND hWnd = c->GetHWnd(); RECT rect; VERIFY(::GetWindowRect(hWnd,&rect)); VERIFY(::ScreenToClient(hWnd, (LPPOINT)&rect)); VERIFY(::ScreenToClient(hWnd, ((LPPOINT)&rect)+1)); VERIFY(::InvalidateRect(hWnd,&rect,TRUE)); VERIFY(::UpdateWindow(hWnd)); } else { c->SendMessage(BM_SETCHECK, (WPARAM)(state ? BST_CHECKED : BST_UNCHECKED)); VERIFY(::InvalidateRect(c->GetHWnd(), NULL, FALSE)); } c->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: java_awt_AWTEvent * Method: nativeSetSource * Signature: (Ljava/awt/peer/ComponentPeer;)V */ JNIEXPORT void JNICALL Java_java_awt_AWTEvent_nativeSetSource (JNIEnv *env, jobject self, jobject newSource) { TRY; JNI_CHECK_NULL_RETURN(self, "null AWTEvent"); MSG *pMsg; jbyteArray bdata = (jbyteArray) env->GetObjectField(self, AwtAWTEvent::bdataID); if (bdata != NULL) { jboolean dummy; PDATA pData; JNI_CHECK_PEER_RETURN(newSource); AwtComponent *p = (AwtComponent *)pData; HWND hwnd = p->GetHWnd(); pMsg = (MSG *)env->GetPrimitiveArrayCritical(bdata, &dummy); if (pMsg == NULL) { throw std::bad_alloc(); } pMsg->hwnd = hwnd; env->ReleasePrimitiveArrayCritical(bdata, (void *)pMsg, 0); } CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WChoicePeer * Method: addItems * Signature: ([Ljava/lang/String;I)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WChoicePeer_addItems(JNIEnv *env, jobject self, jobjectArray items, jint index) { TRY; JNI_CHECK_NULL_RETURN(items, "null items"); PDATA pData; jsize i; JNI_CHECK_PEER_RETURN(self); AwtChoice* c = (AwtChoice*)pData; int itemCount = env->GetArrayLength(items); if (itemCount > 0) { c->SendMessage(WM_SETREDRAW, (WPARAM)FALSE, 0); for (i=0; i<itemCount; i++) { jstring item = (jstring)env->GetObjectArrayElement(items, i); JNI_CHECK_NULL_RETURN(item, "null item"); c->SendMessage(CB_INSERTSTRING, index+i, JavaStringBuffer(env, item)); env->DeleteLocalRef(item); } c->SendMessage(WM_SETREDRAW, (WPARAM)TRUE, 0); InvalidateRect(c->GetHWnd(), NULL, TRUE); c->ResetDropDownHeight(); c->VerifyState(); } CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WMenuBarPeer * Method: delMenu * Signature: (I)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WMenuBarPeer_delMenu(JNIEnv *env, jobject self, jint index) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtObject::WinThreadExec(self, AwtMenuBar::MENUBAR_DELITEM, (LPARAM)index); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WComponentPeer * Method: handleEvent * Signature: (Lsun/awt/windows/WComponentPeer;Ljava/awt/AWTEvent;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WInputMethod_handleNativeIMEEvent(JNIEnv *env, jobject self, jobject peer, jobject event) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(peer); AwtComponent* p = (AwtComponent *)pData; JNI_CHECK_NULL_RETURN(event, "null AWTEvent"); if (env->EnsureLocalCapacity(1) < 0) { return; } jbyteArray bdata = (jbyteArray)(env)->GetObjectField(event, AwtAWTEvent::bdataID); if (bdata == 0) { return; } MSG msg; (env)->GetByteArrayRegion(bdata, 0, sizeof(MSG), (jbyte *)&msg); (env)->DeleteLocalRef(bdata); BOOL isConsumed = (BOOL)(env)->GetBooleanField(event, AwtAWTEvent::consumedID); int id = (env)->GetIntField(event, AwtAWTEvent::idID); DASSERT(!safe_ExceptionOccurred(env)); if (isConsumed || p==NULL) return; if (id >= java_awt_event_InputMethodEvent_INPUT_METHOD_FIRST && id <= java_awt_event_InputMethodEvent_INPUT_METHOD_LAST) { long modifiers = p->GetJavaModifiers(); if (msg.message==WM_CHAR || msg.message==WM_SYSCHAR) { WCHAR unicodeChar = L'\0'; unicodeChar = (WCHAR)msg.wParam; p->SendKeyEvent(java_awt_event_KeyEvent_KEY_TYPED, 0, //to be fixed nowMillis(), java_awt_event_KeyEvent_CHAR_UNDEFINED, unicodeChar, modifiers, java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0, &msg); } else { MSG* pCopiedMsg = new MSG; *pCopiedMsg = msg; p->SendMessage(WM_AWT_HANDLE_EVENT, (WPARAM) FALSE, (LPARAM) pCopiedMsg); } (env)->SetBooleanField(event, AwtAWTEvent::consumedID, JNI_TRUE); } CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WCheckboxMenuItemPeer * Method: setState * Signature: (Z)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WCheckboxMenuItemPeer_setState(JNIEnv *env, jobject self, jboolean on) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtObject::WinThreadExec(self, AwtMenuItem::MENUITEM_SETSTATE, (LPARAM)on); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WScrollbarPeer * Method: setPageIncrement * Signature: (I)V */ JNIEXPORT void JNICALL 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); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WChoicePeer * Method: select * Signature: (I)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WChoicePeer_select(JNIEnv *env, jobject self, jint index) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtChoice* c = (AwtChoice*)pData; c->SendMessage(CB_SETCURSEL, index); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WScrollbarPeer * Method: setValues * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WScrollbarPeer_setValues(JNIEnv *env, jobject self, jint value, jint visible, jint minimum, jint maximum) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtScrollbar* c = (AwtScrollbar*)pData; c->SetValues(value, visible, minimum, maximum); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WChoicePeer * Method: removeAll * Signature: ()V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WChoicePeer_removeAll(JNIEnv *env, jobject self) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtChoice* c = (AwtChoice *)pData; c->SendMessage(CB_RESETCONTENT, 0, 0); c->ResetDropDownHeight(); c->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WListPeer * Method: create * Signature: (Lsun/awt/windows/WComponentPeer;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WListPeer_create(JNIEnv *env, jobject self, jobject parent) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(parent); AwtToolkit::CreateComponent(self, parent, (AwtToolkit::ComponentFactory)AwtList::Create); JNI_CHECK_PEER_CREATION_RETURN(self); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WScrollPanePeer * Method: setInsets * Signature: ()V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WScrollPanePeer_setInsets(JNIEnv *env, jobject self) { TRY DTRACE_PRINTLN1("%x: WScrollPanePeer.setInsets()", self); PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtScrollPane* pane = (AwtScrollPane *)pData; pane->SetInsets(env); pane->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WChoicePeer * Method: reshape * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WChoicePeer_reshape(JNIEnv *env, jobject self, jint x, jint y, jint width, jint height) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtChoice* c = (AwtChoice *)pData; c->Reshape(x, y, width, height); c->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WChoicePeer * Method: remove * Signature: (I)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WChoicePeer_remove(JNIEnv *env, jobject self, jint index) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtChoice* c = (AwtChoice *)pData; c->SendMessage(CB_DELETESTRING, index, 0); c->ResetDropDownHeight(); c->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WScrollPanePeer * Method: setScrollPosition * Signature: (II)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WScrollPanePeer_setScrollPosition(JNIEnv *env, jobject self, jint x, jint y) { TRY; DTRACE_PRINTLN3("%x: WScrollPanePeer.setScrollPosition(%d, %d)", self, x, y); PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtScrollPane* pane = (AwtScrollPane *)pData; pane->SetScrollPos(SB_HORZ, x); pane->SetScrollPos(SB_VERT, y); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WTextFieldPeer * Method: setEchoCharacter * Signature: (C)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WTextFieldPeer_setEchoCharacter(JNIEnv *env, jobject self, jchar ch) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtComponent* c = (AwtComponent*)pData; c->SendMessage(EM_SETPASSWORDCHAR, ch); /* * Fix for BugTraq ID 4307281. * Force redraw so that changes will take effect. */ VERIFY(::InvalidateRect(c->GetHWnd(), NULL, FALSE)); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WScrollPanePeer * Method: create * Signature: (Lsun/awt/windows/WComponentPeer;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WScrollPanePeer_create(JNIEnv *env, jobject self, jobject parent) { TRY; DTRACE_PRINTLN2("%x: WScrollPanePeer.create(%x)", self, parent); PDATA pData; JNI_CHECK_PEER_RETURN(parent); AwtToolkit::CreateComponent(self, parent, (AwtToolkit::ComponentFactory) AwtScrollPane::Create); JNI_CHECK_PEER_CREATION_RETURN(self); ((AwtScrollPane*)pData)->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WListPeer * Method: deselect * Signature: (I)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WListPeer_deselect(JNIEnv *env, jobject self, jint pos) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); SelectElementStruct *ses = new SelectElementStruct; ses->list = env->NewGlobalRef(self); ses->index = pos; AwtToolkit::GetInstance().SyncCall(AwtList::_Deselect, ses); // global ref and ses are deleted in _Deselect CATCH_BAD_ALLOC; }
void AwtScrollPane::VerifyState() { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); if (env->EnsureLocalCapacity(3) < 0) { return; } if (AwtToolkit::GetInstance().VerifyComponents() == FALSE) { return; } if (m_callbacksEnabled == FALSE) { /* Component is not fully setup yet. */ return; } AwtComponent::VerifyState(); jobject target = AwtObject::GetTarget(env); jobject child = JNU_CallMethodByName(env, NULL, GetPeer(env), "getScrollSchild", "()Ljava/awt/Component;").l; DASSERT(!safe_ExceptionOccurred(env)); if (child != NULL) { jobject childPeer = (env)->GetObjectField(child, AwtComponent::peerID); PDATA pData; JNI_CHECK_PEER_RETURN(childPeer); AwtComponent* awtChild = (AwtComponent *)pData; /* Verify child window is positioned correctly. */ RECT rect, childRect; ::GetClientRect(GetHWnd(), &rect); ::MapWindowPoints(GetHWnd(), 0, (LPPOINT)&rect, 2); ::GetWindowRect(awtChild->GetHWnd(), &childRect); DASSERT(childRect.left <= rect.left && childRect.top <= rect.top); env->DeleteLocalRef(childPeer); } env->DeleteLocalRef(target); env->DeleteLocalRef(child); }
/* * Class: sun_awt_windows_WScrollPanePeer * Method: setSpans * Signature: (IIII)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WScrollPanePeer_setSpans(JNIEnv *env, jobject self, jint parentWidth, jint parentHeight, jint childWidth, jint childHeight) { TRY; DTRACE_PRINTLN5("%x: WScrollPanePeer.setSpans(%d, %d, %d, %d)", self, parentWidth, parentHeight, childWidth, childHeight); PDATA pData; JNI_CHECK_PEER_RETURN(self); AwtScrollPane* pane = (AwtScrollPane *)pData; pane->RecalcSizes(parentWidth, parentHeight, childWidth, childHeight); pane->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WCheckboxPeer * Method: create * Signature: (Lsun/awt/windows/WComponentPeer;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WCheckboxPeer_create(JNIEnv *env, jobject self, jobject parent) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(parent); AwtToolkit::CreateComponent(self, parent, (AwtToolkit::ComponentFactory) AwtCheckbox::Create); JNI_CHECK_PEER_CREATION_RETURN(self); #ifdef DEBUG ((AwtComponent*)JNI_GET_PDATA(self))->VerifyState(); #endif CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WCheckboxPeer * Method: setCheckboxGroup * Signature: (Ljava/awt/CheckboxGroup;)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WCheckboxPeer_setCheckboxGroup(JNIEnv *env, jobject self, jobject group) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(self); /* REMIND #ifdef DEBUG if (group != NULL) { DASSERT(IsInstanceOf((HObject*)group, "java/awt/CheckboxGroup")); } #endif */ AwtComponent* c = (AwtComponent*)JNI_GET_PDATA(self); c->SendMessage(BM_SETSTYLE, (WPARAM)BS_OWNERDRAW, (LPARAM)TRUE); c->VerifyState(); CATCH_BAD_ALLOC; }
/* * Class: sun_awt_windows_WInputMethod * Method: openCandidateWindow * Signature: (Lsun/awt/windows/WComponentPeer;II)V */ JNIEXPORT void JNICALL Java_sun_awt_windows_WInputMethod_openCandidateWindow (JNIEnv *env, jobject self, jobject peer, jint x, jint y) { TRY; PDATA pData; JNI_CHECK_PEER_RETURN(peer); jobject peerGlobalRef = env->NewGlobalRef(peer); // WARNING! MAKELONG macro treats the given values as unsigned. // This may lead to some bugs in multiscreen configurations, as // coordinates can be negative numbers. So, while handling // WM_AWT_OPENCANDIDATEWINDOW message in AwtToolkit, we should // carefully extract right x and y values using GET_X_LPARAM and // GET_Y_LPARAM, not LOWORD and HIWORD // See CR 4805862, AwtToolkit::WndProc // use special message to open candidate window in main thread. AwtToolkit::GetInstance().SendMessage(WM_AWT_OPENCANDIDATEWINDOW, (WPARAM)peerGlobalRef, MAKELONG(x, y)); CATCH_BAD_ALLOC; }