119 // struct for _SetOpacity() method
120 struct OpacityStruct {
121 jobject window;
122 jint iOpacity;
123 };
124 // struct for _SetOpaque() method
125 struct OpaqueStruct {
126 jobject window;
127 jboolean isOpaque;
128 };
129 // struct for _UpdateWindow() method
130 struct UpdateWindowStruct {
131 jobject window;
132 jintArray data;
133 HBITMAP hBitmap;
134 jint width, height;
135 };
136 // Struct for _RequestWindowFocus() method
137 struct RequestWindowFocusStruct {
138 jobject component;
139 jboolean isMouseEventCause;
140 };
141 // struct for _RepositionSecurityWarning() method
142 struct RepositionSecurityWarningStruct {
143 jobject window;
144 };
145
146 struct SetFullScreenExclusiveModeStateStruct {
147 jobject window;
148 jboolean isFSEMState;
149 };
150
151
152 /************************************************************************
153 * AwtWindow fields
154 */
155
156 jfieldID AwtWindow::warningStringID;
157 jfieldID AwtWindow::locationByPlatformID;
158 jfieldID AwtWindow::autoRequestFocusID;
159 jfieldID AwtWindow::securityWarningWidthID;
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);
1556
1557 env->DeleteLocalRef(event);
1558 }
1559
1560 BOOL AwtWindow::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest)
1561 {
1562 // Fix for 6458497.
1563 // Retreat if current foreground window is out of both our and embedder process.
1564 // The exception is when activation is requested due to a mouse event.
1565 if (!isMouseEventCause) {
1566 HWND fgWindow = ::GetForegroundWindow();
1567 if (NULL != fgWindow) {
1568 DWORD fgProcessID;
1569 ::GetWindowThreadProcessId(fgWindow, &fgProcessID);
1570 if (fgProcessID != ::GetCurrentProcessId()
1571 && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID))
1572 {
1573 return FALSE;
1574 }
1575 }
1576 }
1577
1578 HWND proxyContainerHWnd = GetProxyToplevelContainer();
1579 HWND proxyHWnd = GetProxyFocusOwner();
1580
1581 if (proxyContainerHWnd == NULL || proxyHWnd == NULL) {
1582 return FALSE;
1583 }
1584
1585 // Activate the proxy toplevel container
1586 if (::GetActiveWindow() != proxyContainerHWnd) {
1587 sm_suppressFocusAndActivation = TRUE;
1588 ::BringWindowToTop(proxyContainerHWnd);
1589 ::SetForegroundWindow(proxyContainerHWnd);
1590 sm_suppressFocusAndActivation = FALSE;
1591
1592 if (::GetActiveWindow() != proxyContainerHWnd) {
1593 return FALSE; // activation has been rejected
1594 }
1595 }
1596
1597 // Focus the proxy itself
2096 return ret;
2097 }
2098
2099 void AwtWindow::FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags) {
2100 FLASHWINFO fi;
2101 fi.cbSize = sizeof(fi);
2102 fi.hwnd = hWnd;
2103 fi.dwFlags = flags;
2104 fi.uCount = count;
2105 fi.dwTimeout = timeout;
2106 ::FlashWindowEx(&fi);
2107 }
2108
2109 jboolean
2110 AwtWindow::_RequestWindowFocus(void *param)
2111 {
2112 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
2113
2114 RequestWindowFocusStruct *rfs = (RequestWindowFocusStruct *)param;
2115 jobject self = rfs->component;
2116 jboolean isMouseEventCause = rfs->isMouseEventCause;
2117
2118 jboolean result = JNI_FALSE;
2119 AwtWindow *window = NULL;
2120
2121 PDATA pData;
2122 JNI_CHECK_NULL_GOTO(self, "peer", ret);
2123 pData = JNI_GET_PDATA(self);
2124 if (pData == NULL) {
2125 // do nothing just return false
2126 goto ret;
2127 }
2128
2129 window = (AwtWindow *)pData;
2130 if (::IsWindow(window->GetHWnd())) {
2131 result = (jboolean)window->SendMessage(WM_AWT_WINDOW_SETACTIVE, (WPARAM)isMouseEventCause, 0);
2132 }
2133 ret:
2134 env->DeleteGlobalRef(self);
2135
2136 delete rfs;
2137
2138 return result;
2139 }
2140
2141 void AwtWindow::_ToFront(void *param)
2142 {
2143 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
2144
2145 jobject self = (jobject)param;
2146
2147 AwtWindow *w = NULL;
2148
2149 PDATA pData;
2150 JNI_CHECK_PEER_GOTO(self, ret);
2151 w = (AwtWindow *)pData;
3608
3609 UpdateWindowStruct *uws = new UpdateWindowStruct;
3610 uws->window = env->NewGlobalRef(peer);
3611 uws->data = NULL;
3612 uws->hBitmap = hBitmap;
3613 uws->width = width;
3614 uws->height = height;
3615
3616 AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws);
3617 // global refs and mds are deleted in _UpdateWindow
3618
3619 CATCH_BAD_ALLOC;
3620 }
3621
3622 /*
3623 * Class: sun_awt_windows_WComponentPeer
3624 * Method: requestFocus
3625 * Signature: (Z)Z
3626 */
3627 JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WWindowPeer_requestWindowFocus
3628 (JNIEnv *env, jobject self, jboolean isMouseEventCause)
3629 {
3630 TRY;
3631
3632 jobject selfGlobalRef = env->NewGlobalRef(self);
3633
3634 RequestWindowFocusStruct *rfs = new RequestWindowFocusStruct;
3635 rfs->component = selfGlobalRef;
3636 rfs->isMouseEventCause = isMouseEventCause;
3637
3638 return (jboolean)AwtToolkit::GetInstance().SyncCall(
3639 (void*(*)(void*))AwtWindow::_RequestWindowFocus, rfs);
3640 // global refs and rfs are deleted in _RequestWindowFocus
3641
3642 CATCH_BAD_ALLOC_RET(JNI_FALSE);
3643 }
3644
3645 /*
3646 * Class: sun_awt_windows_WWindowPeer
3647 * Method: repositionSecurityWarning
3648 * Signature: ()V
3649 */
3650 JNIEXPORT void JNICALL
3651 Java_sun_awt_windows_WWindowPeer_repositionSecurityWarning(JNIEnv *env,
3652 jobject self)
3653 {
3654 TRY;
3655
3656 RepositionSecurityWarningStruct *rsws =
|
119 // struct for _SetOpacity() method
120 struct OpacityStruct {
121 jobject window;
122 jint iOpacity;
123 };
124 // struct for _SetOpaque() method
125 struct OpaqueStruct {
126 jobject window;
127 jboolean isOpaque;
128 };
129 // struct for _UpdateWindow() method
130 struct UpdateWindowStruct {
131 jobject window;
132 jintArray data;
133 HBITMAP hBitmap;
134 jint width, height;
135 };
136 // Struct for _RequestWindowFocus() method
137 struct RequestWindowFocusStruct {
138 jobject component;
139 };
140 // struct for _RepositionSecurityWarning() method
141 struct RepositionSecurityWarningStruct {
142 jobject window;
143 };
144
145 struct SetFullScreenExclusiveModeStateStruct {
146 jobject window;
147 jboolean isFSEMState;
148 };
149
150
151 /************************************************************************
152 * AwtWindow fields
153 */
154
155 jfieldID AwtWindow::warningStringID;
156 jfieldID AwtWindow::locationByPlatformID;
157 jfieldID AwtWindow::autoRequestFocusID;
158 jfieldID AwtWindow::securityWarningWidthID;
1539 }
1540 env->DeleteLocalRef(target); target = NULL;
1541
1542 if (id == java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS ||
1543 id == java_awt_event_WindowEvent_WINDOW_LOST_FOCUS)
1544 {
1545 jobject sequencedEvent = env->NewObject(sequencedEventCls,
1546 sequencedEventConst,
1547 event);
1548 DASSERT(!safe_ExceptionOccurred(env));
1549 DASSERT(sequencedEvent != NULL);
1550 env->DeleteLocalRef(event);
1551 event = sequencedEvent;
1552 }
1553
1554 SendEvent(event);
1555
1556 env->DeleteLocalRef(event);
1557 }
1558
1559 BOOL AwtWindow::AwtSetActiveWindow(UINT hittest)
1560 {
1561 HWND proxyContainerHWnd = GetProxyToplevelContainer();
1562 HWND proxyHWnd = GetProxyFocusOwner();
1563
1564 if (proxyContainerHWnd == NULL || proxyHWnd == NULL) {
1565 return FALSE;
1566 }
1567
1568 // Activate the proxy toplevel container
1569 if (::GetActiveWindow() != proxyContainerHWnd) {
1570 sm_suppressFocusAndActivation = TRUE;
1571 ::BringWindowToTop(proxyContainerHWnd);
1572 ::SetForegroundWindow(proxyContainerHWnd);
1573 sm_suppressFocusAndActivation = FALSE;
1574
1575 if (::GetActiveWindow() != proxyContainerHWnd) {
1576 return FALSE; // activation has been rejected
1577 }
1578 }
1579
1580 // Focus the proxy itself
2079 return ret;
2080 }
2081
2082 void AwtWindow::FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags) {
2083 FLASHWINFO fi;
2084 fi.cbSize = sizeof(fi);
2085 fi.hwnd = hWnd;
2086 fi.dwFlags = flags;
2087 fi.uCount = count;
2088 fi.dwTimeout = timeout;
2089 ::FlashWindowEx(&fi);
2090 }
2091
2092 jboolean
2093 AwtWindow::_RequestWindowFocus(void *param)
2094 {
2095 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
2096
2097 RequestWindowFocusStruct *rfs = (RequestWindowFocusStruct *)param;
2098 jobject self = rfs->component;
2099
2100 jboolean result = JNI_FALSE;
2101 AwtWindow *window = NULL;
2102
2103 PDATA pData;
2104 JNI_CHECK_NULL_GOTO(self, "peer", ret);
2105 pData = JNI_GET_PDATA(self);
2106 if (pData == NULL) {
2107 // do nothing just return false
2108 goto ret;
2109 }
2110
2111 window = (AwtWindow *)pData;
2112 if (::IsWindow(window->GetHWnd())) {
2113 result = (jboolean)window->SendMessage(WM_AWT_WINDOW_SETACTIVE, 0);
2114 }
2115 ret:
2116 env->DeleteGlobalRef(self);
2117
2118 delete rfs;
2119
2120 return result;
2121 }
2122
2123 void AwtWindow::_ToFront(void *param)
2124 {
2125 JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
2126
2127 jobject self = (jobject)param;
2128
2129 AwtWindow *w = NULL;
2130
2131 PDATA pData;
2132 JNI_CHECK_PEER_GOTO(self, ret);
2133 w = (AwtWindow *)pData;
3590
3591 UpdateWindowStruct *uws = new UpdateWindowStruct;
3592 uws->window = env->NewGlobalRef(peer);
3593 uws->data = NULL;
3594 uws->hBitmap = hBitmap;
3595 uws->width = width;
3596 uws->height = height;
3597
3598 AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws);
3599 // global refs and mds are deleted in _UpdateWindow
3600
3601 CATCH_BAD_ALLOC;
3602 }
3603
3604 /*
3605 * Class: sun_awt_windows_WComponentPeer
3606 * Method: requestFocus
3607 * Signature: (Z)Z
3608 */
3609 JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WWindowPeer_requestWindowFocus
3610 (JNIEnv *env, jobject self)
3611 {
3612 TRY;
3613
3614 jobject selfGlobalRef = env->NewGlobalRef(self);
3615
3616 RequestWindowFocusStruct *rfs = new RequestWindowFocusStruct;
3617 rfs->component = selfGlobalRef;
3618
3619 return (jboolean)AwtToolkit::GetInstance().SyncCall(
3620 (void*(*)(void*))AwtWindow::_RequestWindowFocus, rfs);
3621 // global refs and rfs are deleted in _RequestWindowFocus
3622
3623 CATCH_BAD_ALLOC_RET(JNI_FALSE);
3624 }
3625
3626 /*
3627 * Class: sun_awt_windows_WWindowPeer
3628 * Method: repositionSecurityWarning
3629 * Signature: ()V
3630 */
3631 JNIEXPORT void JNICALL
3632 Java_sun_awt_windows_WWindowPeer_repositionSecurityWarning(JNIEnv *env,
3633 jobject self)
3634 {
3635 TRY;
3636
3637 RepositionSecurityWarningStruct *rsws =
|