12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Heilig Benedek <[email protected]>
- Date: Thu, 20 Sep 2018 17:47:54 -0700
- Subject: disable-redraw-lock.patch
- Chromium uses a custom window titlebar implementation on Windows when DWM
- is disabled (Windows 7 and earlier, non Aero theme). The native titlebar
- sometimes painted over this custom titlebar, so a workaround was put in
- place to lock redraws in reaction to certain events if DWM is disabled,
- since the code assumes that in that case, the custom titlebar is painted.
- Electron forces the use of the native titlebar, which the workaround doesn't
- take into account, and still locks redraws, causing weird repainting issues
- in electron (and other applications). This patch provides a way to disable
- the redraw locking mechanism, which fixes these issues. The electron issue
- can be found at https://github.com/electron/electron/issues/1821
- diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
- index bb79a55d46730a4a127ee6483a7a25ecdc2aea5b..b14fa0f41166a904991ec920cec2f45c3b71c953 100644
- --- a/ui/views/win/hwnd_message_handler.cc
- +++ b/ui/views/win/hwnd_message_handler.cc
- @@ -308,6 +308,10 @@ constexpr int kSynthesizedMouseMessagesTimeDifference = 500;
-
- } // namespace
-
- +bool HWNDMessageHandlerDelegate::HasNativeFrame() const {
- + return false;
- +}
- +
- // A scoping class that prevents a window from being able to redraw in response
- // to invalidations that may occur within it for the lifetime of the object.
- //
- @@ -359,6 +363,7 @@ class HWNDMessageHandler::ScopedRedrawLock {
- cancel_unlock_(false),
- should_lock_(owner_->IsVisible() && !owner->HasChildRenderingWindow() &&
- ::IsWindow(hwnd_) &&
- + !owner_->HasNativeFrame() &&
- (!(GetWindowLong(hwnd_, GWL_STYLE) & WS_CAPTION) ||
- !ui::win::IsAeroGlassEnabled())) {
- if (should_lock_)
- @@ -986,6 +991,10 @@ HWNDMessageHandler::RegisterUnadjustedMouseEvent() {
- return scoped_enable;
- }
-
- +bool HWNDMessageHandler::HasNativeFrame() {
- + return delegate_->HasNativeFrame();
- +}
- +
- ////////////////////////////////////////////////////////////////////////////////
- // HWNDMessageHandler, gfx::WindowImpl overrides:
-
- diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h
- index f4efdc7174b90e57fb332f031530545e493a2e0d..9d45f97b930831a703efab2bbdf10afb61140c7f 100644
- --- a/ui/views/win/hwnd_message_handler.h
- +++ b/ui/views/win/hwnd_message_handler.h
- @@ -205,6 +205,8 @@ class VIEWS_EXPORT HWNDMessageHandler : public gfx::WindowImpl,
- using TouchIDs = std::set<DWORD>;
- enum class DwmFrameState { kOff, kOn };
-
- + bool HasNativeFrame();
- +
- // Overridden from WindowImpl:
- HICON GetDefaultWindowIcon() const override;
- HICON GetSmallWindowIcon() const override;
- diff --git a/ui/views/win/hwnd_message_handler_delegate.h b/ui/views/win/hwnd_message_handler_delegate.h
- index d8e0f1d3131aef80c9fcb6069df7d7f986af6605..5dbb192d0840ca0ded61397c399b774a8cb05cce 100644
- --- a/ui/views/win/hwnd_message_handler_delegate.h
- +++ b/ui/views/win/hwnd_message_handler_delegate.h
- @@ -46,6 +46,8 @@ class VIEWS_EXPORT HWNDMessageHandlerDelegate {
- // True if the widget associated with this window has a non-client view.
- virtual bool HasNonClientView() const = 0;
-
- + virtual bool HasNativeFrame() const;
- +
- // Returns who we want to be drawing the frame. Either the system (Windows)
- // will handle it or Chrome will custom draw it.
- virtual FrameMode GetFrameMode() const = 0;
|