fix: reposition traffic lights on theme change (#22559)

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
This commit is contained in:
Samuel Attard
2020-03-05 14:02:19 -08:00
committed by GitHub
parent 8756ff0349
commit b878a5ea4c
2 changed files with 15 additions and 1 deletions

View File

@@ -14,6 +14,7 @@
#include "base/mac/scoped_nsobject.h"
#include "shell/browser/native_window.h"
#include "ui/native_theme/native_theme_observer.h"
#include "ui/views/controls/native/native_view_host.h"
@class ElectronNSWindow;
@@ -26,7 +27,7 @@ namespace electron {
class RootViewMac;
class NativeWindowMac : public NativeWindow {
class NativeWindowMac : public NativeWindow, public ui::NativeThemeObserver {
public:
NativeWindowMac(const mate::Dictionary& options, NativeWindow* parent);
~NativeWindowMac() override;
@@ -152,6 +153,7 @@ class NativeWindowMac : public NativeWindow {
// Custom traffic light positioning
void RepositionTrafficLights();
void SetExitingFullScreen(bool flag);
void OnNativeThemeUpdated(ui::NativeTheme* observed_theme) override;
enum class TitleBarStyle {
NORMAL,

View File

@@ -16,8 +16,11 @@
#include "base/mac/scoped_cftyperef.h"
#include "base/numerics/ranges.h"
#include "base/strings/sys_string_conversions.h"
#include "base/task/post_task.h"
#include "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/desktop_media_id.h"
#include "native_mate/dictionary.h"
#include "shell/browser/native_browser_view_mac.h"
@@ -324,6 +327,8 @@ void ViewDidMoveToSuperview(NSView* self, SEL _cmd) {
NativeWindowMac::NativeWindowMac(const mate::Dictionary& options,
NativeWindow* parent)
: NativeWindow(options, parent), root_view_(new RootViewMac(this)) {
ui::NativeTheme::GetInstanceForNativeUi()->AddObserver(this);
int width = 800, height = 600;
options.Get(options::kWidth, &width);
options.Get(options::kHeight, &height);
@@ -513,6 +518,7 @@ NativeWindowMac::NativeWindowMac(const mate::Dictionary& options,
}
NativeWindowMac::~NativeWindowMac() {
ui::NativeTheme::GetInstanceForNativeUi()->RemoveObserver(this);
if (wheel_event_monitor_)
[NSEvent removeMonitor:wheel_event_monitor_];
}
@@ -704,6 +710,12 @@ void NativeWindowMac::SetExitingFullScreen(bool flag) {
exiting_fullscreen_ = flag;
}
void NativeWindowMac::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) {
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
base::BindOnce(&NativeWindowMac::RepositionTrafficLights,
base::Unretained(this)));
}
bool NativeWindowMac::IsEnabled() {
return [window_ attachedSheet] == nil;
}