Browse Source

fix: handle WCO pressed state when going maximized -> minimized (#35072)

Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 2 years ago
parent
commit
f54c9df0cd
2 changed files with 14 additions and 7 deletions
  1. 1 0
      shell/browser/native_window_views.h
  2. 13 7
      shell/browser/native_window_views_win.cc

+ 1 - 0
shell/browser/native_window_views.h

@@ -224,6 +224,7 @@ class NativeWindowViews : public NativeWindow,
 
 #if BUILDFLAG(IS_WIN)
   void HandleSizeEvent(WPARAM w_param, LPARAM l_param);
+  void ResetWindowControls();
   void SetForwardMouseMessages(bool forward);
   static LRESULT CALLBACK SubclassProc(HWND hwnd,
                                        UINT msg,

+ 13 - 7
shell/browser/native_window_views_win.cc

@@ -415,6 +415,7 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
           last_window_state_ != ui::SHOW_STATE_MAXIMIZED) {
         last_window_state_ = ui::SHOW_STATE_MAXIMIZED;
         NotifyWindowMaximize();
+        ResetWindowControls();
       } else if (w_param == SIZE_MINIMIZED &&
                  last_window_state_ != ui::SHOW_STATE_MINIMIZED) {
         last_window_state_ = ui::SHOW_STATE_MINIMIZED;
@@ -440,18 +441,23 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
         default:
           break;
       }
-      // If a given window was minimized/maximized and has since been
-      // restored, ensure the WCO buttons are set to normal state.
-      auto* ncv = widget()->non_client_view();
-      if (IsWindowControlsOverlayEnabled() && ncv) {
-        auto* frame_view = static_cast<WinFrameView*>(ncv->frame_view());
-        frame_view->caption_button_container()->ResetWindowControls();
-      }
+      ResetWindowControls();
       break;
     }
   }
 }
 
+void NativeWindowViews::ResetWindowControls() {
+  // If a given window was minimized and has since been
+  // unminimized (restored/maximized), ensure the WCO buttons
+  // are reset to their default unpressed state.
+  auto* ncv = widget()->non_client_view();
+  if (IsWindowControlsOverlayEnabled() && ncv) {
+    auto* frame_view = static_cast<WinFrameView*>(ncv->frame_view());
+    frame_view->caption_button_container()->ResetWindowControls();
+  }
+}
+
 void NativeWindowViews::SetForwardMouseMessages(bool forward) {
   if (forward && !forwarding_mouse_messages_) {
     forwarding_mouse_messages_ = true;