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