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