| /* |
| * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Sun designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Sun in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| * CA 95054 USA or visit www.sun.com if you need additional information or |
| * have any questions. |
| */ |
| |
| #ifndef AWT_WINDOW_H |
| #define AWT_WINDOW_H |
| |
| #include "awt_Canvas.h" |
| |
| #include "java_awt_Window.h" |
| #include "sun_awt_windows_WWindowPeer.h" |
| |
| // property name tagging windows disabled by modality |
| static LPCTSTR ModalBlockerProp = TEXT("SunAwtModalBlockerProp"); |
| static LPCTSTR ModalDialogPeerProp = TEXT("SunAwtModalDialogPeerProp"); |
| |
| #ifndef WH_MOUSE_LL |
| #define WH_MOUSE_LL 14 |
| #endif |
| |
| // WS_EX_NOACTIVATE is not defined in the headers we build with |
| #define AWT_WS_EX_NOACTIVATE 0x08000000L |
| |
| class AwtFrame; |
| |
| /************************************************************************ |
| * AwtWindow class |
| */ |
| |
| class AwtWindow : public AwtCanvas { |
| public: |
| |
| /* java.awt.Window field ids */ |
| static jfieldID warningStringID; |
| static jfieldID locationByPlatformID; |
| static jfieldID screenID; /* screen number passed over from WindowPeer */ |
| static jfieldID autoRequestFocusID; |
| |
| /* WWindowPeer class */ |
| static jclass wwindowPeerCls; |
| /* long[] getActiveWindowHandles() method in WWindowPeer */ |
| static jmethodID getActiveWindowsMID; |
| |
| AwtWindow(); |
| virtual ~AwtWindow(); |
| |
| virtual void Dispose(); |
| |
| virtual LPCTSTR GetClassName(); |
| virtual void FillClassInfo(WNDCLASSEX *lpwc); |
| |
| static AwtWindow* Create(jobject self, jobject parent); |
| |
| // Returns TRUE if this Window is equal to or one of owners of wnd |
| BOOL IsOneOfOwnersOf(AwtWindow * wnd); |
| |
| /* Update the insets for this Window (container), its peer & |
| * optional other |
| */ |
| BOOL UpdateInsets(jobject insets = 0); |
| BOOL HasValidRect(); |
| |
| static BOOL CALLBACK UpdateOwnedIconCallback(HWND hwnd, LPARAM param); |
| |
| INLINE AwtFrame * GetOwningFrameOrDialog() { return m_owningFrameDialog; } |
| |
| HWND GetTopLevelHWnd(); |
| |
| /* Subtract inset values from a window origin. */ |
| INLINE void SubtractInsetPoint(int& x, int& y) { |
| x -= m_insets.left; |
| y -= m_insets.top; |
| } |
| |
| virtual void GetInsets(RECT* rect) { |
| VERIFY(::CopyRect(rect, &m_insets)); |
| } |
| |
| /* to make embedded frames easier */ |
| virtual BOOL IsEmbeddedFrame() { return FALSE;} |
| |
| /* We can hold children */ |
| virtual BOOL IsContainer() { return TRUE;} |
| |
| virtual BOOL IsUndecorated() { return TRUE; } |
| |
| INLINE virtual BOOL IsSimpleWindow() { return TRUE; } |
| |
| INLINE BOOL IsRetainingHierarchyZOrder() { return m_isRetainingHierarchyZOrder; } |
| |
| /* WARNING: don't invoke on Toolkit thread! */ |
| INLINE BOOL IsAutoRequestFocus() { |
| JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); |
| return env->GetBooleanField(GetTarget(env), AwtWindow::autoRequestFocusID); |
| } |
| |
| INLINE virtual BOOL IsFocusedWindowModalBlocker() { |
| return FALSE; |
| } |
| |
| virtual void Invalidate(RECT* r); |
| virtual void Show(); |
| virtual void SetResizable(BOOL isResizable); |
| BOOL IsResizable(); |
| virtual void RecalcNonClient(); |
| virtual void RedrawNonClient(); |
| virtual int GetScreenImOn(); |
| virtual void CheckIfOnNewScreen(); |
| virtual void Grab(); |
| virtual void Ungrab(); |
| virtual void Ungrab(BOOL doPost); |
| virtual void SetIconData(JNIEnv* env, jintArray iconData, jint w, jint h, |
| jintArray smallIconData, jint smw, jint smh); |
| virtual void DoUpdateIcon(); |
| INLINE HICON GetHIcon() {return m_hIcon;}; |
| INLINE HICON GetHIconSm() {return m_hIconSm;}; |
| INLINE BOOL IsIconInherited() {return m_iconInherited;}; |
| |
| /* Post events to the EventQueue */ |
| void SendComponentEvent(jint eventId); |
| void SendWindowEvent(jint id, HWND opposite = NULL, |
| jint oldState = 0, jint newState = 0); |
| |
| BOOL IsFocusableWindow(); |
| |
| /* some helper methods about blocking windows by modal dialogs */ |
| INLINE static HWND GetModalBlocker(HWND window) { |
| return reinterpret_cast<HWND>(::GetProp(window, ModalBlockerProp)); |
| } |
| static void SetModalBlocker(HWND window, HWND blocker); |
| static void SetAndActivateModalBlocker(HWND window, HWND blocker); |
| |
| /* |
| * Windows message handler functions |
| */ |
| virtual MsgRouting WmActivate(UINT nState, BOOL fMinimized, HWND opposite); |
| static void BounceActivation(void *self); // used by WmActivate |
| virtual MsgRouting WmCreate(); |
| virtual MsgRouting WmClose(); |
| virtual MsgRouting WmDestroy(); |
| virtual MsgRouting WmShowWindow(BOOL show, UINT status); |
| virtual MsgRouting WmDDEnterFullScreen(HMONITOR monitor); |
| virtual MsgRouting WmDDExitFullScreen(HMONITOR monitor); |
| virtual MsgRouting WmGetMinMaxInfo(LPMINMAXINFO lpmmi); |
| virtual MsgRouting WmMove(int x, int y); |
| virtual MsgRouting WmSize(UINT type, int w, int h); |
| virtual MsgRouting WmSizing(); |
| virtual MsgRouting WmPaint(HDC hDC); |
| virtual MsgRouting WmSettingChange(UINT wFlag, LPCTSTR pszSection); |
| virtual MsgRouting WmNcCalcSize(BOOL fCalcValidRects, |
| LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal); |
| virtual MsgRouting WmNcPaint(HRGN hrgn); |
| virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); |
| virtual MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); |
| virtual MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal); |
| virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); |
| virtual MsgRouting WmWindowPosChanging(LPARAM windowPos); |
| virtual MsgRouting WmWindowPosChanged(LPARAM windowPos); |
| |
| virtual MsgRouting HandleEvent(MSG *msg, BOOL synthetic); |
| virtual void WindowResized(); |
| |
| void moveToDefaultLocation(); /* moves Window to X,Y specified by Window Manger */ |
| |
| INLINE virtual BOOL IsTopLevel() { return TRUE; } |
| static AwtWindow * GetGrabbedWindow() { return m_grabbedWindow; } |
| |
| static void FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags); |
| |
| // some methods invoked on Toolkit thread |
| static void _ToFront(void *param); |
| static void _ToBack(void *param); |
| static void _Grab(void *param); |
| static void _Ungrab(void *param); |
| static void _SetAlwaysOnTop(void *param); |
| static void _SetTitle(void *param); |
| static void _SetResizable(void *param); |
| static void _UpdateInsets(void *param); |
| static void _ReshapeFrame(void *param); |
| static void _SetIconImagesData(void * param); |
| static void _SetMinSize(void* param); |
| static jint _GetScreenImOn(void *param); |
| static void _SetFocusableWindow(void *param); |
| static void _SetModalExcludedNativeProp(void *param); |
| static void _ModalDisable(void *param); |
| static void _ModalEnable(void *param); |
| |
| inline static BOOL IsResizing() { |
| return sm_resizing; |
| } |
| |
| private: |
| static int ms_instanceCounter; |
| static HHOOK ms_hCBTFilter; |
| static LRESULT CALLBACK CBTFilter(int nCode, WPARAM wParam, LPARAM lParam); |
| static HWND sm_retainingHierarchyZOrderInShow; // a referred window in the process of show |
| static BOOL sm_resizing; /* in the middle of a resizing operation */ |
| |
| RECT m_insets; /* a cache of the insets being used */ |
| RECT m_old_insets; /* help determine if insets change */ |
| POINT m_sizePt; /* the last value of WM_SIZE */ |
| RECT m_warningRect; /* The window's warning banner area, if any. */ |
| AwtFrame *m_owningFrameDialog; /* The nearest Frame/Dialog which owns us */ |
| BOOL m_isFocusableWindow; /* a cache of Window.isFocusableWindow() return value */ |
| POINT m_minSize; /* Minimum size of the window for WM_GETMINMAXINFO message */ |
| BOOL m_grabbed; // Whether the current window is grabbed |
| BOOL m_isRetainingHierarchyZOrder; // Is this a window that shouldn't change z-order of any window |
| // from its hierarchy when shown. Currently applied to instances of |
| // javax/swing/Popup$HeavyWeightWindow class. |
| |
| protected: |
| BOOL m_isResizable; |
| static AwtWindow* m_grabbedWindow; // Current grabbing window |
| HICON m_hIcon; /* Icon for this window. It can be set explicitely or inherited from the owner */ |
| HICON m_hIconSm; /* Small icon for this window. It can be set explicitely or inherited from the owner */ |
| BOOL m_iconInherited; /* TRUE if icon is inherited from the owner */ |
| BOOL m_filterFocusAndActivation; /* Used in the WH_CBT hook */ |
| |
| |
| private: |
| int m_screenNum; |
| |
| void InitOwner(AwtWindow *owner); |
| }; |
| |
| #endif /* AWT_WINDOW_H */ |