| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <math.h> | 5 #include <math.h> |
| 6 #include <set> | 6 #include <set> |
| 7 | 7 |
| 8 #include "chrome/browser/views/tabs/dragged_tab_controller.h" | 8 #include "chrome/browser/views/tabs/dragged_tab_controller.h" |
| 9 | 9 |
| 10 #include "chrome/browser/browser_window.h" | 10 #include "chrome/browser/browser_window.h" |
| 11 #include "chrome/browser/tab_contents/tab_contents.h" | 11 #include "chrome/browser/tab_contents/tab_contents.h" |
| 12 #include "chrome/browser/metrics/user_metrics.h" | 12 #include "chrome/browser/metrics/user_metrics.h" |
| 13 #include "chrome/browser/views/frame/browser_view.h" | 13 #include "chrome/browser/views/frame/browser_view.h" |
| 14 #include "chrome/browser/views/tabs/dragged_tab_view.h" | 14 #include "chrome/browser/views/tabs/dragged_tab_view.h" |
| 15 #include "chrome/browser/views/tabs/hwnd_photobooth.h" | 15 #include "chrome/browser/views/tabs/hwnd_photobooth.h" |
| 16 #include "chrome/browser/views/tabs/tab.h" | 16 #include "chrome/browser/views/tabs/tab.h" |
| 17 #include "chrome/browser/views/tabs/tab_strip.h" | 17 #include "chrome/browser/views/tabs/tab_strip.h" |
| 18 #include "chrome/browser/tab_contents/web_contents.h" | 18 #include "chrome/browser/tab_contents/web_contents.h" |
| 19 #include "chrome/common/animation.h" | 19 #include "chrome/common/animation.h" |
| 20 #include "chrome/common/gfx/chrome_canvas.h" | 20 #include "chrome/common/gfx/chrome_canvas.h" |
| 21 #include "chrome/common/notification_service.h" | 21 #include "chrome/common/notification_service.h" |
| 22 #include "chrome/common/resource_bundle.h" |
| 22 #include "chrome/views/event.h" | 23 #include "chrome/views/event.h" |
| 23 #include "chrome/views/root_view.h" | 24 #include "chrome/views/root_view.h" |
| 25 #include "grit/theme_resources.h" |
| 24 #include "skia/include/SkBitmap.h" | 26 #include "skia/include/SkBitmap.h" |
| 25 | 27 |
| 26 static const int kHorizontalMoveThreshold = 16; // pixels | 28 static const int kHorizontalMoveThreshold = 16; // pixels |
| 27 | 29 |
| 28 namespace { | 30 namespace { |
| 29 | 31 |
| 30 // Horizontal width of DockView. The height is 3/4 of this. If you change this, | |
| 31 // be sure and update the constants in DockInfo (kEnableDeltaX/kEnableDeltaY). | |
| 32 const int kDropWindowSize = 100; | |
| 33 | |
| 34 // Delay, in ms, during dragging before we bring a window to front. | 32 // Delay, in ms, during dragging before we bring a window to front. |
| 35 const int kBringToFrontDelay = 750; | 33 const int kBringToFrontDelay = 750; |
| 36 | 34 |
| 37 // TODO (glen): nuke this class in favor of something pretty. Consider this | 35 // Radius of the rect drawn by DockView. |
| 38 // class a placeholder for the real thing. | 36 const int kRoundedRectRadius = 4; |
| 37 |
| 38 // Spacing between tab icons when DockView is showing a docking location that |
| 39 // contains more than one tab. |
| 40 const int kTabSpacing = 4; |
| 41 |
| 42 // DockView is the view responsible for giving a visual indicator of where a |
| 43 // dock is going to occur. |
| 44 |
| 39 class DockView : public views::View { | 45 class DockView : public views::View { |
| 40 public: | 46 public: |
| 41 explicit DockView(DockInfo::Type type) | 47 explicit DockView(DockInfo::Type type) : type_(type) {} |
| 42 : size_(kDropWindowSize), | |
| 43 rect_radius_(4), | |
| 44 stroke_size_(4), | |
| 45 inner_stroke_size_(2), | |
| 46 inner_margin_(8), | |
| 47 inner_padding_(8), | |
| 48 type_(type) {} | |
| 49 | 48 |
| 50 virtual gfx::Size GetPreferredSize() { | 49 virtual gfx::Size GetPreferredSize() { |
| 51 return gfx::Size(size_, size_); | 50 return gfx::Size(DockInfo::popup_width(), DockInfo::popup_height()); |
| 52 } | 51 } |
| 53 | 52 |
| 54 virtual void PaintBackground(ChromeCanvas* canvas) { | 53 virtual void PaintBackground(ChromeCanvas* canvas) { |
| 55 int h = size_ * 3 / 4; | 54 SkRect outer_rect = { SkIntToScalar(0), SkIntToScalar(0), |
| 56 int outer_x = (width() - size_) / 2; | 55 SkIntToScalar(width()), |
| 57 int outer_y = (height() - h) / 2; | 56 SkIntToScalar(height()) }; |
| 58 switch (type_) { | |
| 59 case DockInfo::MAXIMIZE: | |
| 60 outer_y = 0; | |
| 61 break; | |
| 62 case DockInfo::LEFT_HALF: | |
| 63 outer_x = 0; | |
| 64 break; | |
| 65 case DockInfo::RIGHT_HALF: | |
| 66 outer_x = width() - size_; | |
| 67 break; | |
| 68 case DockInfo::BOTTOM_HALF: | |
| 69 outer_y = height() - h; | |
| 70 break; | |
| 71 default: | |
| 72 break; | |
| 73 } | |
| 74 | |
| 75 SkRect outer_rect = { SkIntToScalar(outer_x), | |
| 76 SkIntToScalar(outer_y), | |
| 77 SkIntToScalar(outer_x + size_), | |
| 78 SkIntToScalar(outer_y + h) }; | |
| 79 | 57 |
| 80 // Fill the background rect. | 58 // Fill the background rect. |
| 81 SkPaint paint; | 59 SkPaint paint; |
| 82 paint.setColor(SkColorSetRGB(58, 58, 58)); | 60 paint.setColor(SkColorSetRGB(108, 108, 108)); |
| 83 paint.setStyle(SkPaint::kFill_Style); | 61 paint.setStyle(SkPaint::kFill_Style); |
| 84 canvas->drawRoundRect(outer_rect, SkIntToScalar(rect_radius_), | 62 canvas->drawRoundRect(outer_rect, SkIntToScalar(kRoundedRectRadius), |
| 85 SkIntToScalar(rect_radius_), paint); | 63 SkIntToScalar(kRoundedRectRadius), paint); |
| 86 | 64 |
| 87 // Outline the background rect. | 65 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 88 paint.setFlags(SkPaint::kAntiAlias_Flag); | |
| 89 paint.setStrokeWidth(SkIntToScalar(stroke_size_)); | |
| 90 paint.setColor(SK_ColorBLACK); | |
| 91 paint.setStyle(SkPaint::kStroke_Style); | |
| 92 canvas->drawRoundRect(outer_rect, SkIntToScalar(rect_radius_), | |
| 93 SkIntToScalar(rect_radius_), paint); | |
| 94 | 66 |
| 95 // Then the inner rect. | 67 SkBitmap* high_icon = rb.GetBitmapNamed(IDR_DOCK_HIGH); |
| 96 int inner_x = outer_x + inner_margin_; | 68 SkBitmap* wide_icon = rb.GetBitmapNamed(IDR_DOCK_WIDE); |
| 97 int inner_y = outer_y + inner_margin_; | 69 |
| 98 int inner_width = | |
| 99 (size_ - inner_margin_ - inner_margin_ - inner_padding_) / 2; | |
| 100 int inner_height = (h - inner_margin_ - inner_margin_); | |
| 101 switch (type_) { | 70 switch (type_) { |
| 102 case DockInfo::LEFT_OF_WINDOW: | 71 case DockInfo::LEFT_OF_WINDOW: |
| 72 case DockInfo::LEFT_HALF: |
| 73 canvas->DrawBitmapInt(*high_icon, |
| 74 width() / 2 - high_icon->width() - kTabSpacing / 2, |
| 75 (height() - high_icon->height()) / 2); |
| 76 if (type_ == DockInfo::LEFT_OF_WINDOW) { |
| 77 DrawBitmapWithAlpha(canvas, *high_icon, width() / 2 + kTabSpacing / 2, |
| 78 (height() - high_icon->height()) / 2); |
| 79 } |
| 80 break; |
| 81 |
| 82 |
| 103 case DockInfo::RIGHT_OF_WINDOW: | 83 case DockInfo::RIGHT_OF_WINDOW: |
| 104 DrawWindow(canvas, inner_x, inner_y, inner_width, inner_height); | 84 case DockInfo::RIGHT_HALF: |
| 105 DrawWindow(canvas, inner_x + inner_width + inner_padding_, inner_y, | 85 canvas->DrawBitmapInt(*high_icon, width() / 2 + kTabSpacing / 2, |
| 106 inner_width, inner_height); | 86 (height() - high_icon->height()) / 2); |
| 87 if (type_ == DockInfo::RIGHT_OF_WINDOW) { |
| 88 DrawBitmapWithAlpha(canvas, *high_icon, |
| 89 width() / 2 - high_icon->width() - kTabSpacing / 2, |
| 90 (height() - high_icon->height()) / 2); |
| 91 } |
| 107 break; | 92 break; |
| 108 | 93 |
| 109 case DockInfo::TOP_OF_WINDOW: | 94 case DockInfo::TOP_OF_WINDOW: |
| 110 case DockInfo::BOTTOM_OF_WINDOW: | 95 canvas->DrawBitmapInt(*wide_icon, (width() - wide_icon->width()) / 2, |
| 111 inner_height = | 96 height() / 2 - high_icon->height()); |
| 112 (h - inner_margin_ - inner_margin_ - inner_padding_) / 2; | |
| 113 inner_width += inner_width + inner_padding_; | |
| 114 DrawWindow(canvas, inner_x, inner_y, inner_width, inner_height); | |
| 115 DrawWindow(canvas, inner_x, inner_y + inner_height + inner_padding_, | |
| 116 inner_width, inner_height); | |
| 117 break; | 97 break; |
| 118 | 98 |
| 119 case DockInfo::MAXIMIZE: | 99 case DockInfo::MAXIMIZE: { |
| 120 inner_width += inner_width + inner_padding_; | 100 SkBitmap* max_icon = rb.GetBitmapNamed(IDR_DOCK_MAX); |
| 121 DrawWindow(canvas, inner_x, inner_y, inner_width, inner_height); | 101 canvas->DrawBitmapInt(*max_icon, (width() - max_icon->width()) / 2, |
| 102 (height() - max_icon->height()) / 2); |
| 122 break; | 103 break; |
| 123 | 104 } |
| 124 case DockInfo::LEFT_HALF: | |
| 125 DrawWindow(canvas, inner_x, inner_y, inner_width, inner_height); | |
| 126 break; | |
| 127 | |
| 128 case DockInfo::RIGHT_HALF: | |
| 129 DrawWindow(canvas, inner_x + inner_width + inner_padding_, inner_y, | |
| 130 inner_width, inner_height); | |
| 131 break; | |
| 132 | 105 |
| 133 case DockInfo::BOTTOM_HALF: | 106 case DockInfo::BOTTOM_HALF: |
| 134 inner_height = | 107 case DockInfo::BOTTOM_OF_WINDOW: |
| 135 (h - inner_margin_ - inner_margin_ - inner_padding_) / 2; | 108 canvas->DrawBitmapInt(*wide_icon, (width() - wide_icon->width()) / 2, |
| 136 inner_width += inner_width + inner_padding_; | 109 height() / 2 + kTabSpacing / 2); |
| 137 DrawWindow(canvas, inner_x, inner_y + inner_height + inner_padding_, | 110 if (type_ == DockInfo::BOTTOM_OF_WINDOW) { |
| 138 inner_width, inner_height); | 111 DrawBitmapWithAlpha(canvas, *wide_icon, |
| 112 (width() - wide_icon->width()) / 2, |
| 113 height() / 2 - kTabSpacing / 2 - wide_icon->height()); |
| 114 } |
| 139 break; | 115 break; |
| 140 } | 116 } |
| 141 } | 117 } |
| 142 | 118 |
| 143 private: | 119 private: |
| 144 void DrawWindow(ChromeCanvas* canvas, int x, int y, int w, int h) { | 120 void DrawBitmapWithAlpha(ChromeCanvas* canvas, const SkBitmap& image, |
| 145 canvas->FillRectInt(SkColorSetRGB(160, 160, 160), x, y, w, h); | 121 int x, int y) { |
| 146 | |
| 147 SkPaint paint; | 122 SkPaint paint; |
| 148 paint.setStrokeWidth(SkIntToScalar(inner_stroke_size_)); | 123 paint.setAlpha(128); |
| 149 paint.setColor(SK_ColorWHITE); | 124 canvas->DrawBitmapInt(image, x, y, paint); |
| 150 paint.setStyle(SkPaint::kStroke_Style); | |
| 151 SkRect rect = { SkIntToScalar(x), SkIntToScalar(y), SkIntToScalar(x + w), | |
| 152 SkIntToScalar(y + h) }; | |
| 153 canvas->drawRect(rect, paint); | |
| 154 } | 125 } |
| 155 | 126 |
| 156 int size_; | |
| 157 int rect_radius_; | |
| 158 int stroke_size_; | |
| 159 int inner_stroke_size_; | |
| 160 int inner_margin_; | |
| 161 int inner_padding_; | |
| 162 DockInfo::Type type_; | 127 DockInfo::Type type_; |
| 163 | 128 |
| 164 DISALLOW_COPY_AND_ASSIGN(DockView); | 129 DISALLOW_COPY_AND_ASSIGN(DockView); |
| 165 }; | 130 }; |
| 166 | 131 |
| 167 gfx::Point ConvertScreenPointToTabStripPoint(TabStrip* tabstrip, | 132 gfx::Point ConvertScreenPointToTabStripPoint(TabStrip* tabstrip, |
| 168 const gfx::Point& screen_point) { | 133 const gfx::Point& screen_point) { |
| 169 gfx::Point tabstrip_topleft; | 134 gfx::Point tabstrip_topleft; |
| 170 views::View::ConvertPointToScreen(tabstrip, &tabstrip_topleft); | 135 views::View::ConvertPointToScreen(tabstrip, &tabstrip_topleft); |
| 171 return gfx::Point(screen_point.x() - tabstrip_topleft.x(), | 136 return gfx::Point(screen_point.x() - tabstrip_topleft.x(), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 182 // a window with a DockView in it. Two animations are used that correspond to | 147 // a window with a DockView in it. Two animations are used that correspond to |
| 183 // the state of DockInfo::in_enable_area. | 148 // the state of DockInfo::in_enable_area. |
| 184 class DraggedTabController::DockDisplayer : public AnimationDelegate { | 149 class DraggedTabController::DockDisplayer : public AnimationDelegate { |
| 185 public: | 150 public: |
| 186 DockDisplayer(DraggedTabController* controller, | 151 DockDisplayer(DraggedTabController* controller, |
| 187 const DockInfo& info) | 152 const DockInfo& info) |
| 188 : controller_(controller), | 153 : controller_(controller), |
| 189 popup_(NULL), | 154 popup_(NULL), |
| 190 popup_hwnd_(NULL), | 155 popup_hwnd_(NULL), |
| 191 #pragma warning(suppress: 4355) // Okay to pass "this" here. | 156 #pragma warning(suppress: 4355) // Okay to pass "this" here. |
| 192 hot_animation_(this), | 157 animation_(this), |
| 193 enable_animation_(this), | |
| 194 hidden_(false), | 158 hidden_(false), |
| 195 in_enable_area_(info.in_enable_area()) { | 159 in_enable_area_(info.in_enable_area()) { |
| 196 gfx::Rect bounds(info.hot_spot().x() - kDropWindowSize / 2, | |
| 197 info.hot_spot().y() - kDropWindowSize / 2, | |
| 198 kDropWindowSize, kDropWindowSize); | |
| 199 switch (info.type()) { | |
| 200 case DockInfo::MAXIMIZE: | |
| 201 bounds.Offset(0, kDropWindowSize / 2); | |
| 202 break; | |
| 203 case DockInfo::LEFT_HALF: | |
| 204 bounds.Offset(kDropWindowSize / 2, 0); | |
| 205 break; | |
| 206 case DockInfo::RIGHT_HALF: | |
| 207 bounds.Offset(-kDropWindowSize / 2, 0); | |
| 208 break; | |
| 209 case DockInfo::BOTTOM_HALF: | |
| 210 bounds.Offset(0, -kDropWindowSize / 2); | |
| 211 break; | |
| 212 default: | |
| 213 break; | |
| 214 } | |
| 215 | |
| 216 popup_ = new views::WidgetWin; | 160 popup_ = new views::WidgetWin; |
| 217 popup_->set_window_style(WS_POPUP); | 161 popup_->set_window_style(WS_POPUP); |
| 218 popup_->set_window_ex_style(WS_EX_LAYERED | WS_EX_TOOLWINDOW | | 162 popup_->set_window_ex_style(WS_EX_LAYERED | WS_EX_TOOLWINDOW | |
| 219 WS_EX_TOPMOST); | 163 WS_EX_TOPMOST); |
| 220 popup_->SetLayeredAlpha(0x00); | 164 popup_->SetLayeredAlpha(0x00); |
| 221 popup_->Init(NULL, bounds, false); | 165 popup_->Init(NULL, info.GetPopupRect(), false); |
| 222 popup_->SetContentsView(new DockView(info.type())); | 166 popup_->SetContentsView(new DockView(info.type())); |
| 223 hot_animation_.Show(); | |
| 224 if (info.in_enable_area()) | 167 if (info.in_enable_area()) |
| 225 enable_animation_.Show(); | 168 animation_.Reset(1); |
| 169 else |
| 170 animation_.Show(); |
| 226 popup_->SetWindowPos(HWND_TOP, 0, 0, 0, 0, | 171 popup_->SetWindowPos(HWND_TOP, 0, 0, 0, 0, |
| 227 SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOMOVE | SWP_SHOWWINDOW); | 172 SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOMOVE | SWP_SHOWWINDOW); |
| 228 popup_hwnd_ = popup_->GetHWND(); | 173 popup_hwnd_ = popup_->GetHWND(); |
| 229 } | 174 } |
| 230 | 175 |
| 231 ~DockDisplayer() { | 176 ~DockDisplayer() { |
| 232 if (controller_) | 177 if (controller_) |
| 233 controller_->DockDisplayerDestroyed(this); | 178 controller_->DockDisplayerDestroyed(this); |
| 234 } | 179 } |
| 235 | 180 |
| 236 // Updates the state based on |in_enable_area|. | 181 // Updates the state based on |in_enable_area|. |
| 237 void UpdateInEnabledArea(bool in_enable_area) { | 182 void UpdateInEnabledArea(bool in_enable_area) { |
| 238 if (in_enable_area != in_enable_area_) { | 183 if (in_enable_area != in_enable_area_) { |
| 239 in_enable_area_ = in_enable_area; | 184 in_enable_area_ = in_enable_area; |
| 240 if (!in_enable_area_) | 185 UpdateLayeredAlpha(); |
| 241 enable_animation_.Hide(); | |
| 242 else | |
| 243 enable_animation_.Show(); | |
| 244 } | 186 } |
| 245 } | 187 } |
| 246 | 188 |
| 247 // Resets the reference to the hosting DraggedTabController. This is invoked | 189 // Resets the reference to the hosting DraggedTabController. This is invoked |
| 248 // when the DraggedTabController is destoryed. | 190 // when the DraggedTabController is destoryed. |
| 249 void clear_controller() { controller_ = NULL; } | 191 void clear_controller() { controller_ = NULL; } |
| 250 | 192 |
| 251 // HWND of the window we create. | 193 // HWND of the window we create. |
| 252 HWND popup_hwnd() { return popup_hwnd_; } | 194 HWND popup_hwnd() { return popup_hwnd_; } |
| 253 | 195 |
| 254 // Starts the hide animation. When the window is closed the | 196 // Starts the hide animation. When the window is closed the |
| 255 // DraggedTabController is notified by way of the DockDisplayerDestroyed | 197 // DraggedTabController is notified by way of the DockDisplayerDestroyed |
| 256 // method | 198 // method |
| 257 void Hide() { | 199 void Hide() { |
| 258 if (hidden_) | 200 if (hidden_) |
| 259 return; | 201 return; |
| 260 | 202 |
| 261 if (!popup_) { | 203 if (!popup_) { |
| 262 delete this; | 204 delete this; |
| 263 return; | 205 return; |
| 264 } | 206 } |
| 265 hidden_ = true; | 207 hidden_ = true; |
| 266 enable_animation_.Hide(); | 208 animation_.Hide(); |
| 267 hot_animation_.Hide(); | |
| 268 } | 209 } |
| 269 | 210 |
| 270 virtual void AnimationProgressed(const Animation* animation) { | 211 virtual void AnimationProgressed(const Animation* animation) { |
| 271 popup_->SetLayeredAlpha( | 212 UpdateLayeredAlpha(); |
| 272 static_cast<BYTE>((hot_animation_.GetCurrentValue() + | |
| 273 enable_animation_.GetCurrentValue()) / 2 * 255.0)); | |
| 274 popup_->GetRootView()->SchedulePaint(); | |
| 275 } | 213 } |
| 276 | 214 |
| 277 virtual void AnimationEnded(const Animation* animation) { | 215 virtual void AnimationEnded(const Animation* animation) { |
| 278 if (!hidden_) | 216 if (!hidden_) |
| 279 return; | 217 return; |
| 280 popup_->Close(); | 218 popup_->Close(); |
| 281 delete this; | 219 delete this; |
| 282 return; | 220 } |
| 221 |
| 222 virtual void UpdateLayeredAlpha() { |
| 223 double scale = in_enable_area_ ? 1 : .5; |
| 224 popup_->SetLayeredAlpha( |
| 225 static_cast<BYTE>(animation_.GetCurrentValue() * scale * 255.0)); |
| 226 popup_->GetRootView()->SchedulePaint(); |
| 283 } | 227 } |
| 284 | 228 |
| 285 private: | 229 private: |
| 286 // DraggedTabController that created us. | 230 // DraggedTabController that created us. |
| 287 DraggedTabController* controller_; | 231 DraggedTabController* controller_; |
| 288 | 232 |
| 289 // Window we're showing. | 233 // Window we're showing. |
| 290 views::WidgetWin* popup_; | 234 views::WidgetWin* popup_; |
| 291 | 235 |
| 292 // HWND of |popup_|. We cache this to avoid the possibility of invoking a | 236 // HWND of |popup_|. We cache this to avoid the possibility of invoking a |
| 293 // method on popup_ after we close it. | 237 // method on popup_ after we close it. |
| 294 HWND popup_hwnd_; | 238 HWND popup_hwnd_; |
| 295 | 239 |
| 296 // Animation corresponding to !DockInfo::in_enable_area. | 240 // Animation for when first made visible. |
| 297 SlideAnimation hot_animation_; | 241 SlideAnimation animation_; |
| 298 | |
| 299 // Animation corresponding to DockInfo::in_enable_area. | |
| 300 SlideAnimation enable_animation_; | |
| 301 | 242 |
| 302 // Have we been hidden? | 243 // Have we been hidden? |
| 303 bool hidden_; | 244 bool hidden_; |
| 304 | 245 |
| 305 // Value of DockInfo::in_enable_area. | 246 // Value of DockInfo::in_enable_area. |
| 306 bool in_enable_area_; | 247 bool in_enable_area_; |
| 307 }; | 248 }; |
| 308 | 249 |
| 309 /////////////////////////////////////////////////////////////////////////////// | 250 /////////////////////////////////////////////////////////////////////////////// |
| 310 // DraggedTabController, public: | 251 // DraggedTabController, public: |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 } | 494 } |
| 554 } | 495 } |
| 555 } else if (dock_info_.type() != DockInfo::NONE && | 496 } else if (dock_info_.type() != DockInfo::NONE && |
| 556 !dock_controllers_.empty()) { | 497 !dock_controllers_.empty()) { |
| 557 // Current dock position is the same as last, update the controller's | 498 // Current dock position is the same as last, update the controller's |
| 558 // in_enable_area state as it may have changed. | 499 // in_enable_area state as it may have changed. |
| 559 dock_controllers_.back()->UpdateInEnabledArea(dock_info_.in_enable_area()); | 500 dock_controllers_.back()->UpdateInEnabledArea(dock_info_.in_enable_area()); |
| 560 } | 501 } |
| 561 } | 502 } |
| 562 | 503 |
| 563 | |
| 564 void DraggedTabController::ChangeDraggedContents(TabContents* new_contents) { | 504 void DraggedTabController::ChangeDraggedContents(TabContents* new_contents) { |
| 565 if (dragged_contents_) { | 505 if (dragged_contents_) { |
| 566 NotificationService::current()->RemoveObserver( | 506 NotificationService::current()->RemoveObserver( |
| 567 this, | 507 this, |
| 568 NotificationType::TAB_CONTENTS_DESTROYED, | 508 NotificationType::TAB_CONTENTS_DESTROYED, |
| 569 Source<TabContents>(dragged_contents_)); | 509 Source<TabContents>(dragged_contents_)); |
| 570 if (original_delegate_) | 510 if (original_delegate_) |
| 571 dragged_contents_->set_delegate(original_delegate_); | 511 dragged_contents_->set_delegate(original_delegate_); |
| 572 } | 512 } |
| 573 original_delegate_ = NULL; | 513 original_delegate_ = NULL; |
| (...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1224 // Move the window to the front. | 1164 // Move the window to the front. |
| 1225 SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, | 1165 SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, |
| 1226 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); | 1166 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); |
| 1227 | 1167 |
| 1228 // The previous call made the window appear on top of the dragged window, | 1168 // The previous call made the window appear on top of the dragged window, |
| 1229 // move the dragged window to the front. | 1169 // move the dragged window to the front. |
| 1230 SetWindowPos(view_->GetWidget()->GetHWND(), HWND_TOP, 0, 0, 0, 0, | 1170 SetWindowPos(view_->GetWidget()->GetHWND(), HWND_TOP, 0, 0, 0, 0, |
| 1231 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); | 1171 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); |
| 1232 } | 1172 } |
| 1233 } | 1173 } |
| OLD | NEW |