src/windows/native/sun/windows/awt_Window.cpp

Print this page




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);