src/windows/native/sun/windows/awt_Frame.cpp
Print this page
*** 103,112 ****
--- 103,113 ----
AwtFrame::AwtFrame() {
m_parentWnd = NULL;
menuBar = NULL;
m_isEmbedded = FALSE;
+ m_isLightweight = FALSE;
m_ignoreWmSize = FALSE;
m_isMenuDropped = FALSE;
m_isInputMethodWindow = FALSE;
m_isUndecorated = FALSE;
m_imeTargetComponent = NULL;
*** 168,193 ****
/*
* A variation on Netscape's hack for embedded frames: the client
* area of the browser is a Java Frame for parenting purposes, but
* really a Windows child window
*/
cls = env->FindClass("sun/awt/EmbeddedFrame");
! if (cls == NULL) {
! return NULL;
}
INT_PTR handle;
- jboolean isEmbeddedInstance = env->IsInstanceOf(target, cls);
- jboolean isEmbedded = FALSE;
-
if (isEmbeddedInstance) {
handle = static_cast<INT_PTR>(env->GetLongField(target, AwtFrame::handleID));
if (handle != 0) {
isEmbedded = TRUE;
}
}
frame->m_isEmbedded = isEmbedded;
if (isEmbedded) {
hwndParent = (HWND)handle;
RECT rect;
::GetClientRect(hwndParent, &rect);
//Fix for 6328675: SWT_AWT.new_Frame doesn't occupy client area under JDK6
--- 169,200 ----
/*
* A variation on Netscape's hack for embedded frames: the client
* area of the browser is a Java Frame for parenting purposes, but
* really a Windows child window
*/
+ BOOL isEmbeddedInstance = FALSE;
+ BOOL isEmbedded = FALSE;
cls = env->FindClass("sun/awt/EmbeddedFrame");
! if (cls) {
! isEmbeddedInstance = env->IsInstanceOf(target, cls);
}
INT_PTR handle;
if (isEmbeddedInstance) {
handle = static_cast<INT_PTR>(env->GetLongField(target, AwtFrame::handleID));
if (handle != 0) {
isEmbedded = TRUE;
}
}
frame->m_isEmbedded = isEmbedded;
+ BOOL isLightweight = FALSE;
+ cls = env->FindClass("sun/awt/LightweightFrame");
+ if (cls) {
+ isLightweight = env->IsInstanceOf(target, cls);
+ }
+ frame->m_isLightweight = isLightweight;
+
if (isEmbedded) {
hwndParent = (HWND)handle;
RECT rect;
::GetClientRect(hwndParent, &rect);
//Fix for 6328675: SWT_AWT.new_Frame doesn't occupy client area under JDK6
*** 228,237 ****
--- 235,261 ----
rect.right-rect.left);
env->SetIntField(target, AwtComponent::heightID,
rect.bottom-rect.top);
frame->InitPeerGraphicsConfig(env, self);
AwtToolkit::GetInstance().RegisterEmbedderProcessId(hwndParent);
+ } else if (isLightweight) {
+ frame->m_isUndecorated = true;
+ frame->m_peerObject = env->NewGlobalRef(self);
+ frame->RegisterClass();
+
+ DWORD exStyle = 0;
+ DWORD style = WS_POPUP;
+
+ frame->CreateHWnd(env, L"",
+ style,
+ exStyle,
+ 0, 0, 0, 0,
+ 0,
+ NULL,
+ ::GetSysColor(COLOR_WINDOWTEXT),
+ ::GetSysColor(COLOR_WINDOWFRAME),
+ self);
} else {
jint state = env->CallIntMethod(self, AwtFrame::getExtendedStateMID);
DWORD exStyle;
DWORD style;
*** 343,362 ****
}
break;
case WM_SETFOCUS:
if (sm_inSynthesizeFocus) break; // pass it up the WindowProc chain
! if (!sm_suppressFocusAndActivation && IsEmbeddedFrame()) {
AwtSetActiveWindow();
}
mr = mrConsume;
break;
case WM_KILLFOCUS:
if (sm_inSynthesizeFocus) break; // pass it up the WindowProc chain
! if (!sm_suppressFocusAndActivation && IsEmbeddedFrame()) {
AwtWindow::SynthesizeWmActivate(FALSE, GetHWnd(), NULL);
} else if (sm_restoreFocusAndActivation) {
if (AwtComponent::GetFocusedWindow() != NULL) {
AwtWindow *focusedWindow = (AwtWindow*)GetComponent(AwtComponent::GetFocusedWindow());
if (focusedWindow != NULL) {
--- 367,390 ----
}
break;
case WM_SETFOCUS:
if (sm_inSynthesizeFocus) break; // pass it up the WindowProc chain
! if (!sm_suppressFocusAndActivation) {
! if (IsLightweightFrame() || IsEmbeddedFrame()) {
AwtSetActiveWindow();
}
+ }
mr = mrConsume;
break;
case WM_KILLFOCUS:
if (sm_inSynthesizeFocus) break; // pass it up the WindowProc chain
! if (!sm_suppressFocusAndActivation) {
! if (IsLightweightFrame() || IsEmbeddedFrame()) {
AwtWindow::SynthesizeWmActivate(FALSE, GetHWnd(), NULL);
+ }
} else if (sm_restoreFocusAndActivation) {
if (AwtComponent::GetFocusedWindow() != NULL) {
AwtWindow *focusedWindow = (AwtWindow*)GetComponent(AwtComponent::GetFocusedWindow());
if (focusedWindow != NULL) {
*** 638,647 ****
--- 666,679 ----
{
m_visible = true;
HWND hwnd = GetHWnd();
JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+ if (IsLightweightFrame()) {
+ return;
+ }
+
DTRACE_PRINTLN3("AwtFrame::Show:%s%s%s",
m_iconic ? " iconic" : "",
m_zoomed ? " zoomed" : "",
m_iconic || m_zoomed ? "" : " normal");
*** 990,999 ****
--- 1022,1034 ----
// Don't let the actualFocusedWindow to steal focus if:
// a) the frame is clicked in its client area;
// b) focus is requested to some of the frame's child.
m_actualFocusedWindow = NULL;
}
+ if (IsLightweightFrame()) {
+ return TRUE;
+ }
return AwtWindow::AwtSetActiveWindow(isMouseEventCause);
}
MsgRouting AwtFrame::WmEnterMenuLoop(BOOL isTrackPopupMenu)
{
*** 1871,1881 ****
CATCH_BAD_ALLOC_RET(NULL);
}
JNIEXPORT void JNICALL
! Java_sun_awt_windows_WEmbeddedFramePeer_synthesizeWmActivate(JNIEnv *env, jobject self, jboolean doActivate)
{
TRY;
SynthesizeWmActivateStruct *sas = new SynthesizeWmActivateStruct;
sas->frame = env->NewGlobalRef(self);
--- 1906,1916 ----
CATCH_BAD_ALLOC_RET(NULL);
}
JNIEXPORT void JNICALL
! Java_sun_awt_windows_WFramePeer_synthesizeWmActivate(JNIEnv *env, jobject self, jboolean doActivate)
{
TRY;
SynthesizeWmActivateStruct *sas = new SynthesizeWmActivateStruct;
sas->frame = env->NewGlobalRef(self);