1460 jobject target = GetTarget(env); 1461 jobject event = env->NewObject(classEvent, eventInitMID, 1462 target, eventId); 1463 DASSERT(!safe_ExceptionOccurred(env)); 1464 DASSERT(event != NULL); 1465 SendEvent(event); 1466 1467 env->DeleteLocalRef(target); 1468 env->DeleteLocalRef(event); 1469 } 1470 1471 void AwtWindow::SendWindowEvent(jint id, HWND opposite, 1472 jint oldState, jint newState) 1473 { 1474 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 1475 1476 static jclass wClassEvent; 1477 if (wClassEvent == NULL) { 1478 if (env->PushLocalFrame(1) < 0) 1479 return; 1480 wClassEvent = env->FindClass("java/awt/event/WindowEvent"); 1481 if (wClassEvent != NULL) { 1482 wClassEvent = (jclass)env->NewGlobalRef(wClassEvent); 1483 } 1484 env->PopLocalFrame(0); 1485 if (wClassEvent == NULL) { 1486 return; 1487 } 1488 } 1489 1490 static jmethodID wEventInitMID; 1491 if (wEventInitMID == NULL) { 1492 wEventInitMID = 1493 env->GetMethodID(wClassEvent, "<init>", 1494 "(Ljava/awt/Window;ILjava/awt/Window;II)V"); 1495 DASSERT(wEventInitMID); 1496 if (wEventInitMID == NULL) { 1497 return; 1498 } 1499 } 1500 1501 static jclass sequencedEventCls; 1502 if (sequencedEventCls == NULL) { 1503 jclass sequencedEventClsLocal 1504 = env->FindClass("java/awt/SequencedEvent"); 1505 DASSERT(sequencedEventClsLocal); 1506 if (sequencedEventClsLocal == NULL) { 1507 /* exception already thrown */ 1508 return; 1509 } 1510 sequencedEventCls = 1511 (jclass)env->NewGlobalRef(sequencedEventClsLocal); 1512 env->DeleteLocalRef(sequencedEventClsLocal); 1513 } 1514 1515 static jmethodID sequencedEventConst; 1516 if (sequencedEventConst == NULL) { 1517 sequencedEventConst = 1518 env->GetMethodID(sequencedEventCls, "<init>", 1519 "(Ljava/awt/AWTEvent;)V"); 1520 } 1521 1522 if (env->EnsureLocalCapacity(3) < 0) { 1523 return; 1524 } 1525 1526 jobject target = GetTarget(env); 1527 jobject jOpposite = NULL; 1528 if (opposite != NULL) { 1529 AwtComponent *awtOpposite = AwtComponent::GetComponent(opposite); 1530 if (awtOpposite != NULL) { 1531 jOpposite = awtOpposite->GetTarget(env); 1532 } 1533 } 1534 jobject event = env->NewObject(wClassEvent, wEventInitMID, target, id, 1535 jOpposite, oldState, newState); 1536 DASSERT(!safe_ExceptionOccurred(env)); 1537 DASSERT(event != NULL); 1538 if (jOpposite != NULL) { 1539 env->DeleteLocalRef(jOpposite); jOpposite = NULL; 1540 } 1541 env->DeleteLocalRef(target); target = NULL; 1542 1543 if (id == java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS || 1544 id == java_awt_event_WindowEvent_WINDOW_LOST_FOCUS) 1545 { 1546 jobject sequencedEvent = env->NewObject(sequencedEventCls, 1547 sequencedEventConst, 1548 event); 1549 DASSERT(!safe_ExceptionOccurred(env)); 1550 DASSERT(sequencedEvent != NULL); 1551 env->DeleteLocalRef(event); 1552 event = sequencedEvent; 1553 } 1554 1555 SendEvent(event); | 1460 jobject target = GetTarget(env); 1461 jobject event = env->NewObject(classEvent, eventInitMID, 1462 target, eventId); 1463 DASSERT(!safe_ExceptionOccurred(env)); 1464 DASSERT(event != NULL); 1465 SendEvent(event); 1466 1467 env->DeleteLocalRef(target); 1468 env->DeleteLocalRef(event); 1469 } 1470 1471 void AwtWindow::SendWindowEvent(jint id, HWND opposite, 1472 jint oldState, jint newState) 1473 { 1474 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); 1475 1476 static jclass wClassEvent; 1477 if (wClassEvent == NULL) { 1478 if (env->PushLocalFrame(1) < 0) 1479 return; 1480 wClassEvent = env->FindClass("sun/awt/TimedWindowEvent"); 1481 if (wClassEvent != NULL) { 1482 wClassEvent = (jclass)env->NewGlobalRef(wClassEvent); 1483 } 1484 env->PopLocalFrame(0); 1485 if (wClassEvent == NULL) { 1486 return; 1487 } 1488 } 1489 1490 static jmethodID wEventInitMID; 1491 if (wEventInitMID == NULL) { 1492 wEventInitMID = 1493 env->GetMethodID(wClassEvent, "<init>", 1494 "(Ljava/awt/Window;ILjava/awt/Window;IIJ)V"); 1495 DASSERT(wEventInitMID); 1496 if (wEventInitMID == NULL) { 1497 return; 1498 } 1499 } 1500 1501 static jclass sequencedEventCls; 1502 if (sequencedEventCls == NULL) { 1503 jclass sequencedEventClsLocal 1504 = env->FindClass("java/awt/SequencedEvent"); 1505 DASSERT(sequencedEventClsLocal); 1506 if (sequencedEventClsLocal == NULL) { 1507 /* exception already thrown */ 1508 return; 1509 } 1510 sequencedEventCls = 1511 (jclass)env->NewGlobalRef(sequencedEventClsLocal); 1512 env->DeleteLocalRef(sequencedEventClsLocal); 1513 } 1514 1515 static jmethodID sequencedEventConst; 1516 if (sequencedEventConst == NULL) { 1517 sequencedEventConst = 1518 env->GetMethodID(sequencedEventCls, "<init>", 1519 "(Ljava/awt/AWTEvent;)V"); 1520 } 1521 1522 if (env->EnsureLocalCapacity(3) < 0) { 1523 return; 1524 } 1525 1526 jobject target = GetTarget(env); 1527 jobject jOpposite = NULL; 1528 if (opposite != NULL) { 1529 AwtComponent *awtOpposite = AwtComponent::GetComponent(opposite); 1530 if (awtOpposite != NULL) { 1531 jOpposite = awtOpposite->GetTarget(env); 1532 } 1533 } 1534 jobject event = env->NewObject(wClassEvent, wEventInitMID, target, id, 1535 jOpposite, oldState, newState, TimeHelper::getMessageTimeUTC()); 1536 DASSERT(!safe_ExceptionOccurred(env)); 1537 DASSERT(event != NULL); 1538 if (jOpposite != NULL) { 1539 env->DeleteLocalRef(jOpposite); jOpposite = NULL; 1540 } 1541 env->DeleteLocalRef(target); target = NULL; 1542 1543 if (id == java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS || 1544 id == java_awt_event_WindowEvent_WINDOW_LOST_FOCUS) 1545 { 1546 jobject sequencedEvent = env->NewObject(sequencedEventCls, 1547 sequencedEventConst, 1548 event); 1549 DASSERT(!safe_ExceptionOccurred(env)); 1550 DASSERT(sequencedEvent != NULL); 1551 env->DeleteLocalRef(event); 1552 event = sequencedEvent; 1553 } 1554 1555 SendEvent(event); |