Index: ash/wm/workspace/workspace_event_handler.cc |
diff --git a/ash/wm/workspace/workspace_event_handler.cc b/ash/wm/workspace/workspace_event_handler.cc |
index b46d3deff8357958da7b70cc2fe9afd16faaf4ab..b737962be701c88e2cedb096201da69e7d7cd543 100644 |
--- a/ash/wm/workspace/workspace_event_handler.cc |
+++ b/ash/wm/workspace/workspace_event_handler.cc |
@@ -9,7 +9,7 @@ |
#include "ash/shell_delegate.h" |
#include "ash/touch/touch_uma.h" |
#include "ash/wm/coordinate_conversion.h" |
-#include "ash/wm/property_util.h" |
+#include "ash/wm/window_state.h" |
#include "ash/wm/window_util.h" |
#include "ash/wm/workspace/workspace_window_resizer.h" |
#include "ui/aura/client/aura_constants.h" |
@@ -24,36 +24,29 @@ |
namespace ash { |
namespace { |
-void SingleAxisMaximize(aura::Window* window, |
+void SingleAxisMaximize(wm::WindowState* window_state, |
const gfx::Rect& maximize_rect_in_screen) { |
- gfx::Rect bounds_in_screen = |
- ScreenAsh::ConvertRectToScreen(window->parent(), window->bounds()); |
- SetRestoreBoundsInScreen(window, bounds_in_screen); |
- gfx::Rect bounds_in_parent = |
- ScreenAsh::ConvertRectFromScreen(window->parent(), |
- maximize_rect_in_screen); |
- window->SetBounds(bounds_in_parent); |
+ window_state->SaveCurrentBoundsForRestore(); |
+ window_state->SetBoundsInScreen(maximize_rect_in_screen); |
} |
-void SingleAxisUnmaximize(aura::Window* window, |
+void SingleAxisUnmaximize(wm::WindowState* window_state, |
const gfx::Rect& restore_bounds_in_screen) { |
- gfx::Rect restore_bounds = ScreenAsh::ConvertRectFromScreen( |
- window->parent(), restore_bounds_in_screen); |
- window->SetBounds(restore_bounds); |
- ClearRestoreBounds(window); |
+ window_state->SetBoundsInScreen(restore_bounds_in_screen); |
+ window_state->ClearRestoreBounds(); |
} |
-void ToggleMaximizedState(aura::Window* window) { |
- if (GetRestoreBoundsInScreen(window)) { |
- if (window->GetProperty(aura::client::kShowStateKey) == |
- ui::SHOW_STATE_NORMAL) { |
- window->SetBounds(GetRestoreBoundsInParent(window)); |
- ClearRestoreBounds(window); |
+void ToggleMaximizedState(wm::WindowState* window_state) { |
+ if (window_state->HasRestoreBounds()) { |
+ if (window_state->GetShowState() == ui::SHOW_STATE_NORMAL) { |
+ window_state->window()->SetBounds( |
+ window_state->GetRestoreBoundsInParent()); |
+ window_state->ClearRestoreBounds(); |
} else { |
- window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
+ window_state->Normalize(); |
} |
- } else if (wm::CanMaximizeWindow(window)) { |
- window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); |
+ } else if (window_state->CanMaximize()) { |
+ window_state->Maximize(); |
} |
} |
@@ -93,7 +86,7 @@ void WorkspaceEventHandler::OnMouseEvent(ui::MouseEvent* event) { |
ToplevelWindowEventHandler::OnMouseEvent(event); |
return; |
} |
- |
+ wm::WindowState* target_state = wm::GetWindowState(target); |
if (event->flags() & ui::EF_IS_DOUBLE_CLICK && |
event->IsOnlyLeftMouseButton() && |
target->delegate()->GetNonClientComponent(event->location()) == |
@@ -103,13 +96,13 @@ void WorkspaceEventHandler::OnMouseEvent(ui::MouseEvent* event) { |
destroyed_ = &destroyed; |
ash::Shell::GetInstance()->delegate()->RecordUserMetricsAction( |
ash::UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK); |
- ToggleMaximizedState(target); |
+ ToggleMaximizedState(target_state); |
if (destroyed) |
return; |
destroyed_ = NULL; |
} |
multi_window_resize_controller_.Hide(); |
- HandleVerticalResizeDoubleClick(target, event); |
+ HandleVerticalResizeDoubleClick(target_state, event); |
break; |
} |
default: |
@@ -130,7 +123,8 @@ void WorkspaceEventHandler::OnGestureEvent(ui::GestureEvent* event) { |
// TouchUMA::GESTURE_MAXIMIZE_DOUBLETAP is counted once. |
TouchUMA::GetInstance()->RecordGestureAction( |
TouchUMA::GESTURE_MAXIMIZE_DOUBLETAP); |
- ToggleMaximizedState(target); // |this| may be destroyed from here. |
+ // |this| may be destroyed from here. |
+ ToggleMaximizedState(wm::GetWindowState(target)); |
event->StopPropagation(); |
return; |
} else { |
@@ -143,50 +137,47 @@ void WorkspaceEventHandler::OnGestureEvent(ui::GestureEvent* event) { |
} |
void WorkspaceEventHandler::HandleVerticalResizeDoubleClick( |
- aura::Window* target, |
+ wm::WindowState* target, |
James Cook
2013/09/18 20:44:17
Are you sure you want to change target to a Window
oshima
2013/09/19 01:52:01
how does it look to you now?
James Cook
2013/09/19 03:49:53
Better, thanks.
|
ui::MouseEvent* event) { |
- gfx::Rect max_size(target->delegate()->GetMaximumSize()); |
- if (event->flags() & ui::EF_IS_DOUBLE_CLICK && |
- !wm::IsWindowMaximized(target)) { |
+ gfx::Rect max_size(target->window()->delegate()->GetMaximumSize()); |
+ if (event->flags() & ui::EF_IS_DOUBLE_CLICK && !target->IsMaximized()) { |
int component = |
- target->delegate()->GetNonClientComponent(event->location()); |
- gfx::Rect work_area = |
- Shell::GetScreen()->GetDisplayNearestWindow(target).work_area(); |
- const gfx::Rect* restore_bounds = |
- GetRestoreBoundsInScreen(target); |
+ target->window()->delegate()->GetNonClientComponent(event->location()); |
+ gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow( |
+ target->window()).work_area(); |
if (component == HTBOTTOM || component == HTTOP) { |
// Don't maximize vertically if the window has a max height defined. |
if (max_size.height() != 0) |
return; |
- if (restore_bounds && |
- (target->bounds().height() == work_area.height() && |
- target->bounds().y() == work_area.y())) { |
- SingleAxisUnmaximize(target, *restore_bounds); |
+ if (target->HasRestoreBounds() && |
+ (target->window()->bounds().height() == work_area.height() && |
+ target->window()->bounds().y() == work_area.y())) { |
+ SingleAxisUnmaximize(target, target->GetRestoreBoundsInScreen()); |
} else { |
- gfx::Point origin = target->bounds().origin(); |
- wm::ConvertPointToScreen(target->parent(), &origin); |
+ gfx::Point origin = target->window()->bounds().origin(); |
+ wm::ConvertPointToScreen(target->window()->parent(), &origin); |
SingleAxisMaximize(target, |
gfx::Rect(origin.x(), |
work_area.y(), |
- target->bounds().width(), |
+ target->window()->bounds().width(), |
work_area.height())); |
} |
} else if (component == HTLEFT || component == HTRIGHT) { |
// Don't maximize horizontally if the window has a max width defined. |
if (max_size.width() != 0) |
return; |
- if (restore_bounds && |
- (target->bounds().width() == work_area.width() && |
- target->bounds().x() == work_area.x())) { |
- SingleAxisUnmaximize(target, *restore_bounds); |
+ if (target->HasRestoreBounds() && |
+ (target->window()->bounds().width() == work_area.width() && |
+ target->window()->bounds().x() == work_area.x())) { |
+ SingleAxisUnmaximize(target, target->GetRestoreBoundsInScreen()); |
} else { |
- gfx::Point origin = target->bounds().origin(); |
- wm::ConvertPointToScreen(target->parent(), &origin); |
+ gfx::Point origin = target->window()->bounds().origin(); |
+ wm::ConvertPointToScreen(target->window()->parent(), &origin); |
SingleAxisMaximize(target, |
gfx::Rect(work_area.x(), |
origin.y(), |
work_area.width(), |
- target->bounds().height())); |
+ target->window()->bounds().height())); |
} |
} |
} |