awt_Frame.h revision 11099:678faa7d1a6a
1/*
2 * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26#ifndef AWT_FRAME_H
27#define AWT_FRAME_H
28
29#include "awt_Window.h"
30#include "awt_MenuBar.h" //add for multifont
31#include "awt_Toolkit.h"
32#include "Hashtable.h"
33
34#include "java_awt_Frame.h"
35#include "sun_awt_windows_WFramePeer.h"
36
37
38/************************************************************************
39 * AwtFrame class
40 */
41
42#define AWT_FRAME_WINDOW_CLASS_NAME TEXT("SunAwtFrame")
43
44
45class AwtFrame : public AwtWindow {
46public:
47    enum FrameExecIds {
48        FRAME_SETMENUBAR
49    };
50
51    /* java.awt.Frame fields and method IDs */
52    static jfieldID undecoratedID;
53
54    /* sun.awt.windows.WEmbeddedFrame fields and method IDs */
55    static jfieldID handleID;
56
57    static jmethodID setExtendedStateMID;
58    static jmethodID getExtendedStateMID;
59
60    /* method id for WEmbeddedFrame.requestActivate() method */
61    static jmethodID activateEmbeddingTopLevelMID;
62
63    AwtFrame();
64    virtual ~AwtFrame();
65
66    virtual void Dispose();
67
68    virtual LPCTSTR GetClassName();
69
70    /* Create a new AwtFrame.  This must be run on the main thread. */
71    static AwtFrame* Create(jobject self, jobject parent);
72
73    /* Returns whether this frame is embedded in an external native frame. */
74    INLINE BOOL IsEmbeddedFrame() { return m_isEmbedded; }
75    /* Returns whether this frame is lightweight. */
76    INLINE virtual BOOL IsLightweightFrame() { return m_isLightweight; }
77
78    INLINE BOOL IsSimpleWindow() { return FALSE; }
79
80    /* Returns whether this window is in iconified state. */
81    INLINE BOOL isIconic() { return m_iconic; }
82    INLINE void setIconic(BOOL b) { m_iconic = b; }
83
84    /* Returns whether this window is in zoomed state. */
85    INLINE BOOL isZoomed() { return m_zoomed; }
86    INLINE void setZoomed(BOOL b) { m_zoomed = b; }
87
88    void SendWindowStateEvent(int oldState, int newState);
89
90    void Show();
91
92    INLINE void DrawMenuBar() { VERIFY(::DrawMenuBar(GetHWnd())); }
93
94    virtual void DoUpdateIcon();
95    virtual HICON GetEffectiveIcon(int iconType);
96
97    /*for WmDrawItem and WmMeasureItem method */
98    AwtMenuBar* GetMenuBar();
99    void SetMenuBar(AwtMenuBar*);
100
101    virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
102
103    MsgRouting WmGetMinMaxInfo(LPMINMAXINFO lpmmi);
104    MsgRouting WmSize(UINT type, int w, int h);
105    MsgRouting WmActivate(UINT nState, BOOL fMinimized, HWND opposite);
106    MsgRouting WmDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo);
107    MsgRouting WmMeasureItem(UINT ctrlId, MEASUREITEMSTRUCT& measureInfo);
108    MsgRouting WmEnterMenuLoop(BOOL isTrackPopupMenu);
109    MsgRouting WmExitMenuLoop(BOOL isTrackPopupMenu);
110    MsgRouting WmMouseUp(UINT flags, int x, int y, int button);
111    MsgRouting WmMouseMove(UINT flags, int x, int y);
112    MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button);
113    MsgRouting WmNcMouseUp(WPARAM hitTest, int x, int y, int button);
114    MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal);
115    MsgRouting WmShowWindow(BOOL show, UINT status);
116
117    virtual MsgRouting WmSysCommand(UINT uCmdType, int xPos, int yPos);
118
119    LRESULT WinThreadExecProc(ExecuteArgs * args);
120
121    INLINE BOOL IsUndecorated() { return m_isUndecorated; }
122
123    INLINE HWND GetProxyFocusOwner() {
124        return GetHWnd();
125    }
126
127    void SetMaximizedBounds(int x, int y, int w, int h);
128    void ClearMaximizedBounds();
129
130    // returns true if the frame is inputmethod window
131    INLINE BOOL isInputMethodWindow() { return m_isInputMethodWindow; }
132    // adjusts the IME candidate window position if needed
133    void AdjustCandidateWindowPos();
134
135    // invoked on Toolkit thread
136    static jobject _GetBoundsPrivate(void *param);
137
138    // some methods called on Toolkit thread
139    static void _SetState(void *param);
140    static jint _GetState(void *param);
141    static void _SetMaximizedBounds(void *param);
142    static void _ClearMaximizedBounds(void *param);
143    static void _SetMenuBar(void *param);
144    static void _SetIMMOption(void *param);
145    static void _SynthesizeWmActivate(void *param);
146    static void _NotifyModalBlocked(void *param);
147
148    virtual void Reshape(int x, int y, int width, int height);
149
150    virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT);
151
152    void CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd);
153    BOOL CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd);
154
155    INLINE HWND GetImeTargetComponent() { return m_imeTargetComponent; }
156    INLINE void SetImeTargetComponent(HWND hwnd) { m_imeTargetComponent = hwnd; }
157
158protected:
159    /* The frame is undecorated. */
160    BOOL m_isUndecorated;
161
162private:
163    LRESULT ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, MsgRouting &mr);
164
165    /* The frame's embedding parent (if any) */
166    HWND m_parentWnd;
167
168    /* The frame's menubar. */
169    AwtMenuBar* menuBar;
170
171    /* The frame is an EmbeddedFrame. */
172    BOOL m_isEmbedded;
173
174    /* The frame is a LightweightFrame */
175    BOOL m_isLightweight;
176
177    /* used so that calls to ::MoveWindow in SetMenuBar don't propogate
178       because they are immediately followed by calls to Component.resize */
179    BOOL m_ignoreWmSize;
180
181    /* tracks whether or not menu on this frame is dropped down */
182    BOOL m_isMenuDropped;
183
184    /* The frame is an InputMethodWindow */
185    BOOL m_isInputMethodWindow;
186
187    // retains the target component for the IME messages
188    HWND m_imeTargetComponent;
189
190    /*
191     * Fix for 4823903.
192     * Retains a focus proxied window to set the focus correctly
193     * when its owner get activated.
194     */
195    AwtWindow *m_actualFocusedWindow;
196
197    /* The original, default WndProc for m_proxyFocusOwner. */
198    WNDPROC m_proxyDefWindowProc;
199
200    BOOL m_iconic;          /* are we in an iconic state */
201    BOOL m_zoomed;          /* are we in a zoomed state */
202
203    /* whether WmSize() must unconditionally reset zoomed state */
204    BOOL m_forceResetZoomed;
205
206    BOOL  m_maxBoundsSet;
207    POINT m_maxPos;
208    POINT m_maxSize;
209
210    BOOL isInManualMoveOrSize;
211    WPARAM grabbedHitTest;
212    POINT savedMousePos;
213
214    /*
215     * Hashtable<Thread, BlockedThreadStruct> - a table that contains all the
216     * information about non-toolkit threads with modal blocked embedded
217     * frames. This information includes: number of blocked embedded frames
218     * created on the thread, and mouse and modal hooks installed for
219     * that thread. For every thread each hook is installed only once
220     */
221    static Hashtable sm_BlockedThreads;
222};
223
224#endif /* AWT_FRAME_H */
225