Index: ui/views/win/hwnd_message_handler.cc |
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc |
index f632827ca29663e93365929d151c4c1c5add9d49..f70dc276eadd0a3c25c49afceed05fe598c43830 100644 |
--- a/ui/views/win/hwnd_message_handler.cc |
+++ b/ui/views/win/hwnd_message_handler.cc |
@@ -333,6 +333,7 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate) |
dwm_transition_desired_(false), |
sent_window_size_changing_(false), |
left_button_down_on_caption_(false), |
+ background_fullscreen_hack_(false), |
autohide_factory_(this), |
weak_factory_(this) {} |
@@ -844,6 +845,7 @@ void HWNDMessageHandler::SetWindowIcons(const gfx::ImageSkia& window_icon, |
} |
void HWNDMessageHandler::SetFullscreen(bool fullscreen) { |
+ set_background_fullscreen_hack(false); |
fullscreen_handler()->SetFullscreen(fullscreen); |
// If we are out of fullscreen and there was a pending DWM transition for the |
// window, then go ahead and do it now. |
@@ -929,7 +931,8 @@ LRESULT HWNDMessageHandler::OnWndProc(UINT message, |
} |
if (message == WM_ACTIVATE && IsTopLevelWindow(window)) |
- PostProcessActivateMessage(LOWORD(w_param), !!HIWORD(w_param)); |
+ PostProcessActivateMessage(LOWORD(w_param), !!HIWORD(w_param), |
+ reinterpret_cast<HWND>(l_param)); |
return result; |
} |
@@ -1027,12 +1030,16 @@ void HWNDMessageHandler::SetInitialFocus() { |
} |
} |
-void HWNDMessageHandler::PostProcessActivateMessage(int activation_state, |
- bool minimized) { |
+void HWNDMessageHandler::PostProcessActivateMessage( |
+ int activation_state, |
+ bool minimized, |
+ HWND window_gaining_or_losing_activation) { |
DCHECK(IsTopLevelWindow(hwnd())); |
const bool active = activation_state != WA_INACTIVE && !minimized; |
- if (delegate_->CanActivate()) |
- delegate_->HandleActivationChanged(active); |
+ if (delegate_->CanActivate()) { |
+ delegate_->HandleActivationChanged(active, |
+ window_gaining_or_losing_activation); |
+ } |
} |
void HWNDMessageHandler::RestoreEnabledIfNecessary() { |
@@ -2167,7 +2174,8 @@ void HWNDMessageHandler::OnWindowPosChanging(WINDOWPOS* window_pos) { |
(work_area != last_work_area_); |
if (monitor && (monitor == last_monitor_) && |
((fullscreen_handler_->fullscreen() && |
- !fullscreen_handler_->metro_snap()) || |
+ !fullscreen_handler_->metro_snap() && |
+ !background_fullscreen_hack()) || |
work_area_changed)) { |
// A rect for the monitor we're on changed. Normally Windows notifies |
// us about this (and thus we're reaching here due to the SetWindowPos() |