uint32 JavaInputStream::read(void *dataPtr, uint32 dataSize) { JNIEnv* env = JNU_GetEnv(); if (_buflen < dataSize) { _buflen = dataSize; env->DeleteGlobalRef(_buf); _buf = static_cast<jbyteArray>(env->NewGlobalRef(env->NewByteArray(_buflen))); } jint ret = env->CallIntMethod(_input_stream, MID_read, _buf, 0, dataSize); if (env->ExceptionCheck()) { warning("Exception during JavaInputStream::read(%p, %d)", dataPtr, dataSize); env->ExceptionDescribe(); env->ExceptionClear(); _err = true; ret = -1; } else if (ret == -1) { _eos = true; ret = 0; } else { env->GetByteArrayRegion(_buf, 0, ret, static_cast<jbyte*>(dataPtr)); _pos += ret; } return ret; }
void AwtLabel::_SetAlignment(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); SetAlignmentStruct *sas = (SetAlignmentStruct *)param; jobject self = sas->label; jint alignment = sas->alignment; AwtLabel *l = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); l = (AwtLabel *)pData; if (::IsWindow(l->GetHWnd())) { /* * alignment argument of multifont label is referred to in * WmDrawItem method */ VERIFY(::InvalidateRect(l->GetHWnd(), NULL, TRUE)); } ret: env->DeleteGlobalRef(self); delete sas; }
void AwtScrollbar::_SetValues(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); SetValuesStruct *svs = (SetValuesStruct *)param; jobject self = svs->scrollbar; SCROLLINFO si; si.cbSize = sizeof si; si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; si.nMin = svs->min; si.nMax = svs->max - 1; si.nPage = svs->visible; si.nPos = svs->value; AwtScrollbar *sb = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); sb = (AwtScrollbar *)pData; if (::IsWindow(sb->GetHWnd())) { BOOL update_p = ::IsWindowEnabled(sb->GetHWnd()); // don't redraw if disabled DTRACE_PRINTLN5("AwtScrollbar::SetValues(val = %d, vis = %d,"//(ctd.) " min = %d, max = %d)%s", svs->value, svs->visible, svs->min, svs->max, update_p ? "" : " - NOT redrawing"); ::SetScrollInfo(sb->GetHWnd(), SB_CTL, &si, update_p); } ret: env->DeleteGlobalRef(self); delete svs; }
// // (static) // Switches to Windows thread via SendMessage and synchronously // calls AwtObject::WinThreadExecProc with the given command id // and parameters. // // Useful for writing code that needs to be synchronized with // what's happening on the Windows thread. // LRESULT AwtObject::WinThreadExec( jobject peerObject, UINT cmdId, LPARAM param1, LPARAM param2, LPARAM param3, LPARAM param4 ) { DASSERT( peerObject != NULL); JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); // since we pass peerObject to another thread we must // make a global ref jobject peerObjectGlobalRef = env->NewGlobalRef(peerObject); ExecuteArgs args; LRESULT retVal; // setup arguments args.cmdId = cmdId; args.param1 = param1; args.param2 = param2; args.param3 = param3; args.param4 = param4; // call WinThreadExecProc on the toolkit thread retVal = AwtToolkit::GetInstance().SendMessage(WM_AWT_EXECUTE_SYNC, (WPARAM)peerObjectGlobalRef, (LPARAM)&args); return retVal; }
static void handle_response(GtkWidget* aDialog, gint responseId, gpointer obj) { JNIEnv *env; char *current_folder; GSList *filenames; jclass cx; jstring jcurrent_folder; jobjectArray jfilenames; env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); current_folder = NULL; filenames = NULL; if (responseId == GTK_RESPONSE_ACCEPT) { current_folder = gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER(aDialog)); filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(aDialog)); } jcurrent_folder = (*env)->NewStringUTF(env, current_folder); jfilenames = toFilenamesArray(env, filenames); (*env)->CallVoidMethod(env, obj, setFileInternalMethodID, jcurrent_folder, jfilenames); g_free(current_folder); quit(env, (jobject)obj, TRUE); }
void AwtScrollPane::_SetScrollPos(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); SetScrollPosStruct *spss = (SetScrollPosStruct *)param; jobject self = spss->scrollpane; jint x = spss->x; jint y = spss->y; AwtScrollPane *s = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); s = (AwtScrollPane *)pData; if (::IsWindow(s->GetHWnd())) { DTRACE_PRINTLN3("%x: WScrollPanePeer.setScrollPosition(%d, %d)", self, x, y); SCROLLINFO si; ZeroMemory(&si, sizeof(si)); si.fMask = SIF_POS; si.cbSize = sizeof(si); // set x si.nPos = x; ::SetScrollInfo(s->GetHWnd(), SB_HORZ, &si, TRUE); // set y si.nPos = y; ::SetScrollInfo(s->GetHWnd(), SB_VERT, &si, TRUE); } ret: env->DeleteGlobalRef(self); delete spss; }
/* Execute a callback to the associated Java peer. */ void AwtObject::DoCallback(const char* methodName, const char* methodSig, ...) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); /* don't callback during the create & initialization process */ if (m_peerObject != NULL && m_callbacksEnabled) { va_list args; va_start(args, methodSig); #ifdef DEBUG if (reportEvents) { jstring targetStr = (jstring)JNU_CallMethodByName(env, NULL, GetTarget(env), "getName", "()Ljava/lang/String;").l; DASSERT(!safe_ExceptionOccurred(env)); printf("Posting %s%s method to %S\n", methodName, methodSig, TO_WSTRING(targetStr)); } #endif /* caching would do much good here */ JNU_CallMethodByNameV(env, NULL, GetPeer(env), methodName, methodSig, args); { jthrowable exc = safe_ExceptionOccurred(env); if (exc) { env->DeleteLocalRef(exc); env->ExceptionDescribe(); env->ExceptionClear(); } } DASSERT(!safe_ExceptionOccurred(env)); va_end(args); } }
MsgRouting AwtCanvas::HandleEvent(MSG *msg, BOOL synthetic) { if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) { /* * Fix for BugTraq ID 4041703: keyDown not being invoked. * Give the focus to a Canvas or Panel if it doesn't have heavyweight * subcomponents so that they will behave the same way as on Solaris * providing a possibility of giving keyboard focus to an empty Applet. * Since ScrollPane doesn't receive focus on mouse press on Solaris, * HandleEvent() is overriden there to do nothing with focus. */ if (AwtComponent::sm_focusOwner != GetHWnd() && ::GetWindow(GetHWnd(), GW_CHILD) == NULL) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject target = GetTarget(env); env->CallStaticVoidMethod (AwtKeyboardFocusManager::keyboardFocusManagerCls, AwtKeyboardFocusManager::heavyweightButtonDownMID, target, ((jlong)msg->time) & 0xFFFFFFFF); env->DeleteLocalRef(target); AwtSetFocus(); } } return AwtComponent::HandleEvent(msg, synthetic); }
NS_IMETHODIMP EmbedEventListener::MouseDblClick(nsIDOMEvent* aMouseEvent) { if (!aMouseEvent) return NS_OK; // return FALSE to this function to mark this event as not // consumed... PRBool return_val = PR_FALSE; JNIEnv *env = (JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION); ::util_StoreIntoPropertiesObject(env, mProperties, CLICK_COUNT_KEY, TWO_VALUE, (jobject) &(mOwner->GetWrapperFactory()->shareContext)); util_SendEventToJava(nsnull, mEventRegistration, MOUSE_LISTENER_CLASSNAME, DOMMouseListener_maskValues[MOUSE_DOUBLE_CLICK_EVENT_MASK], mProperties); if (return_val) { aMouseEvent->StopPropagation(); aMouseEvent->PreventDefault(); } return NS_OK; }
// static void D3DPipelineManager::NotifyAdapterEventListeners(UINT adapter, jint eventType) { HMONITOR hMon; int gdiScreen; D3DPipelineManager *pMgr; // fix for 6946559: if d3d preloading fails jmv may be NULL if (jvm == NULL) { return; } JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); RETURN_IF_NULL(env); pMgr = D3DPipelineManager::GetInstance(); RETURN_IF_NULL(pMgr); hMon = pMgr->pd3d9->GetAdapterMonitor(adapter); /* * If we don't have devices initialized yet, no sense to clear them. */ if (!Devices::GetInstance()){ return; } gdiScreen = AwtWin32GraphicsDevice::GetScreenFromHMONITOR(hMon); JNU_CallStaticMethodByName(env, NULL, "sun/java2d/pipe/hw/AccelDeviceEventNotifier", "eventOccured", "(II)V", gdiScreen, eventType); }
// // utility function to get the C++ object from the Java one // // (static) AwtRobot * AwtRobot::GetRobot( jobject self ) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); AwtRobot * robot = (AwtRobot *)JNI_GET_PDATA(self); DASSERT( !::IsBadWritePtr( robot, sizeof(AwtRobot))); return robot; }
// // (static) // Switches to Windows thread via SendMessage and synchronously // calls AwtObject::WinThreadExecProc with the given command id // and parameters. // // Useful for writing code that needs to be synchronized with // what's happening on the Windows thread. // LRESULT AwtObject::WinThreadExec( jobject peerObject, UINT cmdId, LPARAM param1, LPARAM param2, LPARAM param3, LPARAM param4 ) { DASSERT( peerObject != NULL); JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); AwtObject* object = (AwtObject *)JNI_GET_PDATA(peerObject); DASSERT( !IsBadReadPtr(object, sizeof(AwtObject)) ); ExecuteArgs args; LRESULT retVal; // setup arguments args.cmdId = cmdId; args.param1 = param1; args.param2 = param2; args.param3 = param3; args.param4 = param4; // call WinThreadExecProc on the toolkit thread retVal = AwtToolkit::GetInstance().SendMessage(WM_AWT_EXECUTE_SYNC, (WPARAM)object, (LPARAM)&args); return retVal; }
Common::SeekableReadStream *AndroidAssetArchive::createReadStreamForMember(const Common::String &path) const { JNIEnv* env = JNU_GetEnv(); jstring jpath = env->NewStringUTF(path.c_str()); // Try openFd() first ... jobject afd = env->CallObjectMethod(_am, MID_openFd, jpath); if (env->ExceptionCheck()) env->ExceptionClear(); else if (afd != NULL) { // success :) env->DeleteLocalRef(jpath); return new AssetFdReadStream(env, afd); } // ... and fallback to normal open() if that doesn't work jobject is = env->CallObjectMethod(_am, MID_open, jpath, ACCESS_RANDOM); if (env->ExceptionCheck()) { // Assume FileNotFoundException //warning("Error opening %s", path.c_str()); //env->ExceptionDescribe(); env->ExceptionClear(); env->DeleteLocalRef(jpath); return NULL; } return new JavaInputStream(env, is); }
AssetFdReadStream::~AssetFdReadStream() { JNIEnv* env = JNU_GetEnv(); env->CallVoidMethod(_assetfd, MID_close); if (env->ExceptionCheck()) env->ExceptionClear(); env->DeleteGlobalRef(_assetfd); }
LRESULT CALLBACK FileDialogWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); switch (message) { case WM_COMMAND: { if (LOWORD(wParam) == IDCANCEL) { // Unlike Print/Page dialogs, we only handle IDCANCEL here and // don't handle IDOK. This is because user can press OK button // when no file is selected, and the dialog is not closed. So // OK button is handled in the CDN_FILEOK notification handler // (see FileDialogHookProc below) jobject peer = (jobject)(::GetProp(hWnd, ModalDialogPeerProp)); env->CallVoidMethod(peer, AwtFileDialog::setHWndMID, (jlong)0); } break; } case WM_SETICON: { return 0; } } WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); }
MsgRouting AwtScrollbar::HandleEvent(MSG *msg, BOOL synthetic) { if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) { if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject target = GetTarget(env); env->CallStaticVoidMethod (AwtKeyboardFocusManager::keyboardFocusManagerCls, AwtKeyboardFocusManager::heavyweightButtonDownMID, target, ((jlong)msg->time) & 0xFFFFFFFF); env->DeleteLocalRef(target); AwtSetFocus(); } // Left button press was already routed to default window // procedure in the WmMouseDown above. Propagating synthetic // press seems like a bad idea as internal message loop // doesn't know how to unwrap synthetic release. delete msg; return mrConsume; } else { return AwtComponent::HandleEvent(msg, synthetic); } }
jint AwtScrollPane::_GetOffset(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); GetOffsetStruct *gos = (GetOffsetStruct *)param; jobject self = gos->scrollpane; jint orient = gos->orient; jint result = 0; AwtScrollPane *s = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); s = (AwtScrollPane *)pData; if (::IsWindow(s->GetHWnd())) { DTRACE_PRINTLN2("%x: WScrollPanePeer.getOffset(%d)", self, orient); s->VerifyState(); int nBar = (orient == java_awt_Adjustable_HORIZONTAL) ? SB_HORZ : SB_VERT; result = s->GetScrollPos(nBar); } ret: env->DeleteGlobalRef(self); delete gos; return result; }
void AwtMenuBar::_AddMenu(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); AddMenuStruct *ams = (AddMenuStruct *)param; jobject self = ams->menubar; jobject menu = ams->menu; AwtMenuBar *m = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); JNI_CHECK_NULL_GOTO(menu, "null menu", ret); m = (AwtMenuBar *)pData; if (::IsWindow(m->GetOwnerHWnd())) { /* The menu was already created and added during peer creation -- redraw */ m->RedrawMenuBar(); } ret: env->DeleteGlobalRef(self); if (menu != NULL) { env->DeleteGlobalRef(menu); } delete ams; }
void AwtScrollPane::_SetSpans(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); SetSpansStruct *sss = (SetSpansStruct *)param; jobject self = sss->scrollpane; jint parentWidth = sss->parentWidth; jint parentHeight = sss->parentHeight; jint childWidth = sss->childWidth; jint childHeight = sss->childHeight; AwtScrollPane *s = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); s = (AwtScrollPane *)pData; if (::IsWindow(s->GetHWnd())) { DTRACE_PRINTLN5("%x: WScrollPanePeer.setSpans(%d, %d, %d, %d)", self, parentWidth, parentHeight, childWidth, childHeight); s->RecalcSizes(parentWidth, parentHeight, childWidth, childHeight); s->VerifyState(); } ret: env->DeleteGlobalRef(self); delete sss; }
// This function goes through all strings in the list to find the width, // in pixels, of the longest string in the list. void AwtList::UpdateMaxItemWidth() { m_nMaxWidth = 0; JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); if (env->EnsureLocalCapacity(2) < 0) return; HDC hDC = ::GetDC(GetHWnd()); jobject self = GetPeer(env); DASSERT(self); /* target is java.awt.List */ jobject target = env->GetObjectField(self, AwtObject::targetID); jobject font = GET_FONT(target, self); int nCount = GetCount(); for ( int i=0; i < nCount; i++ ) { jstring jstr = GetItemString( env, target, i ); SIZE size = AwtFont::getMFStringSize( hDC, font, jstr ); if ( size.cx > m_nMaxWidth ) m_nMaxWidth = size.cx; env->DeleteLocalRef( jstr ); } // free up the shared DC and release local refs ::ReleaseDC(GetHWnd(), hDC); env->DeleteLocalRef( target ); env->DeleteLocalRef( font ); // Now adjust the horizontal scrollbar extent AdjustHorizontalScrollbar(); }
void AwtObject::SendEvent(jobject event) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); #ifdef DEBUG if (reportEvents) { jstring eventStr = JNU_ToString(env, event); DASSERT(!safe_ExceptionOccurred(env)); jstring targetStr = (jstring)JNU_CallMethodByName(env, NULL, GetTarget(env),"getName", "()Ljava/lang/String;").l; DASSERT(!safe_ExceptionOccurred(env)); printf("Posting %S to %S\n", TO_WSTRING(eventStr), TO_WSTRING(targetStr)); } #endif /* Post event to the system EventQueue. */ JNU_CallMethodByName(env, NULL, GetPeer(env), "postEvent", "(Ljava/awt/AWTEvent;)V", event); { jthrowable exc = safe_ExceptionOccurred(env); if (exc) { env->DeleteLocalRef(exc); env->ExceptionDescribe(); } } DASSERT(!safe_ExceptionOccurred(env)); }
void AwtList::_AddItems(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); AddItemsStruct *ais = (AddItemsStruct *)param; jobject self = ais->list; jobjectArray items = ais->items; jint index = ais->index; jint width = ais->width; int badAlloc = 0; AwtList *l = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); JNI_CHECK_NULL_GOTO(items, "null items", ret); l = (AwtList*)pData; if (::IsWindow(l->GetHWnd())) { int itemCount = env->GetArrayLength(items); if (itemCount > 0) { AwtList* l = (AwtList*)pData; l->SendListMessage(WM_SETREDRAW, (WPARAM)FALSE, 0); for (jsize i=0; i < itemCount; i++) { LPTSTR itemPtr = NULL; jstring item = (jstring)env->GetObjectArrayElement(items, i); if (env->ExceptionCheck()) goto ret; if (item == NULL) goto next_item; itemPtr = (LPTSTR)JNU_GetStringPlatformChars(env, item, 0); if (itemPtr == NULL) { badAlloc = 1; } else { l->InsertString(index+i, itemPtr); JNU_ReleaseStringPlatformChars(env, item, itemPtr); } env->DeleteLocalRef(item); next_item: ; } l->SendListMessage(WM_SETREDRAW, (WPARAM)TRUE, 0); l->InvalidateList(NULL, TRUE); l->CheckMaxWidth(width); } } ret: env->DeleteGlobalRef(self); env->DeleteGlobalRef(items); delete ais; if (badAlloc) { throw std::bad_alloc(); } }
sun_jpeg_fill_input_buffer(j_decompress_ptr cinfo) { sun_jpeg_source_ptr src = (sun_jpeg_source_ptr) cinfo->src; JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); int ret, buflen; if (src->suspendable) { return FALSE; } if (src->remaining_skip) { src->pub.skip_input_data(cinfo, 0); } RELEASE_ARRAYS(env, src); buflen = (*env)->GetArrayLength(env, src->hInputBuffer); ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID, src->hInputBuffer, 0, buflen); if (ret > buflen) ret = buflen; if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) { cinfo->err->error_exit((struct jpeg_common_struct *) cinfo); } if (ret <= 0) { /* Silently accept truncated JPEG files */ WARNMS(cinfo, JWRN_JPEG_EOF); src->inbuf[0] = (JOCTET) 0xFF; src->inbuf[1] = (JOCTET) JPEG_EOI; ret = 2; } src->pub.next_input_byte = src->inbuf; src->pub.bytes_in_buffer = ret; return TRUE; }
jboolean AwtList::_IsSelected(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); SelectElementStruct *ses = (SelectElementStruct *)param; jobject self = ses->list; jint index = ses->index; jboolean result = JNI_FALSE; AwtList *l = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); l = (AwtList*)pData; if (::IsWindow(l->GetHWnd())) { result = l->IsItemSelected(index); } ret: env->DeleteGlobalRef(self); delete ses; return result; }
void AwtChoice::SetFont(AwtFont* font) { AwtComponent::SetFont(font); //Get the text metrics and change the height of each item. HDC hDC = ::GetDC(GetHWnd()); DASSERT(hDC != NULL); TEXTMETRIC tm; HANDLE hFont = font->GetHFont(); VERIFY(::SelectObject(hDC, hFont) != NULL); VERIFY(::GetTextMetrics(hDC, &tm)); long h = tm.tmHeight + tm.tmExternalLeading; VERIFY(::ReleaseDC(GetHWnd(), hDC) != 0); int nCount = (int)::SendMessage(GetHWnd(), CB_GETCOUNT, 0, 0); for(int i = 0; i < nCount; ++i) { VERIFY(::SendMessage(GetHWnd(), CB_SETITEMHEIGHT, i, MAKELPARAM(h, 0)) != CB_ERR); } //Change the height of the Edit Box. VERIFY(::SendMessage(GetHWnd(), CB_SETITEMHEIGHT, (UINT)-1, MAKELPARAM(h, 0)) != CB_ERR); JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject target = GetTarget(env); jint height = env->GetIntField(target, AwtComponent::heightID); Reshape(env->GetIntField(target, AwtComponent::xID), env->GetIntField(target, AwtComponent::yID), env->GetIntField(target, AwtComponent::widthID), h); env->DeleteLocalRef(target); }
/* * If the application doesn't receive events with timestamp for a long time * XtLastTimestampProcessed() will return out-of-date value. This may cause * selection handling routines to fail (see BugTraq ID 4085183). * This routine is to resolve this problem. It queries the current X server * time by appending a zero-length data to a property as prescribed by * X11 Reference Manual. * Note that this is a round-trip request, so it can be slow. If you know * that the Xt timestamp is up-to-date use XtLastTimestampProcessed(). */ Time awt_util_getCurrentServerTime() { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); static Atom _XA_JAVA_TIME_PROPERTY_ATOM = 0; Time server_time = 0; AWT_LOCK(); if (_XA_JAVA_TIME_PROPERTY_ATOM == 0) { XtAddEventHandler(awt_root_shell, PropertyChangeMask, False, propertyChangeEventHandler, NULL); _XA_JAVA_TIME_PROPERTY_ATOM = XInternAtom(awt_display, "_SUNW_JAVA_AWT_TIME", False); } timeStampUpdated = False; XChangeProperty(awt_display, XtWindow(awt_root_shell), _XA_JAVA_TIME_PROPERTY_ATOM, XA_ATOM, 32, PropModeAppend, (unsigned char *)"", 0); XFlush(awt_display); if (awt_currentThreadIsPrivileged(env)) { XEvent event; XMaskEvent(awt_display, PropertyChangeMask, &event); XtDispatchEvent(&event); } else { awt_MToolkit_modalWait(isTimeStampUpdated, NULL); } server_time = XtLastTimestampProcessed(awt_display); AWT_UNLOCK(); return server_time; }
// this should be called from XRobotPeer constructor JNIEXPORT void JNICALL Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls, jint numberOfButtons, jintArray buttonDownMasks) { int32_t xtestAvailable; jint *tmp; int i; DTRACE_PRINTLN("RobotPeer: setup()"); num_buttons = numberOfButtons; tmp = (*env)->GetIntArrayElements(env, buttonDownMasks, JNI_FALSE); masks = (jint *)malloc(sizeof(jint) * num_buttons); if (masks == (jint *) NULL) { JNU_ThrowOutOfMemoryError((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2), NULL); (*env)->ReleaseIntArrayElements(env, buttonDownMasks, tmp, 0); return; } for (i = 0; i < num_buttons; i++) { masks[i] = tmp[i]; } (*env)->ReleaseIntArrayElements(env, buttonDownMasks, tmp, 0); AWT_LOCK(); xtestAvailable = isXTestAvailable(); DTRACE_PRINTLN1("RobotPeer: XTest available = %d", xtestAvailable); if (!xtestAvailable) { JNU_ThrowByName(env, "java/awt/AWTException", "java.awt.Robot requires your X server support the XTEST extension version 2.2"); } AWT_UNLOCK(); }
jobject AwtFileDialog::_GetLocationOnScreen(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject result = NULL; HWND hwnd = (HWND)env->GetLongField((jobject)param, AwtComponent::hwndID); if (::IsWindow(hwnd)) { RECT rect; VERIFY(::GetWindowRect(hwnd, &rect)); result = JNU_NewObjectByName(env, "java/awt/Point", "(II)V", ScaleDownX(rect.left, hwnd), ScaleDownY(rect.top, hwnd)); } if (result != NULL) { jobject resultRef = env->NewGlobalRef(result); env->DeleteLocalRef(result); return resultRef; } else { return NULL; } }
void AwtTextComponent::_SetText(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); SetTextStruct *sts = (SetTextStruct *)param; jobject self = sts->textcomponent; jstring text = sts->text; AwtTextComponent *c = NULL; PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); c = (AwtTextComponent *)pData; if (::IsWindow(c->GetHWnd())) { int length = env->GetStringLength(text); WCHAR* buffer = new WCHAR[length + 1]; env->GetStringRegion(text, 0, length, reinterpret_cast<jchar*>(buffer)); buffer[length] = 0; c->CheckLineSeparator(buffer); c->RemoveCR(buffer); c->SetText(buffer); delete[] buffer; } ret: env->DeleteGlobalRef(self); env->DeleteGlobalRef(text); delete sts; }
nsresult InputStreamShim::doAvailable(void) { nsresult rv = NS_ERROR_FAILURE; if (mDidClose) { mAvailable = 0; return NS_OK; } #ifdef BAL_INTERFACE #else JNIEnv *env = (JNIEnv *) JNU_GetEnv(gVm, JNI_VERSION); jclass streamClass = nsnull; jmethodID mid = nsnull; if (!(streamClass = env->GetObjectClass(mJavaStream))) { return rv; } if (!(mid = env->GetMethodID(streamClass, "available", "()I"))) { return rv; } mAvailable = (PRInt32) env->CallIntMethod(mJavaStream, mid); if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear(); return NS_ERROR_FAILURE; } rv = NS_OK; #endif return rv; }