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

Side by Side Diff: ash/wm/workspace/frame_maximize_button.cc

Issue 10829226: Fixing many problems around the maximize bubble (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 4 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/wm/workspace/frame_maximize_button.h" 5 #include "ash/wm/workspace/frame_maximize_button.h"
6 6
7 #include "ash/launcher/launcher.h" 7 #include "ash/launcher/launcher.h"
8 #include "ash/screen_ash.h" 8 #include "ash/screen_ash.h"
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/wm/property_util.h" 10 #include "ash/wm/property_util.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 frame_(frame), 106 frame_(frame),
107 is_snap_enabled_(false), 107 is_snap_enabled_(false),
108 exceeded_drag_threshold_(false), 108 exceeded_drag_threshold_(false),
109 window_(NULL), 109 window_(NULL),
110 snap_type_(SNAP_NONE) { 110 snap_type_(SNAP_NONE) {
111 // TODO(sky): nuke this. It's temporary while we don't have good images. 111 // TODO(sky): nuke this. It's temporary while we don't have good images.
112 SetImageAlignment(ALIGN_LEFT, ALIGN_BOTTOM); 112 SetImageAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
113 } 113 }
114 114
115 FrameMaximizeButton::~FrameMaximizeButton() { 115 FrameMaximizeButton::~FrameMaximizeButton() {
116 maximizer_.reset();
sky 2012/08/07 23:11:18 Add a comment as to why this needs to be first.
Mr4D (OOO till 08-26) 2012/08/08 01:02:28 Done.
116 if (window_) 117 if (window_)
117 OnWindowDestroying(window_); 118 OnWindowDestroying(window_);
118 } 119 }
119 120
120 void FrameMaximizeButton::SnapButtonHovered(SnapType type) { 121 void FrameMaximizeButton::SnapButtonHovered(SnapType type) {
121 // Make sure to only show hover operations when no button is pressed and 122 // Make sure to only show hover operations when no button is pressed and
122 // a similar snap operation in progress does not get re-applied. 123 // a similar snap operation in progress does not get re-applied.
123 if (is_snap_enabled_ || (type == snap_type_ && snap_sizer_.get())) 124 if (is_snap_enabled_ || (type == snap_type_ && snap_sizer_.get()))
124 return; 125 return;
125 // Prime the mouse location with the center of the (local) button. 126 // Prime the mouse location with the center of the (local) button.
(...skipping 18 matching lines...) Expand all
144 return; 145 return;
145 default: 146 default:
146 // We should not come here. 147 // We should not come here.
147 NOTREACHED(); 148 NOTREACHED();
148 } 149 }
149 UpdateSnap(location); 150 UpdateSnap(location);
150 } 151 }
151 152
152 void FrameMaximizeButton::ExecuteSnapAndCloseMenu(SnapType snap_type) { 153 void FrameMaximizeButton::ExecuteSnapAndCloseMenu(SnapType snap_type) {
153 DCHECK_NE(snap_type_, SNAP_NONE); 154 DCHECK_NE(snap_type_, SNAP_NONE);
154 snap_type_ = snap_type; 155 // SNAP_MINIMIZE might destroy |this| for windows like the file manager.
sky 2012/08/07 23:11:18 This is too fragile. Can't the code be like Proces
Mr4D (OOO till 08-26) 2012/08/08 01:02:28 Okay. Changed it. However - I did not move the cas
155 Snap(); 156 // To avoid crashes we have therefore to execute that command at the end.
157 // All other commands need the snap_sizer to know the target size, so they
158 // have to be executed before we start destroying the rest.
159 if (snap_type != SNAP_MINIMIZE) {
160 snap_type_ = snap_type;
161 Snap();
162 }
156 // Remove any pending snap previews. 163 // Remove any pending snap previews.
157 SnapButtonHovered(SNAP_NONE); 164 SnapButtonHovered(SNAP_NONE);
158 // At this point the operation has been performed and the menu should be 165 // At this point the operation has been performed and the menu should be
159 // closed - if not, it'll get now closed. 166 // closed - if not, it'll get now closed.
160 maximizer_.reset(); 167 maximizer_.reset();
168 if (snap_type == SNAP_MINIMIZE) {
169 snap_type_ = snap_type;
170 Snap();
171 // |this| might now be destroyed.
172 }
161 } 173 }
162 174
163 void FrameMaximizeButton::DestroyMaximizeMenu() { 175 void FrameMaximizeButton::DestroyMaximizeMenu() {
164 maximizer_.reset(); 176 maximizer_.reset();
165 } 177 }
166 178
167 void FrameMaximizeButton::OnWindowBoundsChanged( 179 void FrameMaximizeButton::OnWindowBoundsChanged(
168 aura::Window* window, 180 aura::Window* window,
169 const gfx::Rect& old_bounds, 181 const gfx::Rect& old_bounds,
170 const gfx::Rect& new_bounds) { 182 const gfx::Rect& new_bounds) {
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 break; 485 break;
474 case SNAP_RESTORE: 486 case SNAP_RESTORE:
475 frame_->GetWidget()->Restore(); 487 frame_->GetWidget()->Restore();
476 break; 488 break;
477 case SNAP_NONE: 489 case SNAP_NONE:
478 NOTREACHED(); 490 NOTREACHED();
479 } 491 }
480 } 492 }
481 493
482 } // namespace ash 494 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698