252 break; 253 case DLL_PROCESS_DETACH: 254 #ifdef DEBUG 255 DTrace_DisableMutex(); 256 DMem_DisableMutex(); 257 #endif DEBUG 258 break; 259 } 260 return TRUE; 261 } 262 263 /************************************************************************ 264 * AwtToolkit fields 265 */ 266 267 AwtToolkit AwtToolkit::theInstance; 268 269 /* ids for WToolkit fields accessed from native code */ 270 jmethodID AwtToolkit::windowsSettingChangeMID; 271 jmethodID AwtToolkit::displayChangeMID; 272 /* ids for Toolkit methods */ 273 jmethodID AwtToolkit::getDefaultToolkitMID; 274 jmethodID AwtToolkit::getFontMetricsMID; 275 jmethodID AwtToolkit::insetsMID; 276 277 /************************************************************************ 278 * AwtToolkit methods 279 */ 280 281 AwtToolkit::AwtToolkit() { 282 m_localPump = FALSE; 283 m_mainThreadId = 0; 284 m_toolkitHWnd = NULL; 285 m_inputMethodHWnd = NULL; 286 m_verbose = FALSE; 287 m_isActive = TRUE; 288 m_isDisposed = FALSE; 289 290 m_vmSignalled = FALSE; 291 1058 1059 // if WM_QUERYENDSESSION hasn't successfully raised SIGTERM 1060 // we ignore the ENDSESSION message 1061 if (!tk.m_vmSignalled) { 1062 return 0; 1063 } 1064 tk.MessageLoop(AwtToolkit::PrimaryIdleFunc, 1065 AwtToolkit::CommonPeekMessageFunc); 1066 1067 // Dispose here instead of in eventLoop so that we don't have 1068 // to return from the WM_ENDSESSION handler. 1069 tk.Dispose(); 1070 1071 // Never return. The VM will halt the process. 1072 hang_if_shutdown(); 1073 1074 // Should never get here. 1075 DASSERT(FALSE); 1076 break; 1077 } 1078 case WM_SYNC_WAIT: 1079 SetEvent(AwtToolkit::GetInstance().m_waitEvent); 1080 break; 1081 } 1082 1083 return DefWindowProc(hWnd, message, wParam, lParam); 1084 1085 CATCH_BAD_ALLOC_RET(0); 1086 } 1087 1088 LRESULT CALLBACK AwtToolkit::GetMessageFilter(int code, 1089 WPARAM wParam, LPARAM lParam) 1090 { 1091 TRY; 1092 1093 if (code >= 0 && wParam == PM_REMOVE && lParam != 0) { 1094 if (AwtToolkit::GetInstance().PreProcessMsg(*(MSG*)lParam) != 1095 mrPassAlong) { 1096 /* PreProcessMsg() wants us to eat it */ 1097 ((MSG*)lParam)->message = WM_NULL; 2115 DASSERT(componentClassLocal != 0); 2116 CHECK_NULL(componentClassLocal); 2117 2118 jawtSMgrID = env->GetFieldID(vImgClassLocal, "volSurfaceManager", 2119 "Lsun/awt/image/VolatileSurfaceManager;"); 2120 DASSERT(jawtSMgrID != 0); 2121 CHECK_NULL(jawtSMgrID); 2122 2123 jawtSDataID = env->GetFieldID(vSMgrClassLocal, "sdCurrent", 2124 "Lsun/java2d/SurfaceData;"); 2125 DASSERT(jawtSDataID != 0); 2126 CHECK_NULL(jawtSDataID); 2127 2128 jawtPDataID = env->GetFieldID(sDataClassLocal, "pData", "J"); 2129 DASSERT(jawtPDataID != 0); 2130 CHECK_NULL(jawtPDataID); 2131 // Save these classes in global references for later use 2132 jawtVImgClass = (jclass)env->NewGlobalRef(vImgClassLocal); 2133 CHECK_NULL(jawtVImgClass); 2134 jawtComponentClass = (jclass)env->NewGlobalRef(componentClassLocal); 2135 2136 CATCH_BAD_ALLOC; 2137 } 2138 2139 2140 /* 2141 * Class: sun_awt_windows_Toolkit 2142 * Method: disableCustomPalette 2143 * Signature: ()V 2144 */ 2145 JNIEXPORT void JNICALL 2146 Java_sun_awt_windows_WToolkit_disableCustomPalette(JNIEnv *env, jclass cls) { 2147 AwtPalette::DisableCustomPalette(); 2148 } 2149 2150 /* 2151 * Class: sun_awt_windows_WToolkit 2152 * Method: embeddedInit 2153 * Signature: ()Z 2154 */ | 252 break; 253 case DLL_PROCESS_DETACH: 254 #ifdef DEBUG 255 DTrace_DisableMutex(); 256 DMem_DisableMutex(); 257 #endif DEBUG 258 break; 259 } 260 return TRUE; 261 } 262 263 /************************************************************************ 264 * AwtToolkit fields 265 */ 266 267 AwtToolkit AwtToolkit::theInstance; 268 269 /* ids for WToolkit fields accessed from native code */ 270 jmethodID AwtToolkit::windowsSettingChangeMID; 271 jmethodID AwtToolkit::displayChangeMID; 272 273 jmethodID AwtToolkit::userSessionMID; 274 jmethodID AwtToolkit::systemSleepMID; 275 /* ids for Toolkit methods */ 276 jmethodID AwtToolkit::getDefaultToolkitMID; 277 jmethodID AwtToolkit::getFontMetricsMID; 278 jmethodID AwtToolkit::insetsMID; 279 280 /************************************************************************ 281 * AwtToolkit methods 282 */ 283 284 AwtToolkit::AwtToolkit() { 285 m_localPump = FALSE; 286 m_mainThreadId = 0; 287 m_toolkitHWnd = NULL; 288 m_inputMethodHWnd = NULL; 289 m_verbose = FALSE; 290 m_isActive = TRUE; 291 m_isDisposed = FALSE; 292 293 m_vmSignalled = FALSE; 294 1061 1062 // if WM_QUERYENDSESSION hasn't successfully raised SIGTERM 1063 // we ignore the ENDSESSION message 1064 if (!tk.m_vmSignalled) { 1065 return 0; 1066 } 1067 tk.MessageLoop(AwtToolkit::PrimaryIdleFunc, 1068 AwtToolkit::CommonPeekMessageFunc); 1069 1070 // Dispose here instead of in eventLoop so that we don't have 1071 // to return from the WM_ENDSESSION handler. 1072 tk.Dispose(); 1073 1074 // Never return. The VM will halt the process. 1075 hang_if_shutdown(); 1076 1077 // Should never get here. 1078 DASSERT(FALSE); 1079 break; 1080 } 1081 #ifndef WM_WTSSESSION_CHANGE 1082 #define WM_WTSSESSION_CHANGE 0x02B1 1083 #define WTS_CONSOLE_CONNECT 0x1 1084 #define WTS_CONSOLE_DISCONNECT 0x2 1085 #define WTS_REMOTE_CONNECT 0x3 1086 #define WTS_REMOTE_DISCONNECT 0x4 1087 #define WTS_SESSION_LOGON 0x5 1088 #define WTS_SESSION_LOGOFF 0x6 1089 #define WTS_SESSION_LOCK 0x7 1090 #define WTS_SESSION_UNLOCK 0x8 1091 #define WTS_SESSION_REMOTE_CONTROL 0x9 1092 #endif // WM_WTSSESSION_CHANGE 1093 case WM_WTSSESSION_CHANGE: { 1094 jclass clzz = env->FindClass("sun/awt/windows/WDesktopPeer"); 1095 DASSERT(clzz != NULL); 1096 if (!clzz) throw std::bad_alloc(); 1097 1098 if (wParam == WTS_SESSION_LOCK || wParam == WTS_SESSION_UNLOCK) { 1099 env->CallStaticVoidMethod(clzz, AwtToolkit::userSessionMID, 1100 wParam == WTS_SESSION_UNLOCK 1101 ? JNI_TRUE 1102 : JNI_FALSE); 1103 } 1104 break; 1105 } 1106 case WM_POWERBROADCAST: { 1107 jclass clzz = env->FindClass("sun/awt/windows/WDesktopPeer"); 1108 DASSERT(clzz != NULL); 1109 if (!clzz) throw std::bad_alloc(); 1110 1111 if (wParam == PBT_APMSUSPEND || wParam == PBT_APMRESUMEAUTOMATIC) { 1112 env->CallStaticVoidMethod(clzz, AwtToolkit::systemSleepMID, 1113 wParam == PBT_APMRESUMEAUTOMATIC 1114 ? JNI_TRUE 1115 : JNI_FALSE); 1116 } 1117 break; 1118 } 1119 case WM_SYNC_WAIT: 1120 SetEvent(AwtToolkit::GetInstance().m_waitEvent); 1121 break; 1122 } 1123 1124 return DefWindowProc(hWnd, message, wParam, lParam); 1125 1126 CATCH_BAD_ALLOC_RET(0); 1127 } 1128 1129 LRESULT CALLBACK AwtToolkit::GetMessageFilter(int code, 1130 WPARAM wParam, LPARAM lParam) 1131 { 1132 TRY; 1133 1134 if (code >= 0 && wParam == PM_REMOVE && lParam != 0) { 1135 if (AwtToolkit::GetInstance().PreProcessMsg(*(MSG*)lParam) != 1136 mrPassAlong) { 1137 /* PreProcessMsg() wants us to eat it */ 1138 ((MSG*)lParam)->message = WM_NULL; 2156 DASSERT(componentClassLocal != 0); 2157 CHECK_NULL(componentClassLocal); 2158 2159 jawtSMgrID = env->GetFieldID(vImgClassLocal, "volSurfaceManager", 2160 "Lsun/awt/image/VolatileSurfaceManager;"); 2161 DASSERT(jawtSMgrID != 0); 2162 CHECK_NULL(jawtSMgrID); 2163 2164 jawtSDataID = env->GetFieldID(vSMgrClassLocal, "sdCurrent", 2165 "Lsun/java2d/SurfaceData;"); 2166 DASSERT(jawtSDataID != 0); 2167 CHECK_NULL(jawtSDataID); 2168 2169 jawtPDataID = env->GetFieldID(sDataClassLocal, "pData", "J"); 2170 DASSERT(jawtPDataID != 0); 2171 CHECK_NULL(jawtPDataID); 2172 // Save these classes in global references for later use 2173 jawtVImgClass = (jclass)env->NewGlobalRef(vImgClassLocal); 2174 CHECK_NULL(jawtVImgClass); 2175 jawtComponentClass = (jclass)env->NewGlobalRef(componentClassLocal); 2176 2177 jclass dPeerClassLocal = env->FindClass("sun/awt/windows/WDesktopPeer"); 2178 DASSERT(dPeerClassLocal != 0); 2179 CHECK_NULL(dPeerClassLocal); 2180 2181 AwtToolkit::userSessionMID = 2182 env->GetStaticMethodID(dPeerClassLocal, "userSessionCallback", "(Z)V"); 2183 DASSERT(AwtToolkit::userSessionMID != 0); 2184 CHECK_NULL(AwtToolkit::userSessionMID); 2185 2186 AwtToolkit::systemSleepMID = 2187 env->GetStaticMethodID(dPeerClassLocal, "systemSleepCallback", "(Z)V"); 2188 DASSERT(AwtToolkit::systemSleepMID != 0); 2189 CHECK_NULL(AwtToolkit::systemSleepMID); 2190 2191 CATCH_BAD_ALLOC; 2192 } 2193 2194 2195 /* 2196 * Class: sun_awt_windows_Toolkit 2197 * Method: disableCustomPalette 2198 * Signature: ()V 2199 */ 2200 JNIEXPORT void JNICALL 2201 Java_sun_awt_windows_WToolkit_disableCustomPalette(JNIEnv *env, jclass cls) { 2202 AwtPalette::DisableCustomPalette(); 2203 } 2204 2205 /* 2206 * Class: sun_awt_windows_WToolkit 2207 * Method: embeddedInit 2208 * Signature: ()Z 2209 */ |