| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ | 5 #ifndef UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ |
| 6 #define UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ | 6 #define UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ |
| 7 | 7 |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 | 9 |
| 10 #include <stddef.h> | 10 #include <stddef.h> |
| 11 #include <map> |
| 11 #include <memory> | 12 #include <memory> |
| 12 #include <set> | 13 #include <set> |
| 13 #include <vector> | 14 #include <vector> |
| 14 | 15 |
| 15 #include "base/compiler_specific.h" | 16 #include "base/compiler_specific.h" |
| 16 #include "base/macros.h" | 17 #include "base/macros.h" |
| 17 #include "base/memory/weak_ptr.h" | 18 #include "base/memory/weak_ptr.h" |
| 18 #include "base/strings/string16.h" | 19 #include "base/strings/string16.h" |
| 19 #include "base/win/scoped_gdi_object.h" | 20 #include "base/win/scoped_gdi_object.h" |
| 20 #include "base/win/win_util.h" | 21 #include "base/win/win_util.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 BOOL bHandled = TRUE; \ | 99 BOOL bHandled = TRUE; \ |
| 99 hWnd; \ | 100 hWnd; \ |
| 100 uMsg; \ | 101 uMsg; \ |
| 101 wParam; \ | 102 wParam; \ |
| 102 lParam; \ | 103 lParam; \ |
| 103 lResult; \ | 104 lResult; \ |
| 104 bHandled; \ | 105 bHandled; \ |
| 105 switch(dwMsgMapID) { \ | 106 switch(dwMsgMapID) { \ |
| 106 case 0: | 107 case 0: |
| 107 | 108 |
| 109 // This message is posted when our window is activated on the monitor |
| 110 // where there is a fullscreen window owned by us. The handler for |
| 111 // this message reduces the size of the fullscreen window by 1 px. This is |
| 112 // to workaround a bug in the taskbar where it treats all windows owned by |
| 113 // a thread on a monitor as fullscreen windows if one of the windows in there |
| 114 // is a full screen window. The bug does not occur across monitors. |
| 115 const int WM_CUSTOM_MESSAGE_HANDLE_BACKGROUND_FULLSCREEN = WM_USER + 1; |
| 116 |
| 108 // An object that handles messages for a HWND that implements the views | 117 // An object that handles messages for a HWND that implements the views |
| 109 // "Custom Frame" look. The purpose of this class is to isolate the windows- | 118 // "Custom Frame" look. The purpose of this class is to isolate the windows- |
| 110 // specific message handling from the code that wraps it. It is intended to be | 119 // specific message handling from the code that wraps it. It is intended to be |
| 111 // used by both a views::NativeWidget and an aura::WindowTreeHost | 120 // used by both a views::NativeWidget and an aura::WindowTreeHost |
| 112 // implementation. | 121 // implementation. |
| 113 // TODO(beng): This object should eventually *become* the WindowImpl. | 122 // TODO(beng): This object should eventually *become* the WindowImpl. |
| 114 class VIEWS_EXPORT HWNDMessageHandler : | 123 class VIEWS_EXPORT HWNDMessageHandler : |
| 115 public gfx::WindowImpl, | 124 public gfx::WindowImpl, |
| 116 public ui::WindowEventTarget { | 125 public ui::WindowEventTarget { |
| 117 public: | 126 public: |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 CR_MESSAGE_HANDLER_EX(WM_HSCROLL, OnScrollMessage) | 370 CR_MESSAGE_HANDLER_EX(WM_HSCROLL, OnScrollMessage) |
| 362 | 371 |
| 363 // Touch Events. | 372 // Touch Events. |
| 364 CR_MESSAGE_HANDLER_EX(WM_TOUCH, OnTouchEvent) | 373 CR_MESSAGE_HANDLER_EX(WM_TOUCH, OnTouchEvent) |
| 365 | 374 |
| 366 // Uses the general handler macro since the specific handler macro | 375 // Uses the general handler macro since the specific handler macro |
| 367 // MSG_WM_NCACTIVATE would convert WPARAM type to BOOL type. The high | 376 // MSG_WM_NCACTIVATE would convert WPARAM type to BOOL type. The high |
| 368 // word of WPARAM could be set when the window is minimized or restored. | 377 // word of WPARAM could be set when the window is minimized or restored. |
| 369 CR_MESSAGE_HANDLER_EX(WM_NCACTIVATE, OnNCActivate) | 378 CR_MESSAGE_HANDLER_EX(WM_NCACTIVATE, OnNCActivate) |
| 370 | 379 |
| 380 CR_MESSAGE_HANDLER_EX(WM_CUSTOM_MESSAGE_HANDLE_BACKGROUND_FULLSCREEN, |
| 381 OnBackgroundFullscreen) |
| 382 |
| 371 // This list is in _ALPHABETICAL_ order! OR I WILL HURT YOU. | 383 // This list is in _ALPHABETICAL_ order! OR I WILL HURT YOU. |
| 372 CR_MSG_WM_ACTIVATEAPP(OnActivateApp) | 384 CR_MSG_WM_ACTIVATEAPP(OnActivateApp) |
| 373 CR_MSG_WM_APPCOMMAND(OnAppCommand) | 385 CR_MSG_WM_APPCOMMAND(OnAppCommand) |
| 374 CR_MSG_WM_CANCELMODE(OnCancelMode) | 386 CR_MSG_WM_CANCELMODE(OnCancelMode) |
| 375 CR_MSG_WM_CAPTURECHANGED(OnCaptureChanged) | 387 CR_MSG_WM_CAPTURECHANGED(OnCaptureChanged) |
| 376 CR_MSG_WM_CLOSE(OnClose) | 388 CR_MSG_WM_CLOSE(OnClose) |
| 377 CR_MSG_WM_COMMAND(OnCommand) | 389 CR_MSG_WM_COMMAND(OnCommand) |
| 378 CR_MSG_WM_CREATE(OnCreate) | 390 CR_MSG_WM_CREATE(OnCreate) |
| 379 CR_MSG_WM_DESTROY(OnDestroy) | 391 CR_MSG_WM_DESTROY(OnDestroy) |
| 380 CR_MSG_WM_DISPLAYCHANGE(OnDisplayChange) | 392 CR_MSG_WM_DISPLAYCHANGE(OnDisplayChange) |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 void OnSetFocus(HWND last_focused_window); | 464 void OnSetFocus(HWND last_focused_window); |
| 453 LRESULT OnSetIcon(UINT size_type, HICON new_icon); | 465 LRESULT OnSetIcon(UINT size_type, HICON new_icon); |
| 454 LRESULT OnSetText(const wchar_t* text); | 466 LRESULT OnSetText(const wchar_t* text); |
| 455 void OnSettingChange(UINT flags, const wchar_t* section); | 467 void OnSettingChange(UINT flags, const wchar_t* section); |
| 456 void OnSize(UINT param, const gfx::Size& size); | 468 void OnSize(UINT param, const gfx::Size& size); |
| 457 void OnSysCommand(UINT notification_code, const gfx::Point& point); | 469 void OnSysCommand(UINT notification_code, const gfx::Point& point); |
| 458 void OnThemeChanged(); | 470 void OnThemeChanged(); |
| 459 LRESULT OnTouchEvent(UINT message, WPARAM w_param, LPARAM l_param); | 471 LRESULT OnTouchEvent(UINT message, WPARAM w_param, LPARAM l_param); |
| 460 void OnWindowPosChanging(WINDOWPOS* window_pos); | 472 void OnWindowPosChanging(WINDOWPOS* window_pos); |
| 461 void OnWindowPosChanged(WINDOWPOS* window_pos); | 473 void OnWindowPosChanged(WINDOWPOS* window_pos); |
| 474 LRESULT OnBackgroundFullscreen(UINT message, WPARAM w_param, LPARAM l_param); |
| 462 | 475 |
| 463 // Receives Windows Session Change notifications. | 476 // Receives Windows Session Change notifications. |
| 464 void OnSessionChange(WPARAM status_code); | 477 void OnSessionChange(WPARAM status_code); |
| 465 | 478 |
| 466 typedef std::vector<ui::TouchEvent> TouchEvents; | 479 typedef std::vector<ui::TouchEvent> TouchEvents; |
| 467 // Helper to handle the list of touch events passed in. We need this because | 480 // Helper to handle the list of touch events passed in. We need this because |
| 468 // touch events on windows don't fire if we enter a modal loop in the context | 481 // touch events on windows don't fire if we enter a modal loop in the context |
| 469 // of a touch event. | 482 // of a touch event. |
| 470 void HandleTouchEvents(const TouchEvents& touch_events); | 483 void HandleTouchEvents(const TouchEvents& touch_events); |
| 471 | 484 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 // Returns true if the message was handled. | 523 // Returns true if the message was handled. |
| 511 bool HandleMouseInputForCaption(unsigned int message, | 524 bool HandleMouseInputForCaption(unsigned int message, |
| 512 WPARAM w_param, | 525 WPARAM w_param, |
| 513 LPARAM l_param); | 526 LPARAM l_param); |
| 514 | 527 |
| 515 // Helper function for setting the bounds of the HWND. For more information | 528 // Helper function for setting the bounds of the HWND. For more information |
| 516 // please refer to the SetBounds() function. | 529 // please refer to the SetBounds() function. |
| 517 void SetBoundsInternal(const gfx::Rect& bounds_in_pixels, | 530 void SetBoundsInternal(const gfx::Rect& bounds_in_pixels, |
| 518 bool force_size_changed); | 531 bool force_size_changed); |
| 519 | 532 |
| 533 // Checks if there is a full screen window on the same monitor as the |
| 534 // |window| which is becoming active. If yes then we reduce the size of the |
| 535 // fullscreen window by 1 px to ensure that maximized windows on the same |
| 536 // monitor don't draw over the taskbar. |
| 537 void CheckAndHandleBackgroundFullscreenOnMonitor(HWND window); |
| 538 |
| 520 HWNDMessageHandlerDelegate* delegate_; | 539 HWNDMessageHandlerDelegate* delegate_; |
| 521 | 540 |
| 522 std::unique_ptr<FullscreenHandler> fullscreen_handler_; | 541 std::unique_ptr<FullscreenHandler> fullscreen_handler_; |
| 523 | 542 |
| 524 // Set to true in Close() and false is CloseNow(). | 543 // Set to true in Close() and false is CloseNow(). |
| 525 bool waiting_for_close_now_; | 544 bool waiting_for_close_now_; |
| 526 | 545 |
| 527 bool use_system_default_icon_; | 546 bool use_system_default_icon_; |
| 528 | 547 |
| 529 // Whether all ancestors have been enabled. This is only used if is_modal_ is | 548 // Whether all ancestors have been enabled. This is only used if is_modal_ is |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 | 672 |
| 654 // The WeakPtrFactories below must occur last in the class definition so they | 673 // The WeakPtrFactories below must occur last in the class definition so they |
| 655 // get destroyed last. | 674 // get destroyed last. |
| 656 | 675 |
| 657 // The factory used to lookup appbar autohide edges. | 676 // The factory used to lookup appbar autohide edges. |
| 658 base::WeakPtrFactory<HWNDMessageHandler> autohide_factory_; | 677 base::WeakPtrFactory<HWNDMessageHandler> autohide_factory_; |
| 659 | 678 |
| 660 // The factory used with BEGIN_SAFE_MSG_MAP_EX. | 679 // The factory used with BEGIN_SAFE_MSG_MAP_EX. |
| 661 base::WeakPtrFactory<HWNDMessageHandler> weak_factory_; | 680 base::WeakPtrFactory<HWNDMessageHandler> weak_factory_; |
| 662 | 681 |
| 682 // This is a map of the HMONITOR to full screeen window handle. |
| 683 typedef std::map<HMONITOR, HWND> FullscreenWindowMonitorMap; |
| 684 static FullscreenWindowMonitorMap* fullscreen_monitor_map_; |
| 685 // This holds the number of HWNDMessageHandler instances currently active. |
| 686 static int32_t instance_count_; |
| 687 |
| 663 DISALLOW_COPY_AND_ASSIGN(HWNDMessageHandler); | 688 DISALLOW_COPY_AND_ASSIGN(HWNDMessageHandler); |
| 664 }; | 689 }; |
| 665 | 690 |
| 666 } // namespace views | 691 } // namespace views |
| 667 | 692 |
| 668 #endif // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ | 693 #endif // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_ |
| OLD | NEW |