| 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/panels/panel_browser_view.h" | 5 #include "chrome/browser/ui/panels/panel_browser_view.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "chrome/browser/native_window_notification_source.h" | 9 #include "chrome/browser/native_window_notification_source.h" |
| 10 #include "chrome/browser/ui/panels/display_settings_provider.h" | 10 #include "chrome/browser/ui/panels/display_settings_provider.h" |
| 11 #include "chrome/browser/ui/panels/panel.h" | 11 #include "chrome/browser/ui/panels/panel.h" |
| 12 #include "chrome/browser/ui/panels/panel_bounds_animation.h" | 12 #include "chrome/browser/ui/panels/panel_bounds_animation.h" |
| 13 #include "chrome/browser/ui/panels/panel_browser_frame_view.h" | 13 #include "chrome/browser/ui/panels/panel_browser_frame_view.h" |
| 14 #include "chrome/browser/ui/panels/panel_manager.h" | 14 #include "chrome/browser/ui/panels/panel_manager.h" |
| 15 #include "chrome/browser/ui/panels/panel_strip.h" | 15 #include "chrome/browser/ui/panels/panel_strip.h" |
| 16 #include "chrome/browser/ui/views/frame/browser_frame.h" | 16 #include "chrome/browser/ui/views/frame/browser_frame.h" |
| 17 #include "chrome/browser/ui/webui/task_manager/task_manager_dialog.h" | 17 #include "chrome/browser/ui/webui/task_manager/task_manager_dialog.h" |
| 18 #include "chrome/common/chrome_notification_types.h" | 18 #include "chrome/common/chrome_notification_types.h" |
| 19 #include "content/public/browser/notification_service.h" | 19 #include "content/public/browser/notification_service.h" |
| 20 #include "grit/chromium_strings.h" | 20 #include "grit/chromium_strings.h" |
| 21 #include "ui/base/l10n/l10n_util.h" | 21 #include "ui/base/l10n/l10n_util.h" |
| 22 #include "ui/views/controls/button/image_button.h" | 22 #include "ui/views/controls/button/image_button.h" |
| 23 #include "ui/views/controls/label.h" | 23 #include "ui/views/controls/label.h" |
| 24 #include "ui/views/widget/widget.h" | 24 #include "ui/views/widget/widget.h" |
| 25 | 25 |
| 26 #if defined(OS_WIN) && !defined(USE_AURA) | |
| 27 #include "base/win/win_util.h" // for IsCtrlPressed() | |
| 28 #endif | |
| 29 | |
| 30 using content::WebContents; | 26 using content::WebContents; |
| 31 | 27 |
| 32 NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, | 28 NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, |
| 33 const gfx::Rect& bounds) { | 29 const gfx::Rect& bounds) { |
| 34 PanelBrowserView* view = new PanelBrowserView(browser, panel, bounds); | 30 PanelBrowserView* view = new PanelBrowserView(browser, panel, bounds); |
| 35 (new BrowserFrame(view))->InitBrowserFrame(); | 31 (new BrowserFrame(view))->InitBrowserFrame(); |
| 36 return view; | 32 return view; |
| 37 } | 33 } |
| 38 | 34 |
| 39 PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel, | 35 PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel, |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 if (mouse_dragging_state_ == DRAGGING_STARTED) { | 464 if (mouse_dragging_state_ == DRAGGING_STARTED) { |
| 469 panel_->manager()->Drag(mouse_location); | 465 panel_->manager()->Drag(mouse_location); |
| 470 | 466 |
| 471 // Once in drag, update |last_mouse_location_| on each drag fragment, since | 467 // Once in drag, update |last_mouse_location_| on each drag fragment, since |
| 472 // we already dragged the panel up to the current mouse location. | 468 // we already dragged the panel up to the current mouse location. |
| 473 last_mouse_location_ = mouse_location; | 469 last_mouse_location_ = mouse_location; |
| 474 } | 470 } |
| 475 return true; | 471 return true; |
| 476 } | 472 } |
| 477 | 473 |
| 478 bool PanelBrowserView::OnTitlebarMouseReleased() { | 474 bool PanelBrowserView::OnTitlebarMouseReleased(panel::ClickModifier modifier) { |
| 479 if (mouse_dragging_state_ != NO_DRAGGING) { | 475 if (mouse_dragging_state_ != NO_DRAGGING) { |
| 480 // Ensure dragging a minimized panel does not leave it activated. | 476 // Ensure dragging a minimized panel does not leave it activated. |
| 481 // Windows activates a panel on mouse-down, regardless of our attempts | 477 // Windows activates a panel on mouse-down, regardless of our attempts |
| 482 // to prevent activation of a minimized panel. Now that we know mouse-down | 478 // to prevent activation of a minimized panel. Now that we know mouse-down |
| 483 // resulted in a mouse-drag, we need to ensure the minimized panel is | 479 // resulted in a mouse-drag, we need to ensure the minimized panel is |
| 484 // deactivated. | 480 // deactivated. |
| 485 if (panel_->IsMinimized() && panel_->IsActive()) | 481 if (panel_->IsMinimized() && panel_->IsActive()) |
| 486 panel_->Deactivate(); | 482 panel_->Deactivate(); |
| 487 | 483 |
| 488 if (mouse_dragging_state_ == DRAGGING_STARTED) { | 484 if (mouse_dragging_state_ == DRAGGING_STARTED) { |
| 489 // When a drag ends, restore the focus. | 485 // When a drag ends, restore the focus. |
| 490 if (old_focused_view_) { | 486 if (old_focused_view_) { |
| 491 GetFocusManager()->SetFocusedView(old_focused_view_); | 487 GetFocusManager()->SetFocusedView(old_focused_view_); |
| 492 old_focused_view_ = NULL; | 488 old_focused_view_ = NULL; |
| 493 } | 489 } |
| 494 return EndDragging(false); | 490 return EndDragging(false); |
| 495 } | 491 } |
| 496 | 492 |
| 497 // Else, the panel drag was cancelled before the mouse is released. Do not | 493 // Else, the panel drag was cancelled before the mouse is released. Do not |
| 498 // treat this as a click. | 494 // treat this as a click. |
| 499 if (mouse_dragging_state_ != NO_DRAGGING) | 495 if (mouse_dragging_state_ != NO_DRAGGING) |
| 500 return true; | 496 return true; |
| 501 } | 497 } |
| 502 | 498 |
| 503 panel::ClickModifier click_modifier = panel::NO_MODIFIER; | 499 panel_->OnTitlebarClicked(modifier); |
| 504 #if defined(OS_WIN) && !defined(USE_AURA) | |
| 505 if (base::win::IsCtrlPressed()) { | |
| 506 click_modifier = panel::APPLY_TO_ALL; | |
| 507 } | |
| 508 #else | |
| 509 // Proceed without modifier. | |
| 510 #endif | |
| 511 | |
| 512 panel_->OnTitlebarClicked(click_modifier); | |
| 513 return true; | 500 return true; |
| 514 } | 501 } |
| 515 | 502 |
| 516 bool PanelBrowserView::OnTitlebarMouseCaptureLost() { | 503 bool PanelBrowserView::OnTitlebarMouseCaptureLost() { |
| 517 if (mouse_dragging_state_ == DRAGGING_STARTED) | 504 if (mouse_dragging_state_ == DRAGGING_STARTED) |
| 518 return EndDragging(true); | 505 return EndDragging(true); |
| 519 return true; | 506 return true; |
| 520 } | 507 } |
| 521 | 508 |
| 522 bool PanelBrowserView::EndDragging(bool cancelled) { | 509 bool PanelBrowserView::EndDragging(bool cancelled) { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 | 595 |
| 609 NativePanelTestingWin::NativePanelTestingWin( | 596 NativePanelTestingWin::NativePanelTestingWin( |
| 610 PanelBrowserView* panel_browser_view) : | 597 PanelBrowserView* panel_browser_view) : |
| 611 panel_browser_view_(panel_browser_view) { | 598 panel_browser_view_(panel_browser_view) { |
| 612 PanelBrowserFrameView* frame_view = panel_browser_view_->GetFrameView(); | 599 PanelBrowserFrameView* frame_view = panel_browser_view_->GetFrameView(); |
| 613 frame_view->title_label_->SetAutoColorReadabilityEnabled(false); | 600 frame_view->title_label_->SetAutoColorReadabilityEnabled(false); |
| 614 } | 601 } |
| 615 | 602 |
| 616 void NativePanelTestingWin::PressLeftMouseButtonTitlebar( | 603 void NativePanelTestingWin::PressLeftMouseButtonTitlebar( |
| 617 const gfx::Point& mouse_location, panel::ClickModifier modifier) { | 604 const gfx::Point& mouse_location, panel::ClickModifier modifier) { |
| 618 #if defined(OS_WIN) && !defined(USE_AURA) | |
| 619 if (modifier == panel::APPLY_TO_ALL) { | |
| 620 BYTE keyState[256]; | |
| 621 ::GetKeyboardState(keyState); | |
| 622 BYTE newKeyState[256]; | |
| 623 memcpy(newKeyState, keyState, sizeof(keyState)); | |
| 624 newKeyState[VK_CONTROL] = 0x80; | |
| 625 ::SetKeyboardState(newKeyState); | |
| 626 panel_browser_view_->OnTitlebarMousePressed(mouse_location); | |
| 627 ::SetKeyboardState(keyState); // restore to original | |
| 628 return; | |
| 629 } | |
| 630 #else | |
| 631 // Cannot test with modifier. Proceed without it. | |
| 632 #endif | |
| 633 | |
| 634 panel_browser_view_->OnTitlebarMousePressed(mouse_location); | 605 panel_browser_view_->OnTitlebarMousePressed(mouse_location); |
| 635 } | 606 } |
| 636 | 607 |
| 637 void NativePanelTestingWin::ReleaseMouseButtonTitlebar( | 608 void NativePanelTestingWin::ReleaseMouseButtonTitlebar( |
| 638 panel::ClickModifier modifier) { | 609 panel::ClickModifier modifier) { |
| 639 #if defined(OS_WIN) && !defined(USE_AURA) | 610 panel_browser_view_->OnTitlebarMouseReleased(modifier); |
| 640 if (modifier == panel::APPLY_TO_ALL) { | |
| 641 BYTE keyState[256]; | |
| 642 ::GetKeyboardState(keyState); | |
| 643 BYTE newKeyState[256]; | |
| 644 memcpy(newKeyState, keyState, sizeof(keyState)); | |
| 645 newKeyState[VK_CONTROL] = 0x80; | |
| 646 ::SetKeyboardState(newKeyState); | |
| 647 panel_browser_view_->OnTitlebarMouseReleased(); | |
| 648 ::SetKeyboardState(keyState); // restore to original | |
| 649 return; | |
| 650 } | |
| 651 #else | |
| 652 // Cannot test with modifier. Proceed without it. | |
| 653 #endif | |
| 654 | |
| 655 panel_browser_view_->OnTitlebarMouseReleased(); | |
| 656 } | 611 } |
| 657 | 612 |
| 658 void NativePanelTestingWin::DragTitlebar(const gfx::Point& mouse_location) { | 613 void NativePanelTestingWin::DragTitlebar(const gfx::Point& mouse_location) { |
| 659 panel_browser_view_->OnTitlebarMouseDragged(mouse_location); | 614 panel_browser_view_->OnTitlebarMouseDragged(mouse_location); |
| 660 } | 615 } |
| 661 | 616 |
| 662 void NativePanelTestingWin::CancelDragTitlebar() { | 617 void NativePanelTestingWin::CancelDragTitlebar() { |
| 663 panel_browser_view_->OnTitlebarMouseCaptureLost(); | 618 panel_browser_view_->OnTitlebarMouseCaptureLost(); |
| 664 } | 619 } |
| 665 | 620 |
| 666 void NativePanelTestingWin::FinishDragTitlebar() { | 621 void NativePanelTestingWin::FinishDragTitlebar() { |
| 667 panel_browser_view_->OnTitlebarMouseReleased(); | 622 panel_browser_view_->OnTitlebarMouseReleased(panel::NO_MODIFIER); |
| 668 } | 623 } |
| 669 | 624 |
| 670 bool NativePanelTestingWin::VerifyDrawingAttention() const { | 625 bool NativePanelTestingWin::VerifyDrawingAttention() const { |
| 671 PanelBrowserFrameView* frame_view = panel_browser_view_->GetFrameView(); | 626 PanelBrowserFrameView* frame_view = panel_browser_view_->GetFrameView(); |
| 672 SkColor attention_color = frame_view->GetTitleColor( | 627 SkColor attention_color = frame_view->GetTitleColor( |
| 673 PanelBrowserFrameView::PAINT_FOR_ATTENTION); | 628 PanelBrowserFrameView::PAINT_FOR_ATTENTION); |
| 674 return attention_color == frame_view->title_label_->enabled_color(); | 629 return attention_color == frame_view->title_label_->enabled_color(); |
| 675 } | 630 } |
| 676 | 631 |
| 677 bool NativePanelTestingWin::VerifyActiveState(bool is_active) { | 632 bool NativePanelTestingWin::VerifyActiveState(bool is_active) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 704 return frame_view->close_button_->visible(); | 659 return frame_view->close_button_->visible(); |
| 705 case MINIMIZE_BUTTON: | 660 case MINIMIZE_BUTTON: |
| 706 return frame_view->minimize_button_->visible(); | 661 return frame_view->minimize_button_->visible(); |
| 707 case RESTORE_BUTTON: | 662 case RESTORE_BUTTON: |
| 708 return frame_view->restore_button_->visible(); | 663 return frame_view->restore_button_->visible(); |
| 709 default: | 664 default: |
| 710 NOTREACHED(); | 665 NOTREACHED(); |
| 711 } | 666 } |
| 712 return false; | 667 return false; |
| 713 } | 668 } |
| OLD | NEW |