diff --git a/atom/browser/api/atom_api_screen.cc b/atom/browser/api/atom_api_screen.cc index 65a11eed0cce3..452757d0f1943 100644 --- a/atom/browser/api/atom_api_screen.cc +++ b/atom/browser/api/atom_api_screen.cc @@ -52,6 +52,19 @@ std::vector MetricsToArray(uint32_t metrics) { return array; } +void DelayEmit(Screen* screen, + const base::StringPiece& name, + const display::Display& display) { + screen->Emit(name, display); +} + +void DelayEmitWithMetrics(Screen* screen, + const base::StringPiece& name, + const display::Display& display, + const std::vector& metrics) { + screen->Emit(name, display, metrics); +} + } // namespace Screen::Screen(v8::Isolate* isolate, display::Screen* screen) @@ -101,16 +114,23 @@ static gfx::Rect DIPToScreenRect(atom::NativeWindow* window, #endif void Screen::OnDisplayAdded(const display::Display& new_display) { - Emit("display-added", new_display); + base::ThreadTaskRunnerHandle::Get()->PostNonNestableTask( + FROM_HERE, base::Bind(&DelayEmit, base::Unretained(this), "display-added", + new_display)); } void Screen::OnDisplayRemoved(const display::Display& old_display) { - Emit("display-removed", old_display); + base::ThreadTaskRunnerHandle::Get()->PostNonNestableTask( + FROM_HERE, base::Bind(&DelayEmit, base::Unretained(this), + "display-removed", old_display)); } void Screen::OnDisplayMetricsChanged(const display::Display& display, uint32_t changed_metrics) { - Emit("display-metrics-changed", display, MetricsToArray(changed_metrics)); + base::ThreadTaskRunnerHandle::Get()->PostNonNestableTask( + FROM_HERE, base::Bind(&DelayEmitWithMetrics, base::Unretained(this), + "display-metrics-changed", display, + MetricsToArray(changed_metrics))); } // static