< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp

Print this page

        

*** 60,69 **** --- 60,70 ---- #include <awt_DnDDT.h> #include <awt_DnDDS.h> #include <java_awt_Toolkit.h> #include <java_awt_event_InputMethodEvent.h> + #include <java_awt_AppEvent_UserSessionEvent.h> extern void initScreens(JNIEnv *env); extern "C" void awt_dnd_initialize(); extern "C" void awt_dnd_uninitialize(); extern "C" void awt_clipboard_uninitialize(JNIEnv *env);
*** 78,87 **** --- 79,90 ---- extern jclass jawtComponentClass; extern jfieldID jawtPDataID; extern jfieldID jawtSDataID; extern jfieldID jawtSMgrID; + extern BOOL isSuddenTerminationEnabled; + extern void DWMResetCompositionEnabled(); /************************************************************************ * Utilities */
*** 267,276 **** --- 270,282 ---- AwtToolkit AwtToolkit::theInstance; /* ids for WToolkit fields accessed from native code */ jmethodID AwtToolkit::windowsSettingChangeMID; jmethodID AwtToolkit::displayChangeMID; + + jmethodID AwtToolkit::userSessionMID; + jmethodID AwtToolkit::systemSleepMID; /* ids for Toolkit methods */ jmethodID AwtToolkit::getDefaultToolkitMID; jmethodID AwtToolkit::getFontMetricsMID; jmethodID AwtToolkit::insetsMID;
*** 1044,1053 **** --- 1050,1062 ---- return TRUE; } /* Session management */ case WM_QUERYENDSESSION: { /* Shut down cleanly */ + if (!isSuddenTerminationEnabled) { + return FALSE; + } if (JVM_RaiseSignal(SIGTERM)) { AwtToolkit::GetInstance().m_vmSignalled = TRUE; } return TRUE; }
*** 1073,1082 **** --- 1082,1153 ---- // Should never get here. DASSERT(FALSE); break; } + #ifndef WM_WTSSESSION_CHANGE + #define WM_WTSSESSION_CHANGE 0x02B1 + #define WTS_CONSOLE_CONNECT 0x1 + #define WTS_CONSOLE_DISCONNECT 0x2 + #define WTS_REMOTE_CONNECT 0x3 + #define WTS_REMOTE_DISCONNECT 0x4 + #define WTS_SESSION_LOGON 0x5 + #define WTS_SESSION_LOGOFF 0x6 + #define WTS_SESSION_LOCK 0x7 + #define WTS_SESSION_UNLOCK 0x8 + #define WTS_SESSION_REMOTE_CONTROL 0x9 + #endif // WM_WTSSESSION_CHANGE + case WM_WTSSESSION_CHANGE: { + jclass clzz = env->FindClass("sun/awt/windows/WDesktopPeer"); + DASSERT(clzz != NULL); + if (!clzz) throw std::bad_alloc(); + + if (wParam == WTS_CONSOLE_CONNECT + || wParam == WTS_CONSOLE_DISCONNECT + || wParam == WTS_REMOTE_CONNECT + || wParam == WTS_REMOTE_DISCONNECT + || wParam == WTS_SESSION_UNLOCK + || wParam == WTS_SESSION_LOCK) { + + BOOL activate = wParam == WTS_CONSOLE_CONNECT + || wParam == WTS_REMOTE_CONNECT + || wParam == WTS_SESSION_UNLOCK; + int reason = java_awt_AppEvent_UserSessionEvent_REASON_UNSPECIFIED; + switch (wParam) { + case WTS_CONSOLE_CONNECT: + case WTS_CONSOLE_DISCONNECT: + reason = java_awt_AppEvent_UserSessionEvent_REASON_CONSOLE; + break; + case WTS_REMOTE_CONNECT: + case WTS_REMOTE_DISCONNECT: + reason = java_awt_AppEvent_UserSessionEvent_REASON_REMOTE; + break; + case WTS_SESSION_UNLOCK: + case WTS_SESSION_LOCK: + reason = java_awt_AppEvent_UserSessionEvent_REASON_LOCK; + } + + env->CallStaticVoidMethod(clzz, AwtToolkit::userSessionMID, + activate + ? JNI_TRUE + : JNI_FALSE, reason); + } + break; + } + case WM_POWERBROADCAST: { + jclass clzz = env->FindClass("sun/awt/windows/WDesktopPeer"); + DASSERT(clzz != NULL); + if (!clzz) throw std::bad_alloc(); + + if (wParam == PBT_APMSUSPEND || wParam == PBT_APMRESUMEAUTOMATIC) { + env->CallStaticVoidMethod(clzz, AwtToolkit::systemSleepMID, + wParam == PBT_APMRESUMEAUTOMATIC + ? JNI_TRUE + : JNI_FALSE); + } + break; + } case WM_SYNC_WAIT: SetEvent(AwtToolkit::GetInstance().m_waitEvent); break; }
*** 2131,2140 **** --- 2202,2225 ---- // Save these classes in global references for later use jawtVImgClass = (jclass)env->NewGlobalRef(vImgClassLocal); CHECK_NULL(jawtVImgClass); jawtComponentClass = (jclass)env->NewGlobalRef(componentClassLocal); + jclass dPeerClassLocal = env->FindClass("sun/awt/windows/WDesktopPeer"); + DASSERT(dPeerClassLocal != 0); + CHECK_NULL(dPeerClassLocal); + + AwtToolkit::userSessionMID = + env->GetStaticMethodID(dPeerClassLocal, "userSessionCallback", "(ZI)V"); + DASSERT(AwtToolkit::userSessionMID != 0); + CHECK_NULL(AwtToolkit::userSessionMID); + + AwtToolkit::systemSleepMID = + env->GetStaticMethodID(dPeerClassLocal, "systemSleepCallback", "(Z)V"); + DASSERT(AwtToolkit::systemSleepMID != 0); + CHECK_NULL(AwtToolkit::systemSleepMID); + CATCH_BAD_ALLOC; } /*
< prev index next >