< prev index next >
src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp
Print this page
@@ -267,10 +267,13 @@
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;
@@ -1073,10 +1076,48 @@
// 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_SESSION_LOCK || wParam == WTS_SESSION_UNLOCK) {
+ env->CallStaticVoidMethod(clzz, AwtToolkit::userSessionMID,
+ wParam == WTS_SESSION_UNLOCK
+ ? JNI_TRUE
+ : JNI_FALSE);
+ }
+ 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,10 +2172,24 @@
// 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", "(Z)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 >