src/windows/native/sun/windows/awt_Window.cpp
Print this page
*** 156,168 ****
--- 156,170 ----
jfieldID AwtWindow::sysXID;
jfieldID AwtWindow::sysYID;
jfieldID AwtWindow::sysWID;
jfieldID AwtWindow::sysHID;
+ jfieldID AwtWindow::windowTypeID;
jmethodID AwtWindow::getWarningStringMID;
jmethodID AwtWindow::calculateSecurityWarningPositionMID;
+ jmethodID AwtWindow::windowTypeNameMID;
int AwtWindow::ms_instanceCounter = 0;
HHOOK AwtWindow::ms_hCBTFilter;
AwtWindow * AwtWindow::m_grabbedWindow = NULL;
BOOL AwtWindow::sm_resizing = FALSE;
*** 209,218 ****
--- 211,222 ----
currentWmSizeState = SIZE_RESTORED;
hContentBitmap = NULL;
::InitializeCriticalSection(&contentBitmapCS);
+
+ m_windowType = Type::NORMAL;
}
AwtWindow::~AwtWindow()
{
if (warningString != NULL) {
*** 468,477 ****
--- 472,484 ----
env->DeleteLocalRef(javaWarningString);
}
env->DeleteLocalRef(target);
+ InitType(env, peer);
+ TweakStyle(windowStyle, windowExStyle);
+
AwtCanvas::CreateHWnd(env, title,
windowStyle,
windowExStyle,
x, y, w, h,
hWndParent, hMenu,
*** 973,982 ****
--- 980,1033 ----
ret:
env->DeleteGlobalRef(self);
delete rsws;
}
+ void AwtWindow::InitType(JNIEnv *env, jobject peer)
+ {
+ jobject type = env->GetObjectField(peer, windowTypeID);
+ if (type == NULL) {
+ return;
+ }
+
+ jstring value = (jstring)env->CallObjectMethod(type, windowTypeNameMID);
+ if (value == NULL) {
+ env->DeleteLocalRef(type);
+ return;
+ }
+
+ const char* valueNative = env->GetStringUTFChars(value, 0);
+ if (valueNative == NULL) {
+ env->DeleteLocalRef(value);
+ env->DeleteLocalRef(type);
+ return;
+ }
+
+ if (strcmp(valueNative, "UTILITY") == 0) {
+ m_windowType = Type::UTILITY;
+ } else if (strcmp(valueNative, "POPUP") == 0) {
+ m_windowType = Type::POPUP;
+ }
+
+ env->ReleaseStringUTFChars(value, valueNative);
+ env->DeleteLocalRef(value);
+ env->DeleteLocalRef(type);
+ }
+
+ void AwtWindow::TweakStyle(DWORD & style, DWORD & exStyle)
+ {
+ switch (GetType()) {
+ case Type::UTILITY:
+ exStyle |= WS_EX_TOOLWINDOW;
+ break;
+ case Type::POPUP:
+ style &= ~WS_OVERLAPPED;
+ style |= WS_POPUP;
+ break;
+ }
+ }
+
/* Create a new AwtWindow object and window. */
AwtWindow* AwtWindow::Create(jobject self, jobject parent)
{
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
*** 2980,2989 ****
--- 3031,3045 ----
AwtWindow::autoRequestFocusID =
env->GetFieldID(cls, "autoRequestFocus", "Z");
AwtWindow::calculateSecurityWarningPositionMID =
env->GetMethodID(cls, "calculateSecurityWarningPosition", "(DDDD)Ljava/awt/geom/Point2D;");
+ jclass windowTypeClass = env->FindClass("java/awt/Window$Type");
+ AwtWindow::windowTypeNameMID =
+ env->GetMethodID(windowTypeClass, "name", "()Ljava/lang/String;");
+ env->DeleteLocalRef(windowTypeClass);
+
CATCH_BAD_ALLOC;
}
} /* extern "C" */
*** 3007,3016 ****
--- 3063,3075 ----
AwtWindow::sysXID = env->GetFieldID(cls, "sysX", "I");
AwtWindow::sysYID = env->GetFieldID(cls, "sysY", "I");
AwtWindow::sysWID = env->GetFieldID(cls, "sysW", "I");
AwtWindow::sysHID = env->GetFieldID(cls, "sysH", "I");
+ AwtWindow::windowTypeID = env->GetFieldID(cls, "windowType",
+ "Ljava/awt/Window$Type;");
+
CATCH_BAD_ALLOC;
}
/*
* Class: sun_awt_windows_WWindowPeer