author | ohair |
Wed, 06 Apr 2011 22:06:11 -0700 | |
changeset 9035 | 1255eb81cc2f |
parent 7771 | 9d852846c077 |
child 21278 | ef8a3a2a72f2 |
permissions | -rw-r--r-- |
2 | 1 |
/* |
9035
1255eb81cc2f
7033660: Update copyright year to 2011 on any files changed in 2011
ohair
parents:
7771
diff
changeset
|
2 |
* Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. |
2 | 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 |
|
5506 | 7 |
* published by the Free Software Foundation. Oracle designates this |
2 | 8 |
* particular file as subject to the "Classpath" exception as provided |
5506 | 9 |
* by Oracle in the LICENSE file that accompanied this code. |
2 | 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 |
* |
|
5506 | 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. |
|
2 | 24 |
*/ |
25 |
||
26 |
#ifndef AWT_DIALOG_H |
|
27 |
#define AWT_DIALOG_H |
|
28 |
||
29 |
#include "awt_Frame.h" |
|
30 |
||
31 |
#include "java_awt_Dialog.h" |
|
32 |
#include "sun_awt_windows_WDialogPeer.h" |
|
33 |
||
34 |
||
35 |
/************************************************************************ |
|
36 |
* AwtDialog class |
|
37 |
*/ |
|
38 |
// unification with AwtComponent |
|
39 |
#define AWT_DIALOG_WINDOW_CLASS_NAME TEXT("SunAwtDialog") |
|
40 |
||
41 |
class AwtDialog : public AwtFrame { |
|
42 |
public: |
|
43 |
||
44 |
/* java.awt.Dialog field ids */ |
|
45 |
static jfieldID titleID; |
|
46 |
||
47 |
/* boolean undecorated field for java.awt.Dialog */ |
|
48 |
static jfieldID undecoratedID; |
|
49 |
||
50 |
AwtDialog(); |
|
51 |
virtual ~AwtDialog(); |
|
52 |
||
53 |
virtual void Dispose(); |
|
54 |
||
55 |
virtual LPCTSTR GetClassName(); |
|
56 |
virtual void FillClassInfo(WNDCLASSEX *lpwc); |
|
57 |
virtual void SetResizable(BOOL isResizable); |
|
58 |
||
59 |
void Show(); |
|
60 |
||
61 |
virtual void DoUpdateIcon(); |
|
62 |
virtual HICON GetEffectiveIcon(int iconType); |
|
63 |
||
64 |
/* Create a new AwtDialog. This must be run on the main thread. */ |
|
65 |
static AwtDialog* Create(jobject peer, jobject hParent); |
|
66 |
virtual MsgRouting WmShowModal(); |
|
67 |
virtual MsgRouting WmEndModal(); |
|
68 |
virtual MsgRouting WmStyleChanged(int wStyleType, LPSTYLESTRUCT lpss); |
|
69 |
virtual MsgRouting WmSize(UINT type, int w, int h); |
|
70 |
MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); |
|
71 |
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); |
|
72 |
||
73 |
/* |
|
74 |
* The check is performed before the dialog is shown. |
|
75 |
* The focused window can't be blocked at the time it's focused. |
|
76 |
* Thus we don't have to perform any transitive (a blocker of a blocker) checks. |
|
77 |
*/ |
|
78 |
INLINE virtual BOOL IsFocusedWindowModalBlocker() { |
|
2472
b7aba00cabb6
6693253: Security Warning appearance requires enhancements
anthony
parents:
2455
diff
changeset
|
79 |
return (AwtComponent::GetFocusedWindow() != NULL) && (GetModalBlocker(AwtComponent::GetFocusedWindow()) == GetHWnd()); |
2 | 80 |
} |
81 |
||
82 |
// finds and activates some window after the modal dialog is hidden |
|
83 |
static void ModalActivateNextWindow(HWND dialogHWnd, |
|
84 |
jobject dialogTarget, jobject dialogPeer); |
|
85 |
||
86 |
// some methods called on Tookit thread |
|
87 |
static void _ShowModal(void *param); |
|
88 |
static void _EndModal(void *param); |
|
89 |
static void _SetIMMOption(void *param); |
|
90 |
||
91 |
static BOOL IsModalExcluded(HWND hwnd); |
|
92 |
||
93 |
static void CheckInstallModalHook(); |
|
94 |
static void CheckUninstallModalHook(); |
|
95 |
||
96 |
private: |
|
97 |
||
98 |
void UpdateSystemMenu(); |
|
99 |
||
100 |
HWND m_modalWnd; |
|
101 |
||
102 |
// checks if the given window can be activated after a modal dialog is hidden |
|
103 |
inline static BOOL ModalCanBeActivated(HWND hwnd) { |
|
104 |
return ::IsWindow(hwnd) && |
|
105 |
::IsWindowVisible(hwnd) && |
|
106 |
::IsWindowEnabled(hwnd) && |
|
107 |
!::IsWindow(AwtWindow::GetModalBlocker(hwnd)); |
|
108 |
} |
|
109 |
/* |
|
110 |
* Activates the given window |
|
111 |
* If the window is an embedded frame, it is activated from Java code. |
|
112 |
* See WEmbeddedFrame.activateEmbeddingTopLevel() for details. |
|
113 |
*/ |
|
114 |
static void ModalPerformActivation(HWND hWnd); |
|
115 |
||
7771
9d852846c077
6921598: PrinterDialog hidden behind other frames
dcherepanov
parents:
5506
diff
changeset
|
116 |
static void PopupBlockers(HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar); |
9d852846c077
6921598: PrinterDialog hidden behind other frames
dcherepanov
parents:
5506
diff
changeset
|
117 |
static void PopupBlocker(HWND blocker, HWND nextBlocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar); |
2455
e2d60882b891
6769607: PIT : Modal frame hangs for a while for few seconds in 6u12 b01 pit build
dcherepanov
parents:
2
diff
changeset
|
118 |
|
2 | 119 |
public: |
120 |
||
121 |
// WH_CBT hook procedure used in modality, prevents modal |
|
122 |
// blocked windows from being activated |
|
123 |
static LRESULT CALLBACK ModalFilterProc(int code, |
|
124 |
WPARAM wParam, LPARAM lParam); |
|
125 |
// WM_MOUSE hook procedure used in modality, filters some |
|
126 |
// mouse events for blocked windows and brings blocker |
|
127 |
// dialog to front |
|
128 |
static LRESULT CALLBACK MouseHookProc(int code, |
|
129 |
WPARAM wParam, LPARAM lParam); |
|
130 |
// WM_MOUSE hook procedure used in modality, similiar to |
|
131 |
// MouseHookProc but installed on non-toolkit threads, for |
|
132 |
// example on browser's thread when running in Java Plugin |
|
133 |
static LRESULT CALLBACK MouseHookProc_NonTT(int code, |
|
134 |
WPARAM wParam, LPARAM lParam); |
|
2472
b7aba00cabb6
6693253: Security Warning appearance requires enhancements
anthony
parents:
2455
diff
changeset
|
135 |
|
b7aba00cabb6
6693253: Security Warning appearance requires enhancements
anthony
parents:
2455
diff
changeset
|
136 |
static void AnimateModalBlocker(HWND window); |
2 | 137 |
}; |
138 |
||
139 |
#endif /* AWT_DIALOG_H */ |