OLD | NEW |
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 "chrome/browser/ui/views/tabs/tab_drag_controller.h" | 5 #include "chrome/browser/ui/views/tabs/tab_drag_controller.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
11 #include "base/callback.h" | 11 #include "base/callback.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/debug/alias.h" | |
14 #include "base/i18n/rtl.h" | 13 #include "base/i18n/rtl.h" |
15 #include "chrome/browser/chrome_notification_types.h" | 14 #include "chrome/browser/chrome_notification_types.h" |
16 #include "chrome/browser/extensions/extension_function_dispatcher.h" | 15 #include "chrome/browser/extensions/extension_function_dispatcher.h" |
17 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h" | 17 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h" |
19 #include "chrome/browser/ui/browser_window.h" | 18 #include "chrome/browser/ui/browser_window.h" |
20 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 19 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
21 #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h" | 20 #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h" |
22 #include "chrome/browser/ui/views/frame/browser_view.h" | 21 #include "chrome/browser/ui/views/frame/browser_view.h" |
23 #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h" | 22 #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h" |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 initial_move_(true), | 368 initial_move_(true), |
370 detach_behavior_(DETACHABLE), | 369 detach_behavior_(DETACHABLE), |
371 move_behavior_(REORDER), | 370 move_behavior_(REORDER), |
372 mouse_move_direction_(0), | 371 mouse_move_direction_(0), |
373 is_dragging_window_(false), | 372 is_dragging_window_(false), |
374 end_run_loop_behavior_(END_RUN_LOOP_STOP_DRAGGING), | 373 end_run_loop_behavior_(END_RUN_LOOP_STOP_DRAGGING), |
375 waiting_for_run_loop_to_exit_(false), | 374 waiting_for_run_loop_to_exit_(false), |
376 tab_strip_to_attach_to_after_exit_(NULL), | 375 tab_strip_to_attach_to_after_exit_(NULL), |
377 move_loop_widget_(NULL), | 376 move_loop_widget_(NULL), |
378 destroyed_(NULL), | 377 destroyed_(NULL), |
379 is_mutating_(false), | 378 is_mutating_(false) { |
380 saving_focus_(false) { | |
381 instance_ = this; | 379 instance_ = this; |
382 } | 380 } |
383 | 381 |
384 TabDragController::~TabDragController() { | 382 TabDragController::~TabDragController() { |
385 CHECK(!saving_focus_); | |
386 if (instance_ == this) | 383 if (instance_ == this) |
387 instance_ = NULL; | 384 instance_ = NULL; |
388 | 385 |
389 if (destroyed_) | 386 if (destroyed_) |
390 *destroyed_ = true; | 387 *destroyed_ = true; |
391 | 388 |
392 if (move_loop_widget_) { | 389 if (move_loop_widget_) { |
393 move_loop_widget_->RemoveObserver(this); | 390 move_loop_widget_->RemoveObserver(this); |
394 SetTrackedByWorkspace(move_loop_widget_->GetNativeView(), true); | 391 SetTrackedByWorkspace(move_loop_widget_->GetNativeView(), true); |
395 SetWindowPositionManaged(move_loop_widget_->GetNativeView(), true); | 392 SetWindowPositionManaged(move_loop_widget_->GetNativeView(), true); |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 // Current dock position is the same as last, update the controller's | 739 // Current dock position is the same as last, update the controller's |
743 // in_enable_area state as it may have changed. | 740 // in_enable_area state as it may have changed. |
744 dock_controllers_.back()->UpdateInEnabledArea(dock_info_.in_enable_area()); | 741 dock_controllers_.back()->UpdateInEnabledArea(dock_info_.in_enable_area()); |
745 } | 742 } |
746 } | 743 } |
747 | 744 |
748 void TabDragController::SaveFocus() { | 745 void TabDragController::SaveFocus() { |
749 DCHECK(!old_focused_view_); // This should only be invoked once. | 746 DCHECK(!old_focused_view_); // This should only be invoked once. |
750 DCHECK(source_tabstrip_); | 747 DCHECK(source_tabstrip_); |
751 old_focused_view_ = source_tabstrip_->GetFocusManager()->GetFocusedView(); | 748 old_focused_view_ = source_tabstrip_->GetFocusManager()->GetFocusedView(); |
752 // TODO(sky): used in tracking crash; see 275931. | |
753 const char* old_focused_view_class_name = | |
754 old_focused_view_ ? old_focused_view_->GetClassName() : NULL; | |
755 base::debug::Alias(old_focused_view_class_name); | |
756 const int old_focused_view_id = | |
757 old_focused_view_ ? old_focused_view_->id() : 0; | |
758 base::debug::Alias(&old_focused_view_id); | |
759 base::AutoReset<bool> setter(&saving_focus_, true); | |
760 source_tabstrip_->GetFocusManager()->SetFocusedView(source_tabstrip_); | 749 source_tabstrip_->GetFocusManager()->SetFocusedView(source_tabstrip_); |
761 } | 750 } |
762 | 751 |
763 void TabDragController::RestoreFocus() { | 752 void TabDragController::RestoreFocus() { |
764 if (old_focused_view_ && attached_tabstrip_ == source_tabstrip_) | 753 if (old_focused_view_ && attached_tabstrip_ == source_tabstrip_) |
765 old_focused_view_->GetFocusManager()->SetFocusedView(old_focused_view_); | 754 old_focused_view_->GetFocusManager()->SetFocusedView(old_focused_view_); |
766 old_focused_view_ = NULL; | 755 old_focused_view_ = NULL; |
767 } | 756 } |
768 | 757 |
769 bool TabDragController::CanStartDrag(const gfx::Point& point_in_screen) const { | 758 bool TabDragController::CanStartDrag(const gfx::Point& point_in_screen) const { |
(...skipping 1386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2156 gfx::Vector2d TabDragController::GetWindowOffset( | 2145 gfx::Vector2d TabDragController::GetWindowOffset( |
2157 const gfx::Point& point_in_screen) { | 2146 const gfx::Point& point_in_screen) { |
2158 TabStrip* owning_tabstrip = (attached_tabstrip_ && detach_into_browser_) ? | 2147 TabStrip* owning_tabstrip = (attached_tabstrip_ && detach_into_browser_) ? |
2159 attached_tabstrip_ : source_tabstrip_; | 2148 attached_tabstrip_ : source_tabstrip_; |
2160 views::View* toplevel_view = owning_tabstrip->GetWidget()->GetContentsView(); | 2149 views::View* toplevel_view = owning_tabstrip->GetWidget()->GetContentsView(); |
2161 | 2150 |
2162 gfx::Point point = point_in_screen; | 2151 gfx::Point point = point_in_screen; |
2163 views::View::ConvertPointFromScreen(toplevel_view, &point); | 2152 views::View::ConvertPointFromScreen(toplevel_view, &point); |
2164 return point.OffsetFromOrigin(); | 2153 return point.OffsetFromOrigin(); |
2165 } | 2154 } |
OLD | NEW |