Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: views/widget/native_widget_win.h

Issue 8598031: views: Move widget/ directory to ui/views. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: reland for real Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/widget/native_widget_unittest.cc ('k') | views/widget/native_widget_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
6 #define VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
7 #pragma once
8
9 #include <atlbase.h>
10 #include <atlapp.h>
11 #include <atlcrack.h>
12 #include <atlmisc.h>
13
14 #include <string>
15 #include <vector>
16
17 #include "base/memory/ref_counted.h"
18 #include "base/memory/scoped_ptr.h"
19 #include "base/memory/scoped_vector.h"
20 #include "base/memory/weak_ptr.h"
21 #include "base/message_loop.h"
22 #include "base/win/scoped_comptr.h"
23 #include "base/win/win_util.h"
24 #include "ui/base/win/window_impl.h"
25 #include "ui/gfx/compositor/compositor.h"
26 #include "ui/views/focus/focus_manager.h"
27 #include "ui/views/layout/layout_manager.h"
28 #include "views/widget/native_widget_private.h"
29
30 namespace ui {
31 class Compositor;
32 class ViewProp;
33 }
34
35 namespace gfx {
36 class CanvasSkia;
37 class Font;
38 class Rect;
39 }
40
41 namespace views {
42
43 class DropTargetWin;
44 class RootView;
45 class TooltipManagerWin;
46
47 // These two messages aren't defined in winuser.h, but they are sent to windows
48 // with captions. They appear to paint the window caption and frame.
49 // Unfortunately if you override the standard non-client rendering as we do
50 // with CustomFrameWindow, sometimes Windows (not deterministically
51 // reproducibly but definitely frequently) will send these messages to the
52 // window and paint the standard caption/title over the top of the custom one.
53 // So we need to handle these messages in CustomFrameWindow to prevent this
54 // from happening.
55 const int WM_NCUAHDRAWCAPTION = 0xAE;
56 const int WM_NCUAHDRAWFRAME = 0xAF;
57
58 ///////////////////////////////////////////////////////////////////////////////
59 //
60 // NativeWidgetWin
61 // A Widget for a views hierarchy used to represent anything that can be
62 // contained within an HWND, e.g. a control, a window, etc. Specializations
63 // suitable for specific tasks, e.g. top level window, are derived from this.
64 //
65 // This Widget contains a RootView which owns the hierarchy of views within it.
66 // As long as views are part of this tree, they will be deleted automatically
67 // when the RootView is destroyed. If you remove a view from the tree, you are
68 // then responsible for cleaning up after it.
69 //
70 ///////////////////////////////////////////////////////////////////////////////
71 class VIEWS_EXPORT NativeWidgetWin : public ui::WindowImpl,
72 public MessageLoopForUI::Observer,
73 public ui::CompositorDelegate,
74 public internal::NativeWidgetPrivate {
75 public:
76 explicit NativeWidgetWin(internal::NativeWidgetDelegate* delegate);
77 virtual ~NativeWidgetWin();
78
79 // Returns true if we are on Windows Vista or greater and composition is
80 // enabled.
81 static bool IsAeroGlassEnabled();
82
83 // Returns the system set window title font.
84 static gfx::Font GetWindowTitleFont();
85
86 // Show the window with the specified show command.
87 void Show(int show_state);
88
89 // Disable Layered Window updates by setting to false.
90 void set_can_update_layered_window(bool can_update_layered_window) {
91 can_update_layered_window_ = can_update_layered_window;
92 }
93
94 // Obtain the view event with the given MSAA child id. Used in
95 // NativeViewAccessibilityWin::get_accChild to support requests for
96 // children of windowless controls. May return NULL
97 // (see ViewHierarchyChanged).
98 View* GetAccessibilityViewEventAt(int id);
99
100 // Add a view that has recently fired an accessibility event. Returns a MSAA
101 // child id which is generated by: -(index of view in vector + 1) which
102 // guarantees a negative child id. This distinguishes the view from
103 // positive MSAA child id's which are direct leaf children of views that have
104 // associated hWnd's (e.g. NativeWidgetWin).
105 int AddAccessibilityViewEvent(View* view);
106
107 // Clear a view that has recently been removed on a hierarchy change.
108 void ClearAccessibilityViewEvent(View* view);
109
110 // Hides the window if it hasn't already been force-hidden. The force hidden
111 // count is tracked, so calling multiple times is allowed, you just have to
112 // be sure to call PopForceHidden the same number of times.
113 void PushForceHidden();
114
115 // Decrements the force hidden count, showing the window if we have reached
116 // the top of the stack. See PushForceHidden.
117 void PopForceHidden();
118
119 BOOL IsWindow() const {
120 return ::IsWindow(GetNativeView());
121 }
122
123 BOOL ShowWindow(int command) {
124 DCHECK(::IsWindow(GetNativeView()));
125 return ::ShowWindow(GetNativeView(), command);
126 }
127
128 HWND GetParent() const {
129 return ::GetParent(GetNativeView());
130 }
131
132 LONG GetWindowLong(int index) {
133 DCHECK(::IsWindow(GetNativeView()));
134 return ::GetWindowLong(GetNativeView(), index);
135 }
136
137 BOOL GetWindowRect(RECT* rect) const {
138 return ::GetWindowRect(GetNativeView(), rect);
139 }
140
141 LONG SetWindowLong(int index, LONG new_long) {
142 DCHECK(::IsWindow(GetNativeView()));
143 return ::SetWindowLong(GetNativeView(), index, new_long);
144 }
145
146 BOOL SetWindowPos(HWND hwnd_after, int x, int y, int cx, int cy, UINT flags) {
147 DCHECK(::IsWindow(GetNativeView()));
148 return ::SetWindowPos(GetNativeView(), hwnd_after, x, y, cx, cy, flags);
149 }
150
151 BOOL IsZoomed() const {
152 DCHECK(::IsWindow(GetNativeView()));
153 return ::IsZoomed(GetNativeView());
154 }
155
156 BOOL MoveWindow(int x, int y, int width, int height) {
157 return MoveWindow(x, y, width, height, TRUE);
158 }
159
160 BOOL MoveWindow(int x, int y, int width, int height, BOOL repaint) {
161 DCHECK(::IsWindow(GetNativeView()));
162 return ::MoveWindow(GetNativeView(), x, y, width, height, repaint);
163 }
164
165 int SetWindowRgn(HRGN region, BOOL redraw) {
166 DCHECK(::IsWindow(GetNativeView()));
167 return ::SetWindowRgn(GetNativeView(), region, redraw);
168 }
169
170 BOOL GetClientRect(RECT* rect) const {
171 DCHECK(::IsWindow(GetNativeView()));
172 return ::GetClientRect(GetNativeView(), rect);
173 }
174
175 // Overridden from ui::CompositorDelegate:
176 virtual void ScheduleDraw();
177
178 // Overridden from internal::NativeWidgetPrivate:
179 virtual void InitNativeWidget(const Widget::InitParams& params) OVERRIDE;
180 virtual NonClientFrameView* CreateNonClientFrameView() OVERRIDE;
181 virtual void UpdateFrameAfterFrameChange() OVERRIDE;
182 virtual bool ShouldUseNativeFrame() const OVERRIDE;
183 virtual void FrameTypeChanged() OVERRIDE;
184 virtual Widget* GetWidget() OVERRIDE;
185 virtual const Widget* GetWidget() const OVERRIDE;
186 virtual gfx::NativeView GetNativeView() const OVERRIDE;
187 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE;
188 virtual Widget* GetTopLevelWidget() OVERRIDE;
189 virtual const ui::Compositor* GetCompositor() const OVERRIDE;
190 virtual ui::Compositor* GetCompositor() OVERRIDE;
191 virtual void CalculateOffsetToAncestorWithLayer(
192 gfx::Point* offset,
193 ui::Layer** layer_parent) OVERRIDE;
194 virtual void ReorderLayers() OVERRIDE;
195 virtual void ViewRemoved(View* view) OVERRIDE;
196 virtual void SetNativeWindowProperty(const char* name, void* value) OVERRIDE;
197 virtual void* GetNativeWindowProperty(const char* name) const OVERRIDE;
198 virtual TooltipManager* GetTooltipManager() const OVERRIDE;
199 virtual bool IsScreenReaderActive() const OVERRIDE;
200 virtual void SendNativeAccessibilityEvent(
201 View* view,
202 ui::AccessibilityTypes::Event event_type) OVERRIDE;
203 virtual void SetMouseCapture() OVERRIDE;
204 virtual void ReleaseMouseCapture() OVERRIDE;
205 virtual bool HasMouseCapture() const OVERRIDE;
206 virtual InputMethod* CreateInputMethod() OVERRIDE;
207 virtual void CenterWindow(const gfx::Size& size) OVERRIDE;
208 virtual void GetWindowPlacement(
209 gfx::Rect* bounds,
210 ui::WindowShowState* show_state) const OVERRIDE;
211 virtual void SetWindowTitle(const string16& title) OVERRIDE;
212 virtual void SetWindowIcons(const SkBitmap& window_icon,
213 const SkBitmap& app_icon) OVERRIDE;
214 virtual void SetAccessibleName(const string16& name) OVERRIDE;
215 virtual void SetAccessibleRole(ui::AccessibilityTypes::Role role) OVERRIDE;
216 virtual void SetAccessibleState(ui::AccessibilityTypes::State state) OVERRIDE;
217 virtual void BecomeModal() OVERRIDE;
218 virtual gfx::Rect GetWindowScreenBounds() const OVERRIDE;
219 virtual gfx::Rect GetClientAreaScreenBounds() const OVERRIDE;
220 virtual gfx::Rect GetRestoredBounds() const OVERRIDE;
221 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
222 virtual void SetSize(const gfx::Size& size) OVERRIDE;
223 virtual void MoveAbove(gfx::NativeView native_view) OVERRIDE;
224 virtual void MoveToTop() OVERRIDE;
225 virtual void SetShape(gfx::NativeRegion shape) OVERRIDE;
226 virtual void Close() OVERRIDE;
227 virtual void CloseNow() OVERRIDE;
228 virtual void EnableClose(bool enable) OVERRIDE;
229 virtual void Show() OVERRIDE;
230 virtual void Hide() OVERRIDE;
231 virtual void ShowMaximizedWithBounds(
232 const gfx::Rect& restored_bounds) OVERRIDE;
233 virtual void ShowWithWindowState(ui::WindowShowState show_state) OVERRIDE;
234 virtual bool IsVisible() const OVERRIDE;
235 virtual void Activate() OVERRIDE;
236 virtual void Deactivate() OVERRIDE;
237 virtual bool IsActive() const OVERRIDE;
238 virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE;
239 virtual void Maximize() OVERRIDE;
240 virtual void Minimize() OVERRIDE;
241 virtual bool IsMaximized() const OVERRIDE;
242 virtual bool IsMinimized() const OVERRIDE;
243 virtual void Restore() OVERRIDE;
244 virtual void SetFullscreen(bool fullscreen) OVERRIDE;
245 virtual bool IsFullscreen() const OVERRIDE;
246 virtual void SetOpacity(unsigned char opacity) OVERRIDE;
247 virtual void SetUseDragFrame(bool use_drag_frame) OVERRIDE;
248 virtual bool IsAccessibleWidget() const OVERRIDE;
249 virtual void RunShellDrag(View* view,
250 const ui::OSExchangeData& data,
251 int operation) OVERRIDE;
252 virtual void SchedulePaintInRect(const gfx::Rect& rect) OVERRIDE;
253 virtual void SetCursor(gfx::NativeCursor cursor) OVERRIDE;
254 virtual void ClearNativeFocus() OVERRIDE;
255 virtual void FocusNativeView(gfx::NativeView native_view) OVERRIDE;
256 virtual bool ConvertPointFromAncestor(
257 const Widget* ancestor, gfx::Point* point) const OVERRIDE;
258 virtual gfx::Rect GetWorkAreaBoundsInScreen() const OVERRIDE;
259 virtual void SetInactiveRenderingDisabled(bool value) OVERRIDE;
260
261 protected:
262 // Information saved before going into fullscreen mode, used to restore the
263 // window afterwards.
264 struct SavedWindowInfo {
265 bool maximized;
266 LONG style;
267 LONG ex_style;
268 RECT window_rect;
269 };
270
271 // Overridden from MessageLoop::Observer:
272 virtual base::EventStatus WillProcessEvent(
273 const base::NativeEvent& event) OVERRIDE;
274 virtual void DidProcessEvent(const base::NativeEvent& event) OVERRIDE;
275
276 // Overridden from WindowImpl:
277 virtual HICON GetDefaultWindowIcon() const OVERRIDE;
278 virtual LRESULT OnWndProc(UINT message,
279 WPARAM w_param,
280 LPARAM l_param) OVERRIDE;
281
282 // Message Handlers ----------------------------------------------------------
283
284 BEGIN_MSG_MAP_EX(NativeWidgetWin)
285 // Range handlers must go first!
286 MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
287 MESSAGE_RANGE_HANDLER_EX(WM_NCMOUSEMOVE, WM_NCXBUTTONDBLCLK, OnMouseRange)
288
289 // Reflected message handler
290 MESSAGE_HANDLER_EX(base::win::kReflectedMessage, OnReflectedMessage)
291
292 // CustomFrameWindow hacks
293 MESSAGE_HANDLER_EX(WM_NCUAHDRAWCAPTION, OnNCUAHDrawCaption)
294 MESSAGE_HANDLER_EX(WM_NCUAHDRAWFRAME, OnNCUAHDrawFrame)
295
296 // Vista and newer
297 MESSAGE_HANDLER_EX(WM_DWMCOMPOSITIONCHANGED, OnDwmCompositionChanged)
298
299 // Non-atlcrack.h handlers
300 MESSAGE_HANDLER_EX(WM_GETOBJECT, OnGetObject)
301
302 // Mouse events.
303 MESSAGE_HANDLER_EX(WM_MOUSEACTIVATE, OnMouseActivate)
304 MESSAGE_HANDLER_EX(WM_MOUSELEAVE, OnMouseRange)
305 MESSAGE_HANDLER_EX(WM_NCMOUSELEAVE, OnMouseRange)
306 MESSAGE_HANDLER_EX(WM_SETCURSOR, OnSetCursor);
307
308 // Key events.
309 MESSAGE_HANDLER_EX(WM_KEYDOWN, OnKeyEvent)
310 MESSAGE_HANDLER_EX(WM_KEYUP, OnKeyEvent)
311 MESSAGE_HANDLER_EX(WM_SYSKEYDOWN, OnKeyEvent)
312 MESSAGE_HANDLER_EX(WM_SYSKEYUP, OnKeyEvent)
313
314 // IME Events.
315 MESSAGE_HANDLER_EX(WM_IME_SETCONTEXT, OnImeMessages)
316 MESSAGE_HANDLER_EX(WM_IME_STARTCOMPOSITION, OnImeMessages)
317 MESSAGE_HANDLER_EX(WM_IME_COMPOSITION, OnImeMessages)
318 MESSAGE_HANDLER_EX(WM_IME_ENDCOMPOSITION, OnImeMessages)
319 MESSAGE_HANDLER_EX(WM_IME_REQUEST, OnImeMessages)
320 MESSAGE_HANDLER_EX(WM_CHAR, OnImeMessages)
321 MESSAGE_HANDLER_EX(WM_SYSCHAR, OnImeMessages)
322 MESSAGE_HANDLER_EX(WM_DEADCHAR, OnImeMessages)
323 MESSAGE_HANDLER_EX(WM_SYSDEADCHAR, OnImeMessages)
324
325 // This list is in _ALPHABETICAL_ order! OR I WILL HURT YOU.
326 MSG_WM_ACTIVATE(OnActivate)
327 MSG_WM_ACTIVATEAPP(OnActivateApp)
328 MSG_WM_APPCOMMAND(OnAppCommand)
329 MSG_WM_CANCELMODE(OnCancelMode)
330 MSG_WM_CAPTURECHANGED(OnCaptureChanged)
331 MSG_WM_CLOSE(OnClose)
332 MSG_WM_COMMAND(OnCommand)
333 MSG_WM_CREATE(OnCreate)
334 MSG_WM_DESTROY(OnDestroy)
335 MSG_WM_DISPLAYCHANGE(OnDisplayChange)
336 MSG_WM_ERASEBKGND(OnEraseBkgnd)
337 MSG_WM_ENDSESSION(OnEndSession)
338 MSG_WM_ENTERSIZEMOVE(OnEnterSizeMove)
339 MSG_WM_EXITMENULOOP(OnExitMenuLoop)
340 MSG_WM_EXITSIZEMOVE(OnExitSizeMove)
341 MSG_WM_GETMINMAXINFO(OnGetMinMaxInfo)
342 MSG_WM_HSCROLL(OnHScroll)
343 MSG_WM_INITMENU(OnInitMenu)
344 MSG_WM_INITMENUPOPUP(OnInitMenuPopup)
345 MSG_WM_INPUTLANGCHANGE(OnInputLangChange)
346 MSG_WM_KILLFOCUS(OnKillFocus)
347 MSG_WM_MOVE(OnMove)
348 MSG_WM_MOVING(OnMoving)
349 MSG_WM_NCACTIVATE(OnNCActivate)
350 MSG_WM_NCCALCSIZE(OnNCCalcSize)
351 MSG_WM_NCHITTEST(OnNCHitTest)
352 MSG_WM_NCPAINT(OnNCPaint)
353 MSG_WM_NOTIFY(OnNotify)
354 MSG_WM_PAINT(OnPaint)
355 MSG_WM_POWERBROADCAST(OnPowerBroadcast)
356 MSG_WM_SETFOCUS(OnSetFocus)
357 MSG_WM_SETICON(OnSetIcon)
358 MSG_WM_SETTEXT(OnSetText)
359 MSG_WM_SETTINGCHANGE(OnSettingChange)
360 MSG_WM_SIZE(OnSize)
361 MSG_WM_SYSCOMMAND(OnSysCommand)
362 MSG_WM_THEMECHANGED(OnThemeChanged)
363 MSG_WM_VSCROLL(OnVScroll)
364 MSG_WM_WINDOWPOSCHANGING(OnWindowPosChanging)
365 MSG_WM_WINDOWPOSCHANGED(OnWindowPosChanged)
366 END_MSG_MAP()
367
368 // These are all virtual so that specialized Widgets can modify or augment
369 // processing.
370 // This list is in _ALPHABETICAL_ order!
371 // Note: in the base class these functions must do nothing but convert point
372 // coordinates to client coordinates (if necessary) and forward the
373 // handling to the appropriate Process* function. This is so that
374 // subclasses can easily override these methods to do different things
375 // and have a convenient function to call to get the default behavior.
376 virtual void OnActivate(UINT action, BOOL minimized, HWND window);
377 virtual void OnActivateApp(BOOL active, DWORD thread_id);
378 virtual LRESULT OnAppCommand(HWND window, short app_command, WORD device,
379 int keystate);
380 virtual void OnCancelMode();
381 virtual void OnCaptureChanged(HWND hwnd);
382 virtual void OnClose();
383 virtual void OnCommand(UINT notification_code, int command_id, HWND window);
384 virtual LRESULT OnCreate(CREATESTRUCT* create_struct);
385 // WARNING: If you override this be sure and invoke super, otherwise we'll
386 // leak a few things.
387 virtual void OnDestroy();
388 virtual void OnDisplayChange(UINT bits_per_pixel, CSize screen_size);
389 virtual LRESULT OnDwmCompositionChanged(UINT msg,
390 WPARAM w_param,
391 LPARAM l_param);
392 virtual void OnEndSession(BOOL ending, UINT logoff);
393 virtual void OnEnterSizeMove();
394 virtual LRESULT OnEraseBkgnd(HDC dc);
395 virtual void OnExitMenuLoop(BOOL is_track_popup_menu);
396 virtual void OnExitSizeMove();
397 virtual LRESULT OnGetObject(UINT uMsg, WPARAM w_param, LPARAM l_param);
398 virtual void OnGetMinMaxInfo(MINMAXINFO* minmax_info);
399 virtual void OnHScroll(int scroll_type, short position, HWND scrollbar);
400 virtual LRESULT OnImeMessages(UINT message, WPARAM w_param, LPARAM l_param);
401 virtual void OnInitMenu(HMENU menu);
402 virtual void OnInitMenuPopup(HMENU menu, UINT position, BOOL is_system_menu);
403 virtual void OnInputLangChange(DWORD character_set, HKL input_language_id);
404 virtual LRESULT OnKeyEvent(UINT message, WPARAM w_param, LPARAM l_param);
405 virtual void OnKillFocus(HWND focused_window);
406 virtual LRESULT OnMouseActivate(UINT message, WPARAM w_param, LPARAM l_param);
407 virtual LRESULT OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param);
408 virtual void OnMove(const CPoint& point);
409 virtual void OnMoving(UINT param, LPRECT new_bounds);
410 virtual LRESULT OnNCActivate(BOOL active);
411 virtual LRESULT OnNCCalcSize(BOOL w_param, LPARAM l_param);
412 virtual LRESULT OnNCHitTest(const CPoint& pt);
413 virtual void OnNCPaint(HRGN rgn);
414 virtual LRESULT OnNCUAHDrawCaption(UINT msg,
415 WPARAM w_param,
416 LPARAM l_param);
417 virtual LRESULT OnNCUAHDrawFrame(UINT msg, WPARAM w_param, LPARAM l_param);
418 virtual LRESULT OnNotify(int w_param, NMHDR* l_param);
419 virtual void OnPaint(HDC dc);
420 virtual LRESULT OnPowerBroadcast(DWORD power_event, DWORD data);
421 virtual LRESULT OnReflectedMessage(UINT msg, WPARAM w_param, LPARAM l_param);
422 virtual LRESULT OnSetCursor(UINT message, WPARAM w_param, LPARAM l_param);
423 virtual void OnSetFocus(HWND focused_window);
424 virtual LRESULT OnSetIcon(UINT size_type, HICON new_icon);
425 virtual LRESULT OnSetText(const wchar_t* text);
426 virtual void OnSettingChange(UINT flags, const wchar_t* section);
427 virtual void OnSize(UINT param, const CSize& size);
428 virtual void OnSysCommand(UINT notification_code, CPoint click);
429 virtual void OnThemeChanged();
430 virtual void OnVScroll(int scroll_type, short position, HWND scrollbar);
431 virtual void OnWindowPosChanging(WINDOWPOS* window_pos);
432 virtual void OnWindowPosChanged(WINDOWPOS* window_pos);
433
434 // Deletes this window as it is destroyed, override to provide different
435 // behavior.
436 virtual void OnFinalMessage(HWND window);
437
438 // Retrieve the show state of the window. This is one of the SW_SHOW* flags
439 // passed into Windows' ShowWindow method. For normal windows this defaults
440 // to SW_SHOWNORMAL, however windows (e.g. the main window) can override this
441 // method to provide different values (e.g. retrieve the user's specified
442 // show state from the shortcut starutp info).
443 virtual int GetShowState() const;
444
445 // Returns the insets of the client area relative to the non-client area of
446 // the window. Override this function instead of OnNCCalcSize, which is
447 // crazily complicated.
448 virtual gfx::Insets GetClientAreaInsets() const;
449
450 // Start tracking all mouse events so that this window gets sent mouse leave
451 // messages too.
452 void TrackMouseEvents(DWORD mouse_tracking_flags);
453
454 // Called when a MSAA screen reader client is detected.
455 virtual void OnScreenReaderDetected();
456
457 // Executes the specified SC_command.
458 void ExecuteSystemMenuCommand(int command);
459
460 // The TooltipManager. This is NULL if there is a problem creating the
461 // underlying tooltip window.
462 // WARNING: RootView's destructor calls into the TooltipManager. As such, this
463 // must be destroyed AFTER root_view_.
464 scoped_ptr<TooltipManagerWin> tooltip_manager_;
465
466 scoped_refptr<DropTargetWin> drop_target_;
467
468 const gfx::Rect& invalid_rect() const { return invalid_rect_; }
469
470 // Saved window information from before entering fullscreen mode.
471 // TODO(beng): move to private once GetRestoredBounds() moves onto Widget.
472 SavedWindowInfo saved_window_info_;
473
474 private:
475 typedef ScopedVector<ui::ViewProp> ViewProps;
476
477 // Called after the WM_ACTIVATE message has been processed by the default
478 // windows procedure.
479 static void PostProcessActivateMessage(NativeWidgetWin* widget,
480 int activation_state);
481
482 void SetInitParams(const Widget::InitParams& params);
483
484 // Synchronously paints the invalid contents of the Widget.
485 void RedrawInvalidRect();
486
487 // Synchronously updates the invalid contents of the Widget. Valid for
488 // layered windows only.
489 void RedrawLayeredWindowContents();
490
491 // Lock or unlock the window from being able to redraw itself in response to
492 // updates to its invalid region.
493 class ScopedRedrawLock;
494 void LockUpdates();
495 void UnlockUpdates();
496
497 // Determines whether the delegate expects the client size or the window size.
498 bool WidgetSizeIsClientSize() const;
499
500 // Responds to the client area changing size, either at window creation time
501 // or subsequently.
502 void ClientAreaSizeChanged();
503
504 // Resets the window region for the current widget bounds if necessary.
505 // If |force| is true, the window region is reset to NULL even for native
506 // frame windows.
507 void ResetWindowRegion(bool force);
508
509 // Calls DefWindowProc, safely wrapping the call in a ScopedRedrawLock to
510 // prevent frame flicker. DefWindowProc handling can otherwise render the
511 // classic-look window title bar directly.
512 LRESULT DefWindowProcWithRedrawLock(UINT message,
513 WPARAM w_param,
514 LPARAM l_param);
515
516 // Stops ignoring SetWindowPos() requests (see below).
517 void StopIgnoringPosChanges() { ignore_window_pos_changes_ = false; }
518
519 void RestoreEnabledIfNecessary();
520
521 void SetInitialFocus();
522
523 // Overridden from internal::InputMethodDelegate
524 virtual void DispatchKeyEventPostIME(const KeyEvent& key) OVERRIDE;
525
526 // A delegate implementation that handles events received here.
527 // See class documentation for Widget in widget.h for a note about ownership.
528 internal::NativeWidgetDelegate* delegate_;
529
530 // The following factory is used for calls to close the NativeWidgetWin
531 // instance.
532 base::WeakPtrFactory<NativeWidgetWin> close_widget_factory_;
533
534 // The flags currently being used with TrackMouseEvent to track mouse
535 // messages. 0 if there is no active tracking. The value of this member is
536 // used when tracking is canceled.
537 DWORD active_mouse_tracking_flags_;
538
539 // Should we keep an off-screen buffer? This is false by default, set to true
540 // when WS_EX_LAYERED is specified before the native window is created.
541 //
542 // NOTE: this is intended to be used with a layered window (a window with an
543 // extended window style of WS_EX_LAYERED). If you are using a layered window
544 // and NOT changing the layered alpha or anything else, then leave this value
545 // alone. OTOH if you are invoking SetLayeredWindowAttributes then you'll
546 // most likely want to set this to false, or after changing the alpha toggle
547 // the extended style bit to false than back to true. See MSDN for more
548 // details.
549 bool use_layered_buffer_;
550
551 // The default alpha to be applied to the layered window.
552 BYTE layered_alpha_;
553
554 // A canvas that contains the window contents in the case of a layered
555 // window.
556 scoped_ptr<gfx::CanvasSkia> layered_window_contents_;
557
558 // We must track the invalid rect ourselves, for two reasons:
559 // For layered windows, Windows will not do this properly with
560 // InvalidateRect()/GetUpdateRect(). (In fact, it'll return misleading
561 // information from GetUpdateRect()).
562 // We also need to keep track of the invalid rectangle for the RootView should
563 // we need to paint the non-client area. The data supplied to WM_NCPAINT seems
564 // to be insufficient.
565 gfx::Rect invalid_rect_;
566
567 // A factory that allows us to schedule a redraw for layered windows.
568 base::WeakPtrFactory<NativeWidgetWin> paint_layered_window_factory_;
569
570 // See class documentation for Widget in widget.h for a note about ownership.
571 Widget::InitParams::Ownership ownership_;
572
573 // True if we are allowed to update the layered window from the DIB backing
574 // store if necessary.
575 bool can_update_layered_window_;
576
577 // Whether the focus should be restored next time we get enabled. Needed to
578 // restore focus correctly when Windows modal dialogs are displayed.
579 bool restore_focus_when_enabled_;
580
581 // Instance of accessibility information and handling for MSAA root
582 base::win::ScopedComPtr<IAccessible> accessibility_root_;
583
584 // Value determines whether the Widget is customized for accessibility.
585 static bool screen_reader_active_;
586
587 // The maximum number of view events in our vector below.
588 static const int kMaxAccessibilityViewEvents = 20;
589
590 // A vector used to access views for which we have sent notifications to
591 // accessibility clients. It is used as a circular queue.
592 std::vector<View*> accessibility_view_events_;
593
594 // The current position of the view events vector. When incrementing,
595 // we always mod this value with the max view events above .
596 int accessibility_view_events_index_;
597
598 // The last cursor that was active before the current one was selected. Saved
599 // so that we can restore it.
600 gfx::NativeCursor previous_cursor_;
601
602 ViewProps props_;
603
604 // True if we're in fullscreen mode.
605 bool fullscreen_;
606
607 // If this is greater than zero, we should prevent attempts to make the window
608 // visible when we handle WM_WINDOWPOSCHANGING. Some calls like
609 // ShowWindow(SW_RESTORE) make the window visible in addition to restoring it,
610 // when all we want to do is restore it.
611 int force_hidden_count_;
612
613 // The window styles before we modified them for the drag frame appearance.
614 DWORD drag_frame_saved_window_style_;
615 DWORD drag_frame_saved_window_ex_style_;
616
617 // Represents the number of ScopedRedrawLocks active against this widget.
618 // If this is greater than zero, the widget should be locked against updates.
619 int lock_updates_count_;
620
621 // The window styles of the window before updates were locked.
622 DWORD saved_window_style_;
623
624 // When true, this flag makes us discard incoming SetWindowPos() requests that
625 // only change our position/size. (We still allow changes to Z-order,
626 // activation, etc.)
627 bool ignore_window_pos_changes_;
628
629 // The following factory is used to ignore SetWindowPos() calls for short time
630 // periods.
631 base::WeakPtrFactory<NativeWidgetWin> ignore_pos_changes_factory_;
632
633 // The last-seen monitor containing us, and its rect and work area. These are
634 // used to catch updates to the rect and work area and react accordingly.
635 HMONITOR last_monitor_;
636 gfx::Rect last_monitor_rect_, last_work_area_;
637
638 // Set to true when the user presses the right mouse button on the caption
639 // area. We need this so we can correctly show the context menu on mouse-up.
640 bool is_right_mouse_pressed_on_caption_;
641
642 // Whether all ancestors have been enabled. This is only used if is_modal_ is
643 // true.
644 bool restored_enabled_;
645
646 // The compositor for accelerated drawing.
647 scoped_refptr<ui::Compositor> compositor_;
648
649 // This flag can be initialized and checked after certain operations (such as
650 // DefWindowProc) to avoid stack-controlled NativeWidgetWin operations (such
651 // as unlocking the Window with a ScopedRedrawLock) after Widget destruction.
652 bool* destroyed_;
653
654 // True if the widget is going to have a non_client_view. We cache this value
655 // rather than asking the Widget for the non_client_view so that we know at
656 // Init time, before the Widget has created the NonClientView.
657 bool has_non_client_view_;
658
659 DISALLOW_COPY_AND_ASSIGN(NativeWidgetWin);
660 };
661
662 } // namespace views
663
664 #endif // VIEWS_WIDGET_NATIVE_WIDGET_WIN_H_
OLDNEW
« no previous file with comments | « views/widget/native_widget_unittest.cc ('k') | views/widget/native_widget_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698