Implement SysColorChangeListener directly on Windows

This commit is contained in:
Kevin Sawicki 2016-10-10 10:20:51 -07:00
parent 25bcc2dd0d
commit 38281f3364
3 changed files with 17 additions and 26 deletions

View file

@ -14,7 +14,11 @@ namespace atom {
namespace api { namespace api {
SystemPreferences::SystemPreferences(v8::Isolate* isolate) { SystemPreferences::SystemPreferences(v8::Isolate* isolate)
#if defined(OS_WIN)
: color_change_listener_(this)
#endif
{
Init(isolate); Init(isolate);
#if defined(OS_WIN) #if defined(OS_WIN)
InitializeWindow(); InitializeWindow();

View file

@ -24,7 +24,11 @@ namespace atom {
namespace api { namespace api {
class SystemPreferences : public mate::EventEmitter<SystemPreferences> { class SystemPreferences : public mate::EventEmitter<SystemPreferences>
#if defined(OS_WIN)
, public gfx::SysColorChangeListener
#endif
{
public: public:
static mate::Handle<SystemPreferences> Create(v8::Isolate* isolate); static mate::Handle<SystemPreferences> Create(v8::Isolate* isolate);
@ -43,8 +47,8 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences> {
void InitializeWindow(); void InitializeWindow();
void OnColorChanged(); // gfx::SysColorChangeListener:
void OnSysColorChange() override;
#elif defined(OS_MACOSX) #elif defined(OS_MACOSX)
using NotificationCallback = base::Callback< using NotificationCallback = base::Callback<
@ -101,9 +105,9 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences> {
std::string current_color_; std::string current_color_;
bool invertered_color_scheme_ = false; bool invertered_color_scheme_;
std::unique_ptr<gfx::ScopedSysColorChangeListener> color_change_listener_; gfx::ScopedSysColorChangeListener color_change_listener_;
#endif #endif
DISALLOW_COPY_AND_ASSIGN(SystemPreferences); DISALLOW_COPY_AND_ASSIGN(SystemPreferences);
}; };

View file

@ -19,21 +19,6 @@ const wchar_t kSystemPreferencesWindowClass[] =
namespace api { namespace api {
class SystemPreferencesColorChangeListener
: public gfx::SysColorChangeListener {
public:
explicit SystemPreferencesColorChangeListener(SystemPreferences* prefs)
: prefs_(prefs) {
}
void OnSysColorChange() {
prefs_->OnColorChanged();
}
private:
SystemPreferences* prefs_;
};
bool SystemPreferences::IsAeroGlassEnabled() { bool SystemPreferences::IsAeroGlassEnabled() {
return ui::win::IsAeroGlassEnabled(); return ui::win::IsAeroGlassEnabled();
} }
@ -57,6 +42,8 @@ std::string SystemPreferences::GetAccentColor() {
} }
void SystemPreferences::InitializeWindow() { void SystemPreferences::InitializeWindow() {
invertered_color_scheme_ = IsInvertedColorScheme();
WNDCLASSEX window_class; WNDCLASSEX window_class;
base::win::InitializeWindowClass( base::win::InitializeWindowClass(
kSystemPreferencesWindowClass, kSystemPreferencesWindowClass,
@ -74,10 +61,6 @@ void SystemPreferences::InitializeWindow() {
0, WS_POPUP, 0, 0, 0, 0, 0, 0, instance_, 0); 0, WS_POPUP, 0, 0, 0, 0, 0, 0, instance_, 0);
gfx::CheckWindowCreated(window_); gfx::CheckWindowCreated(window_);
gfx::SetWindowUserData(window_, this); gfx::SetWindowUserData(window_, this);
color_change_listener_.reset(
new gfx::ScopedSysColorChangeListener(
new SystemPreferencesColorChangeListener(this)));
} }
LRESULT CALLBACK SystemPreferences::WndProcStatic(HWND hwnd, LRESULT CALLBACK SystemPreferences::WndProcStatic(HWND hwnd,
@ -107,7 +90,7 @@ LRESULT CALLBACK SystemPreferences::WndProc(HWND hwnd,
return ::DefWindowProc(hwnd, message, wparam, lparam); return ::DefWindowProc(hwnd, message, wparam, lparam);
} }
void SystemPreferences::OnColorChanged() { void SystemPreferences::OnSysColorChange() {
bool new_invertered_color_scheme = IsInvertedColorScheme(); bool new_invertered_color_scheme = IsInvertedColorScheme();
if (new_invertered_color_scheme != invertered_color_scheme_) { if (new_invertered_color_scheme != invertered_color_scheme_) {
invertered_color_scheme_ = new_invertered_color_scheme; invertered_color_scheme_ = new_invertered_color_scheme;