Chromium Code Reviews| Index: components/exo/wayland/server.cc |
| diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc |
| index 1cb7b44091b8f6860f21e207cc2f9e0187103c83..af937d13ed7c29a85b6de9be6fcf17abefbcda83 100644 |
| --- a/components/exo/wayland/server.cc |
| +++ b/components/exo/wayland/server.cc |
| @@ -29,7 +29,6 @@ |
| #include <string> |
|
reveman
2017/02/09 04:50:16
I don't understand what the changes to this file a
Dominik Laskowski
2017/02/09 23:35:28
The code for delayed sending of display metrics wa
|
| #include <utility> |
| -#include "ash/common/shell_observer.h" |
| #include "ash/public/cpp/shell_window_ids.h" |
| #include "ash/shell.h" |
| #include "base/bind.h" |
| @@ -1089,8 +1088,6 @@ class WaylandPrimaryDisplayObserver : public display::DisplayObserver { |
| } |
| // Overridden from display::DisplayObserver: |
| - void OnDisplayAdded(const display::Display& new_display) override {} |
| - void OnDisplayRemoved(const display::Display& new_display) override {} |
| void OnDisplayMetricsChanged(const display::Display& display, |
| uint32_t changed_metrics) override { |
| if (display::Screen::GetScreen()->GetPrimaryDisplay().id() != display.id()) |
| @@ -2046,7 +2043,7 @@ class WaylandRemoteShell : public WMHelper::MaximizeModeObserver, |
| ? ZCR_REMOTE_SHELL_V1_LAYOUT_MODE_TABLET |
| : ZCR_REMOTE_SHELL_V1_LAYOUT_MODE_WINDOWED; |
| - SendPrimaryDisplayMetrics(); |
| + SendDisplayMetrics(); |
| SendActivated(helper->GetActiveWindow(), nullptr); |
| } |
| ~WaylandRemoteShell() override { |
| @@ -2068,40 +2065,29 @@ class WaylandRemoteShell : public WMHelper::MaximizeModeObserver, |
| } |
| // Overridden from display::DisplayObserver: |
| - void OnDisplayAdded(const display::Display& new_display) override {} |
| - void OnDisplayRemoved(const display::Display& new_display) override {} |
| void OnDisplayMetricsChanged(const display::Display& display, |
| uint32_t changed_metrics) override { |
| if (display::Screen::GetScreen()->GetPrimaryDisplay().id() != display.id()) |
| return; |
| - // No need to update when a primary dislpay has changed without bounds |
| + // No need to update when a primary display has changed without bounds |
| // change. See WaylandPrimaryDisplayObserver::OnDisplayMetricsChanged |
| // for more details. |
| if (changed_metrics & |
| (DISPLAY_METRIC_BOUNDS | DISPLAY_METRIC_DEVICE_SCALE_FACTOR | |
| DISPLAY_METRIC_ROTATION | DISPLAY_METRIC_WORK_AREA)) { |
| - SendDisplayMetrics(display); |
| + ScheduleSendDisplayMetrics(); |
| } |
| } |
| // Overridden from WMHelper::MaximizeModeObserver: |
| void OnMaximizeModeStarted() override { |
| layout_mode_ = ZCR_REMOTE_SHELL_V1_LAYOUT_MODE_TABLET; |
| - |
| - send_configure_after_layout_change_ = true; |
| - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| - FROM_HERE, base::Bind(&WaylandRemoteShell::MaybeSendConfigure, |
| - weak_ptr_factory_.GetWeakPtr()), |
| - base::TimeDelta::FromMilliseconds(kConfigureDelayAfterLayoutSwitchMs)); |
| + ScheduleSendDisplayMetrics(kConfigureDelayAfterLayoutSwitchMs); |
| } |
| void OnMaximizeModeEnded() override { |
| layout_mode_ = ZCR_REMOTE_SHELL_V1_LAYOUT_MODE_WINDOWED; |
| - send_configure_after_layout_change_ = true; |
| - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| - FROM_HERE, base::Bind(&WaylandRemoteShell::MaybeSendConfigure, |
| - weak_ptr_factory_.GetWeakPtr()), |
| - base::TimeDelta::FromMilliseconds(kConfigureDelayAfterLayoutSwitchMs)); |
| + ScheduleSendDisplayMetrics(kConfigureDelayAfterLayoutSwitchMs); |
| } |
| // Overridden from WMHelper::ActivationObserver: |
| @@ -2111,27 +2097,29 @@ class WaylandRemoteShell : public WMHelper::MaximizeModeObserver, |
| } |
| private: |
| - void SendPrimaryDisplayMetrics() { |
| - const display::Display primary = |
| - display::Screen::GetScreen()->GetPrimaryDisplay(); |
| - |
| - SendDisplayMetrics(primary); |
| + void ScheduleSendDisplayMetrics(int delay_ms = 0) { |
| + needs_send_display_metrics_ = true; |
| + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| + FROM_HERE, base::Bind(&WaylandRemoteShell::SendDisplayMetrics, |
| + weak_ptr_factory_.GetWeakPtr()), |
| + base::TimeDelta::FromMilliseconds(delay_ms)); |
| } |
| - void MaybeSendConfigure() { |
| - if (send_configure_after_layout_change_) |
| - SendPrimaryDisplayMetrics(); |
| - } |
| + void SendDisplayMetrics() { |
| + if (!needs_send_display_metrics_) |
| + return; |
| + needs_send_display_metrics_ = false; |
| - void SendDisplayMetrics(const display::Display& display) { |
| - send_configure_after_layout_change_ = false; |
| + const display::Screen* screen = display::Screen::GetScreen(); |
| + const display::Display primary = screen->GetPrimaryDisplay(); |
| - const gfx::Insets& work_area_insets = display.GetWorkAreaInsets(); |
| + gfx::Size size = primary.size(); |
| + const gfx::Insets& work_area_insets = primary.GetWorkAreaInsets(); |
| zcr_remote_shell_v1_send_configuration_changed( |
| - remote_shell_resource_, display.size().width(), display.size().height(), |
| - OutputTransform(display.rotation()), |
| - wl_fixed_from_double(display.device_scale_factor()), |
| + remote_shell_resource_, size.width(), size.height(), |
| + OutputTransform(primary.rotation()), |
| + wl_fixed_from_double(primary.device_scale_factor()), |
| work_area_insets.left(), work_area_insets.top(), |
| work_area_insets.right(), work_area_insets.bottom(), layout_mode_); |
| wl_client_flush(wl_resource_get_client(remote_shell_resource_)); |
| @@ -2176,7 +2164,7 @@ class WaylandRemoteShell : public WMHelper::MaximizeModeObserver, |
| // The remote shell resource associated with observer. |
| wl_resource* const remote_shell_resource_; |
| - bool send_configure_after_layout_change_ = false; |
| + bool needs_send_display_metrics_ = true; |
| int layout_mode_ = ZCR_REMOTE_SHELL_V1_LAYOUT_MODE_WINDOWED; |