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

Side by Side Diff: chrome/browser/ui/views/tabs/tab_drag_controller.h

Issue 376513002: Remove useless TabDragController::detach_behavior_ and TabDragController::detach_into_browser_ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
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 #ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_DRAG_CONTROLLER_H_ 5 #ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_DRAG_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_VIEWS_TABS_TAB_DRAG_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_VIEWS_TABS_TAB_DRAG_CONTROLLER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/timer/timer.h" 12 #include "base/timer/timer.h"
13 #include "chrome/browser/ui/host_desktop.h" 13 #include "chrome/browser/ui/host_desktop.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 14 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
15 #include "chrome/browser/ui/views/tabs/tab_strip_types.h" 15 #include "chrome/browser/ui/views/tabs/tab_strip_types.h"
16 #include "content/public/browser/notification_observer.h" 16 #include "content/public/browser/notification_observer.h"
17 #include "content/public/browser/notification_registrar.h" 17 #include "content/public/browser/notification_registrar.h"
18 #include "content/public/browser/web_contents_delegate.h"
19 #include "ui/base/models/list_selection_model.h" 18 #include "ui/base/models/list_selection_model.h"
20 #include "ui/gfx/rect.h" 19 #include "ui/gfx/rect.h"
21 #include "ui/views/widget/widget_observer.h" 20 #include "ui/views/widget/widget_observer.h"
22 21
23 namespace gfx { 22 namespace gfx {
24 class Screen; 23 class Screen;
25 } 24 }
26 namespace ui { 25 namespace ui {
27 class EventHandler; 26 class EventHandler;
28 class ListSelectionModel; 27 class ListSelectionModel;
(...skipping 11 matching lines...) Expand all
40 // the user presses the mouse on a tab a new TabDragController is created and 39 // the user presses the mouse on a tab a new TabDragController is created and
41 // Drag() is invoked as the mouse is dragged. If the mouse is dragged far enough 40 // Drag() is invoked as the mouse is dragged. If the mouse is dragged far enough
42 // TabDragController starts a drag session. The drag session is completed when 41 // TabDragController starts a drag session. The drag session is completed when
43 // EndDrag() is invoked (or the TabDragController is destroyed). 42 // EndDrag() is invoked (or the TabDragController is destroyed).
44 // 43 //
45 // While dragging within a tab strip TabDragController sets the bounds of the 44 // While dragging within a tab strip TabDragController sets the bounds of the
46 // tabs (this is referred to as attached). When the user drags far enough such 45 // tabs (this is referred to as attached). When the user drags far enough such
47 // that the tabs should be moved out of the tab strip a new Browser is created 46 // that the tabs should be moved out of the tab strip a new Browser is created
48 // and RunMoveLoop() is invoked on the Widget to drag the browser around. This 47 // and RunMoveLoop() is invoked on the Widget to drag the browser around. This
49 // is the default on aura. 48 // is the default on aura.
50 class TabDragController : public content::WebContentsDelegate, 49 class TabDragController : public content::NotificationObserver,
51 public content::NotificationObserver,
52 public views::WidgetObserver, 50 public views::WidgetObserver,
53 public TabStripModelObserver { 51 public TabStripModelObserver {
54 public: 52 public:
55 enum DetachBehavior {
56 DETACHABLE,
57 NOT_DETACHABLE
58 };
59
60 // What should happen as the mouse is dragged within the tabstrip. 53 // What should happen as the mouse is dragged within the tabstrip.
61 enum MoveBehavior { 54 enum MoveBehavior {
62 // Only the set of visible tabs should change. This is only applicable when 55 // Only the set of visible tabs should change. This is only applicable when
63 // using touch layout. 56 // using touch layout.
64 MOVE_VISIBILE_TABS, 57 MOVE_VISIBILE_TABS,
65 58
66 // Typical behavior where tabs are dragged around. 59 // Typical behavior where tabs are dragged around.
67 REORDER 60 REORDER
68 }; 61 };
69 62
(...skipping 17 matching lines...) Expand all
87 // offset from |source_tab|. |source_tab_offset| is the horizontal offset of 80 // offset from |source_tab|. |source_tab_offset| is the horizontal offset of
88 // |mouse_offset| relative to |source_tab|. |initial_selection_model| is the 81 // |mouse_offset| relative to |source_tab|. |initial_selection_model| is the
89 // selection model before the drag started and is only non-empty if 82 // selection model before the drag started and is only non-empty if
90 // |source_tab| was not initially selected. 83 // |source_tab| was not initially selected.
91 void Init(TabStrip* source_tabstrip, 84 void Init(TabStrip* source_tabstrip,
92 Tab* source_tab, 85 Tab* source_tab,
93 const std::vector<Tab*>& tabs, 86 const std::vector<Tab*>& tabs,
94 const gfx::Point& mouse_offset, 87 const gfx::Point& mouse_offset,
95 int source_tab_offset, 88 int source_tab_offset,
96 const ui::ListSelectionModel& initial_selection_model, 89 const ui::ListSelectionModel& initial_selection_model,
97 DetachBehavior detach_behavior,
98 MoveBehavior move_behavior, 90 MoveBehavior move_behavior,
99 EventSource event_source); 91 EventSource event_source);
100 92
101 // Returns true if there is a drag underway and the drag is attached to 93 // Returns true if there is a drag underway and the drag is attached to
102 // |tab_strip|. 94 // |tab_strip|.
103 // NOTE: this returns false if the TabDragController is in the process of 95 // NOTE: this returns false if the TabDragController is in the process of
104 // finishing the drag. 96 // finishing the drag.
105 static bool IsAttachedTo(const TabStrip* tab_strip); 97 static bool IsAttachedTo(const TabStrip* tab_strip);
106 98
107 // Returns true if there is a drag underway. 99 // Returns true if there is a drag underway.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 }; 176 };
185 177
186 // Stores the date associated with a single tab that is being dragged. 178 // Stores the date associated with a single tab that is being dragged.
187 struct TabDragData { 179 struct TabDragData {
188 TabDragData(); 180 TabDragData();
189 ~TabDragData(); 181 ~TabDragData();
190 182
191 // The WebContents being dragged. 183 // The WebContents being dragged.
192 content::WebContents* contents; 184 content::WebContents* contents;
193 185
194 // content::WebContentsDelegate for |contents| before it was detached from
195 // the browser window. We store this so that we can forward certain delegate
196 // notifications back to it if we can't handle them locally.
197 content::WebContentsDelegate* original_delegate;
198
199 // This is the index of the tab in |source_tabstrip_| when the drag 186 // This is the index of the tab in |source_tabstrip_| when the drag
200 // began. This is used to restore the previous state if the drag is aborted. 187 // began. This is used to restore the previous state if the drag is aborted.
201 int source_model_index; 188 int source_model_index;
202 189
203 // If attached this is the tab in |attached_tabstrip_|. 190 // If attached this is the tab in |attached_tabstrip_|.
204 Tab* attached_tab; 191 Tab* attached_tab;
205 192
206 // Is the tab pinned? 193 // Is the tab pinned?
207 bool pinned; 194 bool pinned;
208 }; 195 };
209 196
210 typedef std::vector<TabDragData> DragData; 197 typedef std::vector<TabDragData> DragData;
211 198
212 // Sets |drag_data| from |tab|. This also registers for necessary 199 // Sets |drag_data| from |tab|. This also registers for necessary
213 // notifications and resets the delegate of the WebContents. 200 // notifications and resets the delegate of the WebContents.
214 void InitTabDragData(Tab* tab, TabDragData* drag_data); 201 void InitTabDragData(Tab* tab, TabDragData* drag_data);
215 202
216 // Overridden from content::WebContentsDelegate:
217 virtual content::WebContents* OpenURLFromTab(
218 content::WebContents* source,
219 const content::OpenURLParams& params) OVERRIDE;
220 virtual void NavigationStateChanged(const content::WebContents* source,
221 unsigned changed_flags) OVERRIDE;
222 virtual void AddNewContents(content::WebContents* source,
223 content::WebContents* new_contents,
224 WindowOpenDisposition disposition,
225 const gfx::Rect& initial_pos,
226 bool user_gesture,
227 bool* was_blocked) OVERRIDE;
228 virtual bool ShouldSuppressDialogs() OVERRIDE;
229 virtual content::JavaScriptDialogManager*
230 GetJavaScriptDialogManager() OVERRIDE;
231 virtual void RequestMediaAccessPermission(
232 content::WebContents* web_contents,
233 const content::MediaStreamRequest& request,
234 const content::MediaResponseCallback& callback) OVERRIDE;
235
236 // Overridden from content::NotificationObserver: 203 // Overridden from content::NotificationObserver:
237 virtual void Observe(int type, 204 virtual void Observe(int type,
238 const content::NotificationSource& source, 205 const content::NotificationSource& source,
239 const content::NotificationDetails& details) OVERRIDE; 206 const content::NotificationDetails& details) OVERRIDE;
240 207
241 // Overriden from views::WidgetObserver: 208 // Overriden from views::WidgetObserver:
242 virtual void OnWidgetBoundsChanged(views::Widget* widget, 209 virtual void OnWidgetBoundsChanged(views::Widget* widget,
243 const gfx::Rect& new_bounds) OVERRIDE; 210 const gfx::Rect& new_bounds) OVERRIDE;
244 211
245 // Overriden from TabStripModelObserver: 212 // Overriden from TabStripModelObserver:
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 360
394 // Restores |initial_selection_model_| to the |source_tabstrip_|. 361 // Restores |initial_selection_model_| to the |source_tabstrip_|.
395 void RestoreInitialSelection(); 362 void RestoreInitialSelection();
396 363
397 // Finishes a succesful drag operation. 364 // Finishes a succesful drag operation.
398 void CompleteDrag(); 365 void CompleteDrag();
399 366
400 // Maximizes the attached window. 367 // Maximizes the attached window.
401 void MaximizeAttachedWindow(); 368 void MaximizeAttachedWindow();
402 369
403 // Resets the delegates of the WebContents.
404 void ResetDelegates();
405
406 // Returns the bounds (in screen coordinates) of the specified View. 370 // Returns the bounds (in screen coordinates) of the specified View.
407 gfx::Rect GetViewScreenBounds(views::View* tabstrip) const; 371 gfx::Rect GetViewScreenBounds(views::View* tabstrip) const;
408 372
409 // Hides the frame for the window that contains the TabStrip the current 373 // Hides the frame for the window that contains the TabStrip the current
410 // drag session was initiated from. 374 // drag session was initiated from.
411 void HideFrame(); 375 void HideFrame();
412 376
413 // Closes a hidden frame at the end of a drag session.
414 void CleanUpHiddenFrame();
415
416 void BringWindowUnderPointToFront(const gfx::Point& point_in_screen); 377 void BringWindowUnderPointToFront(const gfx::Point& point_in_screen);
417 378
418 // Convenience for getting the TabDragData corresponding to the tab the user 379 // Convenience for getting the TabDragData corresponding to the tab the user
419 // started dragging. 380 // started dragging.
420 TabDragData* source_tab_drag_data() { 381 TabDragData* source_tab_drag_data() {
421 return &(drag_data_[source_tab_index_]); 382 return &(drag_data_[source_tab_index_]);
422 } 383 }
423 384
424 // Convenience for |source_tab_drag_data()->contents|. 385 // Convenience for |source_tab_drag_data()->contents|.
425 content::WebContents* source_dragged_contents() { 386 content::WebContents* source_dragged_contents() {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 // Returns true if moving the mouse only changes the visible tabs. 433 // Returns true if moving the mouse only changes the visible tabs.
473 bool move_only() const { 434 bool move_only() const {
474 return (move_behavior_ == MOVE_VISIBILE_TABS) != 0; 435 return (move_behavior_ == MOVE_VISIBILE_TABS) != 0;
475 } 436 }
476 437
477 // Returns the NativeWindow at the specified point. If |exclude_dragged_view| 438 // Returns the NativeWindow at the specified point. If |exclude_dragged_view|
478 // is true, then the dragged view is not considered. 439 // is true, then the dragged view is not considered.
479 gfx::NativeWindow GetLocalProcessWindow(const gfx::Point& screen_point, 440 gfx::NativeWindow GetLocalProcessWindow(const gfx::Point& screen_point,
480 bool exclude_dragged_view); 441 bool exclude_dragged_view);
481 442
482 // If true detaching creates a new browser and enters a nested message loop.
483 bool detach_into_browser_;
484
485 // Handles registering for notifications. 443 // Handles registering for notifications.
486 content::NotificationRegistrar registrar_; 444 content::NotificationRegistrar registrar_;
487 445
488 EventSource event_source_; 446 EventSource event_source_;
489 447
490 // The TabStrip the drag originated from. 448 // The TabStrip the drag originated from.
491 TabStrip* source_tabstrip_; 449 TabStrip* source_tabstrip_;
492 450
493 // The TabStrip the dragged Tab is currently attached to, or NULL if the 451 // The TabStrip the dragged Tab is currently attached to, or NULL if the
494 // dragged Tab is detached. 452 // dragged Tab is detached.
(...skipping 30 matching lines...) Expand all
525 // A hint to use when positioning new windows created by detaching Tabs. This 483 // A hint to use when positioning new windows created by detaching Tabs. This
526 // is the distance of the mouse from the top left of the dragged tab as if it 484 // is the distance of the mouse from the top left of the dragged tab as if it
527 // were the distance of the mouse from the top left of the first tab in the 485 // were the distance of the mouse from the top left of the first tab in the
528 // attached TabStrip from the top left of the window. 486 // attached TabStrip from the top left of the window.
529 gfx::Point window_create_point_; 487 gfx::Point window_create_point_;
530 488
531 // Location of the first tab in the source tabstrip in screen coordinates. 489 // Location of the first tab in the source tabstrip in screen coordinates.
532 // This is used to calculate |window_create_point_|. 490 // This is used to calculate |window_create_point_|.
533 gfx::Point first_source_tab_point_; 491 gfx::Point first_source_tab_point_;
534 492
535 // The bounds of the browser window before the last Tab was detached. When
536 // the last Tab is detached, rather than destroying the frame (which would
537 // abort the drag session), the frame is moved off-screen. If the drag is
538 // aborted (e.g. by the user pressing Esc, or capture being lost), the Tab is
539 // attached to the hidden frame and the frame moved back to these bounds.
540 gfx::Rect restore_bounds_;
541
542 // Storage ID in ViewStorage where the last view that had focus in the window 493 // Storage ID in ViewStorage where the last view that had focus in the window
543 // containing |source_tab_| is saved. This is saved so that focus can be 494 // containing |source_tab_| is saved. This is saved so that focus can be
544 // restored properly when a drag begins and ends within this same window. 495 // restored properly when a drag begins and ends within this same window.
545 const int old_focused_view_id_; 496 const int old_focused_view_id_;
546 497
547 // The horizontal position of the mouse cursor in screen coordinates at the 498 // The horizontal position of the mouse cursor in screen coordinates at the
548 // time of the last re-order event. 499 // time of the last re-order event.
549 int last_move_screen_loc_; 500 int last_move_screen_loc_;
550 501
551 // Timer used to bring the window under the cursor to front. If the user 502 // Timer used to bring the window under the cursor to front. If the user
(...skipping 23 matching lines...) Expand all
575 // details. 526 // details.
576 ui::ListSelectionModel initial_selection_model_; 527 ui::ListSelectionModel initial_selection_model_;
577 528
578 // The selection model of |attached_tabstrip_| before the tabs were attached. 529 // The selection model of |attached_tabstrip_| before the tabs were attached.
579 ui::ListSelectionModel selection_model_before_attach_; 530 ui::ListSelectionModel selection_model_before_attach_;
580 531
581 // Initial x-coordinates of the tabs when the drag started. Only used for 532 // Initial x-coordinates of the tabs when the drag started. Only used for
582 // touch mode. 533 // touch mode.
583 std::vector<int> initial_tab_positions_; 534 std::vector<int> initial_tab_positions_;
584 535
585 DetachBehavior detach_behavior_;
586 MoveBehavior move_behavior_; 536 MoveBehavior move_behavior_;
587 537
588 // Updated as the mouse is moved when attached. Indicates whether the mouse 538 // Updated as the mouse is moved when attached. Indicates whether the mouse
589 // has ever moved to the left or right. If the tabs are ever detached this 539 // has ever moved to the left or right. If the tabs are ever detached this
590 // is set to kMovedMouseRight | kMovedMouseLeft. 540 // is set to kMovedMouseRight | kMovedMouseLeft.
591 int mouse_move_direction_; 541 int mouse_move_direction_;
592 542
593 // Last location used in screen coordinates. 543 // Last location used in screen coordinates.
594 gfx::Point last_point_in_screen_; 544 gfx::Point last_point_in_screen_;
595 545
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 int attach_index_; 587 int attach_index_;
638 588
639 scoped_ptr<ui::EventHandler> escape_tracker_; 589 scoped_ptr<ui::EventHandler> escape_tracker_;
640 590
641 base::WeakPtrFactory<TabDragController> weak_factory_; 591 base::WeakPtrFactory<TabDragController> weak_factory_;
642 592
643 DISALLOW_COPY_AND_ASSIGN(TabDragController); 593 DISALLOW_COPY_AND_ASSIGN(TabDragController);
644 }; 594 };
645 595
646 #endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_DRAG_CONTROLLER_H_ 596 #endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_DRAG_CONTROLLER_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/tabs/test_tab_strip_model_delegate.cc ('k') | chrome/browser/ui/views/tabs/tab_drag_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698