Chromium Code Reviews| 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_strip.h" | 5 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windowsx.h> | 8 #include <windowsx.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 232 case ui::LAYOUT_TOUCH: | 232 case ui::LAYOUT_TOUCH: |
| 233 value = 26; | 233 value = 26; |
| 234 break; | 234 break; |
| 235 default: | 235 default: |
| 236 NOTREACHED(); | 236 NOTREACHED(); |
| 237 } | 237 } |
| 238 } | 238 } |
| 239 return value; | 239 return value; |
| 240 } | 240 } |
| 241 | 241 |
| 242 base::string16 GetClipboardText() { | |
| 243 if (!ui::Clipboard::IsSupportedClipboardType(ui::CLIPBOARD_TYPE_SELECTION)) | |
| 244 return base::string16(); | |
| 245 ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); | |
| 246 CHECK(clipboard); | |
| 247 base::string16 clipboard_text; | |
| 248 clipboard->ReadText(ui::CLIPBOARD_TYPE_SELECTION, &clipboard_text); | |
| 249 return clipboard_text; | |
| 250 } | |
| 251 | |
| 242 // Animation delegate used when a dragged tab is released. When done sets the | 252 // Animation delegate used when a dragged tab is released. When done sets the |
| 243 // dragging state to false. | 253 // dragging state to false. |
| 244 class ResetDraggingStateDelegate | 254 class ResetDraggingStateDelegate |
| 245 : public views::BoundsAnimator::OwnedAnimationDelegate { | 255 : public views::BoundsAnimator::OwnedAnimationDelegate { |
| 246 public: | 256 public: |
| 247 explicit ResetDraggingStateDelegate(Tab* tab) : tab_(tab) { | 257 explicit ResetDraggingStateDelegate(Tab* tab) : tab_(tab) { |
| 248 } | 258 } |
| 249 | 259 |
| 250 virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE { | 260 virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE { |
| 251 tab_->set_dragging(false); | 261 tab_->set_dragging(false); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 // were we destroyed? | 349 // were we destroyed? |
| 340 bool* destroyed_; | 350 bool* destroyed_; |
| 341 | 351 |
| 342 DISALLOW_COPY_AND_ASSIGN(NewTabButton); | 352 DISALLOW_COPY_AND_ASSIGN(NewTabButton); |
| 343 }; | 353 }; |
| 344 | 354 |
| 345 NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener) | 355 NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener) |
| 346 : views::ImageButton(listener), | 356 : views::ImageButton(listener), |
| 347 tab_strip_(tab_strip), | 357 tab_strip_(tab_strip), |
| 348 destroyed_(NULL) { | 358 destroyed_(NULL) { |
| 359 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | |
| 360 set_triggerable_event_flags(triggerable_event_flags() | | |
| 361 ui::EF_MIDDLE_MOUSE_BUTTON); | |
| 362 #endif | |
| 349 } | 363 } |
| 350 | 364 |
| 351 NewTabButton::~NewTabButton() { | 365 NewTabButton::~NewTabButton() { |
| 352 if (destroyed_) | 366 if (destroyed_) |
| 353 *destroyed_ = true; | 367 *destroyed_ = true; |
| 354 } | 368 } |
| 355 | 369 |
| 356 bool NewTabButton::HasHitTestMask() const { | 370 bool NewTabButton::HasHitTestMask() const { |
| 357 // When the button is sized to the top of the tab strip we want the user to | 371 // When the button is sized to the top of the tab strip we want the user to |
| 358 // be able to click on complete bounds, and so don't return a custom hit | 372 // be able to click on complete bounds, and so don't return a custom hit |
| (...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1504 } | 1518 } |
| 1505 | 1519 |
| 1506 /////////////////////////////////////////////////////////////////////////////// | 1520 /////////////////////////////////////////////////////////////////////////////// |
| 1507 // TabStrip, views::ButtonListener implementation: | 1521 // TabStrip, views::ButtonListener implementation: |
| 1508 | 1522 |
| 1509 void TabStrip::ButtonPressed(views::Button* sender, const ui::Event& event) { | 1523 void TabStrip::ButtonPressed(views::Button* sender, const ui::Event& event) { |
| 1510 if (sender == newtab_button_) { | 1524 if (sender == newtab_button_) { |
| 1511 content::RecordAction(UserMetricsAction("NewTab_Button")); | 1525 content::RecordAction(UserMetricsAction("NewTab_Button")); |
| 1512 UMA_HISTOGRAM_ENUMERATION("Tab.NewTab", TabStripModel::NEW_TAB_BUTTON, | 1526 UMA_HISTOGRAM_ENUMERATION("Tab.NewTab", TabStripModel::NEW_TAB_BUTTON, |
| 1513 TabStripModel::NEW_TAB_ENUM_COUNT); | 1527 TabStripModel::NEW_TAB_ENUM_COUNT); |
| 1528 if (event.IsMouseEvent()) { | |
| 1529 const ui::MouseEvent& mouse = static_cast<const ui::MouseEvent&>(event); | |
| 1530 if (mouse.IsOnlyMiddleMouseButton()) { | |
| 1531 base::string16 clipboard_text = GetClipboardText(); | |
| 1532 controller()->CreateNewTabWithLocation(clipboard_text); | |
|
Markus (顧孟勤)
2013/11/15 19:11:53
Should we check whether clipboard_text is empty?
sadrul
2013/11/15 19:57:21
Done.
| |
| 1533 return; | |
| 1534 } | |
| 1535 } | |
| 1536 | |
| 1514 controller()->CreateNewTab(); | 1537 controller()->CreateNewTab(); |
| 1515 if (event.type() == ui::ET_GESTURE_TAP) | 1538 if (event.type() == ui::ET_GESTURE_TAP) |
| 1516 TouchUMA::RecordGestureAction(TouchUMA::GESTURE_NEWTAB_TAP); | 1539 TouchUMA::RecordGestureAction(TouchUMA::GESTURE_NEWTAB_TAP); |
| 1517 } | 1540 } |
| 1518 } | 1541 } |
| 1519 | 1542 |
| 1520 /////////////////////////////////////////////////////////////////////////////// | 1543 /////////////////////////////////////////////////////////////////////////////// |
| 1521 // TabStrip, protected: | 1544 // TabStrip, protected: |
| 1522 | 1545 |
| 1523 // Overridden to support automation. See automation_proxy_uitest.cc. | 1546 // Overridden to support automation. See automation_proxy_uitest.cc. |
| (...skipping 1207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2731 #if defined(USE_AURA) | 2754 #if defined(USE_AURA) |
| 2732 return chrome::GetHostDesktopTypeForNativeView( | 2755 return chrome::GetHostDesktopTypeForNativeView( |
| 2733 GetWidget()->GetNativeView()) == chrome::HOST_DESKTOP_TYPE_ASH; | 2756 GetWidget()->GetNativeView()) == chrome::HOST_DESKTOP_TYPE_ASH; |
| 2734 #else | 2757 #else |
| 2735 if (ui::GetDisplayLayout() != ui::LAYOUT_TOUCH) | 2758 if (ui::GetDisplayLayout() != ui::LAYOUT_TOUCH) |
| 2736 return false; | 2759 return false; |
| 2737 #endif | 2760 #endif |
| 2738 | 2761 |
| 2739 return true; | 2762 return true; |
| 2740 } | 2763 } |
| OLD | NEW |