Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(459)

Unified Diff: ash/wm/window_state.cc

Issue 68033003: Undocks window first before side-snapping bounds (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Undocks window first before side-snapping bounds (comments) Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/wm/window_state.cc
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc
index 1a06a58da1bb0a0b876bb2c64457d10d234feab1..f03cf9c7ab739558ee35fe1666012812afe5bcb9 100644
--- a/ash/wm/window_state.cc
+++ b/ash/wm/window_state.cc
@@ -88,6 +88,11 @@ bool WindowState::IsDocked() const {
window_->parent()->id() == internal::kShellWindowId_DockedContainer;
}
+bool WindowState::IsSnapped() const {
+ return window_show_type_ == SHOW_TYPE_LEFT_SNAPPED ||
+ window_show_type_ == SHOW_TYPE_RIGHT_SNAPPED;
+}
+
bool WindowState::CanMaximize() const {
return window_->GetProperty(aura::client::kCanMaximizeKey);
}
@@ -136,7 +141,7 @@ void WindowState::SnapLeft(const gfx::Rect& bounds) {
}
void WindowState::SnapRight(const gfx::Rect& bounds) {
- SnapWindow(SHOW_TYPE_LEFT_SNAPPED, bounds);
+ SnapWindow(SHOW_TYPE_RIGHT_SNAPPED, bounds);
}
void WindowState::Minimize() {
@@ -159,6 +164,7 @@ void WindowState::Deactivate() {
}
void WindowState::Restore() {
+ SetWindowShowTypeUnsnapped();
pkotwicz 2013/11/27 06:21:57 Nit: SetWindowShowTypeUnsapped() now has a single
varkha 2013/11/27 06:38:54 Done.
window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
}
@@ -265,24 +271,38 @@ void WindowState::OnWindowDestroying(aura::Window* window) {
void WindowState::SnapWindow(WindowShowType left_or_right,
const gfx::Rect& bounds) {
- if (IsMaximizedOrFullscreen()) {
- // Before we can set the bounds we need to restore the window.
- // Restoring the window will set the window to its restored bounds.
- // To avoid an unnecessary bounds changes (which may have side effects)
- // we set the restore bounds to the bounds we want, restore the window,
- // then reset the restore bounds. This way no unnecessary bounds
- // changes occurs and the original restore bounds is remembered.
- gfx::Rect restore_bounds_in_screen =
- GetRestoreBoundsInScreen();
- SetRestoreBoundsInParent(bounds);
+ gfx::Rect restore_bounds_in_screen(HasRestoreBounds() ?
+ GetRestoreBoundsInScreen() : window_->GetBoundsInScreen());
+ // Before we can set the bounds we need to restore the window.
pkotwicz 2013/11/27 06:21:57 This comment needs to be updated.
varkha 2013/11/27 06:38:54 Done.
+ // Restoring the window will set the window to its restored bounds.
+ // To avoid an unnecessary bounds changes (which may have side effects)
+ // we set the restore bounds to the bounds we want, restore the window,
+ // then recover the restore bounds. This way no unnecessary bounds
+ // changes occurs and the original restore bounds are remembered.
+ SetRestoreBoundsInParent(bounds);
+
+ bool was_maximized = IsMaximizedOrFullscreen();
+ // Restore will cause OnWindowPropertyChanged so it needs to be done
pkotwicz 2013/11/27 06:21:57 Nit: OnWindowPropertyChanged()
varkha 2013/11/27 06:38:54 Done.
+ // before notifying about show type change to snapped.
pkotwicz 2013/11/27 06:21:57 Nit: about show type change to snapped -> that the
varkha 2013/11/27 06:38:54 Done.
+ if (was_maximized)
Restore();
- SetRestoreBoundsInScreen(restore_bounds_in_screen);
- } else {
- window_->SetBounds(bounds);
- }
DCHECK(left_or_right == SHOW_TYPE_LEFT_SNAPPED ||
left_or_right == SHOW_TYPE_RIGHT_SNAPPED);
+ WindowShowType old_type = window_show_type_;
window_show_type_ = left_or_right;
+ FOR_EACH_OBSERVER(
+ WindowStateObserver, observer_list_,
+ OnWindowShowTypeChanged(this, old_type));
+ // TODO(varkha): Ideally the bounds should be changed in a LayoutManager upon
+ // observing the WindowShowType change.
+ if (!was_maximized)
pkotwicz 2013/11/27 06:21:57 Is there any harm in always setting the bounds? (I
varkha 2013/11/27 06:38:54 In opposite case the bounds are already set correc
+ window_->SetBounds(bounds);
+ SetRestoreBoundsInScreen(restore_bounds_in_screen);
+}
+
+void WindowState::SetWindowShowTypeUnsnapped() {
+ if (IsSnapped())
+ window_show_type_ = SHOW_TYPE_NORMAL;
}
WindowState* GetActiveWindowState() {

Powered by Google App Engine
This is Rietveld 408576698