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

Side by Side Diff: chrome/browser/ui/panels/panel_browser_window_gtk.cc

Issue 9546001: Support detaching/attaching panels via inter-strip drags. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix per feedback Created 8 years, 9 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 #include "chrome/browser/ui/panels/panel_browser_window_gtk.h" 5 #include "chrome/browser/ui/panels/panel_browser_window_gtk.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "chrome/browser/ui/browser_list.h" 8 #include "chrome/browser/ui/browser_list.h"
9 #include "chrome/browser/ui/gtk/browser_titlebar.h" 9 #include "chrome/browser/ui/gtk/browser_titlebar.h"
10 #include "chrome/browser/ui/panels/panel.h" 10 #include "chrome/browser/ui/panels/panel.h"
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 } 475 }
476 476
477 void PanelBrowserWindowGtk::EnsurePanelFullyVisible() { 477 void PanelBrowserWindowGtk::EnsurePanelFullyVisible() {
478 gtk_window_present(window()); 478 gtk_window_present(window());
479 } 479 }
480 480
481 void PanelBrowserWindowGtk::SetPanelAppIconVisibility(bool visible) { 481 void PanelBrowserWindowGtk::SetPanelAppIconVisibility(bool visible) {
482 return; 482 return;
483 } 483 }
484 484
485 void PanelBrowserWindowGtk::SetPanelAlwaysOnTop(bool on_top) {
486 gtk_window_set_keep_above(window(), on_top);
487 }
488
485 gfx::Size PanelBrowserWindowGtk::WindowSizeFromContentSize( 489 gfx::Size PanelBrowserWindowGtk::WindowSizeFromContentSize(
486 const gfx::Size& content_size) const { 490 const gfx::Size& content_size) const {
487 gfx::Size frame = GetNonClientFrameSize(); 491 gfx::Size frame = GetNonClientFrameSize();
488 return gfx::Size(content_size.width() + frame.width(), 492 return gfx::Size(content_size.width() + frame.width(),
489 content_size.height() + frame.height()); 493 content_size.height() + frame.height());
490 } 494 }
491 495
492 gfx::Size PanelBrowserWindowGtk::ContentSizeFromWindowSize( 496 gfx::Size PanelBrowserWindowGtk::ContentSizeFromWindowSize(
493 const gfx::Size& window_size) const { 497 const gfx::Size& window_size) const {
494 gfx::Size frame = GetNonClientFrameSize(); 498 gfx::Size frame = GetNonClientFrameSize();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 gtk_drag_check_threshold(titlebar_widget(), old_x, 548 gtk_drag_check_threshold(titlebar_widget(), old_x,
545 old_y, new_x, new_y)) { 549 old_y, new_x, new_y)) {
546 CreateDragWidget(); 550 CreateDragWidget();
547 if (!system_drag_disabled_for_testing_) { 551 if (!system_drag_disabled_for_testing_) {
548 GtkTargetList* list = ui::GetTargetListFromCodeMask(ui::CHROME_TAB); 552 GtkTargetList* list = ui::GetTargetListFromCodeMask(ui::CHROME_TAB);
549 gtk_drag_begin(drag_widget_, list, GDK_ACTION_MOVE, 1, last_mouse_down_); 553 gtk_drag_begin(drag_widget_, list, GDK_ACTION_MOVE, 1, last_mouse_down_);
550 // gtk_drag_begin increments reference count for GtkTargetList. So unref 554 // gtk_drag_begin increments reference count for GtkTargetList. So unref
551 // it here to reduce the reference count. 555 // it here to reduce the reference count.
552 gtk_target_list_unref(list); 556 gtk_target_list_unref(list);
553 } 557 }
554 panel_->manager()->StartDragging(panel_.get()); 558 panel_->manager()->StartDragging(panel_.get(), gfx::Point(old_x, old_y));
555 } 559 }
556 560
557 if (drag_widget_) { 561 if (drag_widget_) {
558 panel_->manager()->Drag(new_x - old_x, new_y - old_y); 562 panel_->manager()->Drag(gfx::Point(new_x, new_y));
559 gdk_event_free(last_mouse_down_); 563 gdk_event_free(last_mouse_down_);
560 last_mouse_down_ = gdk_event_copy(event); 564 last_mouse_down_ = gdk_event_copy(event);
561 } 565 }
562 } 566 }
563 567
564 void PanelBrowserWindowGtk::AnimationEnded(const ui::Animation* animation) { 568 void PanelBrowserWindowGtk::AnimationEnded(const ui::Animation* animation) {
565 titlebar()->SendEnterNotifyToCloseButtonIfUnderMouse(); 569 titlebar()->SendEnterNotifyToCloseButtonIfUnderMouse();
566 570
567 // If the final size is 0 in either dimension, hide the window as gtk does 571 // If the final size is 0 in either dimension, hide the window as gtk does
568 // not allow the window size to be 0. 572 // not allow the window size to be 0.
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 } 774 }
771 775
772 // NativePanelTesting implementation. 776 // NativePanelTesting implementation.
773 class NativePanelTestingGtk : public NativePanelTesting { 777 class NativePanelTestingGtk : public NativePanelTesting {
774 public: 778 public:
775 explicit NativePanelTestingGtk( 779 explicit NativePanelTestingGtk(
776 PanelBrowserWindowGtk* panel_browser_window_gtk); 780 PanelBrowserWindowGtk* panel_browser_window_gtk);
777 781
778 private: 782 private:
779 virtual void PressLeftMouseButtonTitlebar( 783 virtual void PressLeftMouseButtonTitlebar(
780 const gfx::Point& point) OVERRIDE; 784 const gfx::Point& mouse_location) OVERRIDE;
781 virtual void ReleaseMouseButtonTitlebar() OVERRIDE; 785 virtual void ReleaseMouseButtonTitlebar() OVERRIDE;
782 virtual void DragTitlebar(int delta_x, int delta_y) OVERRIDE; 786 virtual void DragTitlebar(const gfx::Point& mouse_location) OVERRIDE;
783 virtual void CancelDragTitlebar() OVERRIDE; 787 virtual void CancelDragTitlebar() OVERRIDE;
784 virtual void FinishDragTitlebar() OVERRIDE; 788 virtual void FinishDragTitlebar() OVERRIDE;
785 virtual bool VerifyDrawingAttention() const OVERRIDE; 789 virtual bool VerifyDrawingAttention() const OVERRIDE;
786 virtual bool VerifyActiveState(bool is_active) OVERRIDE; 790 virtual bool VerifyActiveState(bool is_active) OVERRIDE;
787 virtual void WaitForWindowCreationToComplete() const OVERRIDE; 791 virtual void WaitForWindowCreationToComplete() const OVERRIDE;
788 virtual bool IsWindowSizeKnown() const OVERRIDE; 792 virtual bool IsWindowSizeKnown() const OVERRIDE;
789 virtual bool IsAnimatingBounds() const OVERRIDE; 793 virtual bool IsAnimatingBounds() const OVERRIDE;
790 794
791 PanelBrowserWindowGtk* panel_browser_window_gtk_; 795 PanelBrowserWindowGtk* panel_browser_window_gtk_;
792 }; 796 };
793 797
794 // static 798 // static
795 NativePanelTesting* NativePanelTesting::Create(NativePanel* native_panel) { 799 NativePanelTesting* NativePanelTesting::Create(NativePanel* native_panel) {
796 return new NativePanelTestingGtk(static_cast<PanelBrowserWindowGtk*>( 800 return new NativePanelTestingGtk(static_cast<PanelBrowserWindowGtk*>(
797 native_panel)); 801 native_panel));
798 } 802 }
799 803
800 NativePanelTestingGtk::NativePanelTestingGtk( 804 NativePanelTestingGtk::NativePanelTestingGtk(
801 PanelBrowserWindowGtk* panel_browser_window_gtk) : 805 PanelBrowserWindowGtk* panel_browser_window_gtk) :
802 panel_browser_window_gtk_(panel_browser_window_gtk) { 806 panel_browser_window_gtk_(panel_browser_window_gtk) {
803 } 807 }
804 808
805 void NativePanelTestingGtk::PressLeftMouseButtonTitlebar( 809 void NativePanelTestingGtk::PressLeftMouseButtonTitlebar(
806 const gfx::Point& point) { 810 const gfx::Point& mouse_location) {
807 // If there is an animation, wait for it to finish as we don't handle button 811 // If there is an animation, wait for it to finish as we don't handle button
808 // clicks while animation is in progress. 812 // clicks while animation is in progress.
809 while (panel_browser_window_gtk_->IsAnimatingBounds()) 813 while (panel_browser_window_gtk_->IsAnimatingBounds())
810 MessageLoopForUI::current()->RunAllPending(); 814 MessageLoopForUI::current()->RunAllPending();
811 815
812 GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS); 816 GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
813 event->button.button = 1; 817 event->button.button = 1;
814 event->button.x_root = point.x(); 818 event->button.x_root = mouse_location.x();
815 event->button.y_root = point.y(); 819 event->button.y_root = mouse_location.y();
816 panel_browser_window_gtk_->OnTitlebarButtonPressEvent( 820 panel_browser_window_gtk_->OnTitlebarButtonPressEvent(
817 panel_browser_window_gtk_->titlebar_widget(), 821 panel_browser_window_gtk_->titlebar_widget(),
818 reinterpret_cast<GdkEventButton*>(event)); 822 reinterpret_cast<GdkEventButton*>(event));
819 gdk_event_free(event); 823 gdk_event_free(event);
820 MessageLoopForUI::current()->RunAllPending(); 824 MessageLoopForUI::current()->RunAllPending();
821 } 825 }
822 826
823 void NativePanelTestingGtk::ReleaseMouseButtonTitlebar() { 827 void NativePanelTestingGtk::ReleaseMouseButtonTitlebar() {
824 GdkEvent* event = gdk_event_new(GDK_BUTTON_RELEASE); 828 GdkEvent* event = gdk_event_new(GDK_BUTTON_RELEASE);
825 event->button.button = 1; 829 event->button.button = 1;
826 panel_browser_window_gtk_->OnTitlebarButtonReleaseEvent( 830 panel_browser_window_gtk_->OnTitlebarButtonReleaseEvent(
827 panel_browser_window_gtk_->titlebar_widget(), 831 panel_browser_window_gtk_->titlebar_widget(),
828 reinterpret_cast<GdkEventButton*>(event)); 832 reinterpret_cast<GdkEventButton*>(event));
829 MessageLoopForUI::current()->RunAllPending(); 833 MessageLoopForUI::current()->RunAllPending();
830 } 834 }
831 835
832 void NativePanelTestingGtk::DragTitlebar(int delta_x, int delta_y) { 836 void NativePanelTestingGtk::DragTitlebar(const gfx::Point& mouse_location) {
833 // Prevent extra unwanted signals and focus grabs. 837 // Prevent extra unwanted signals and focus grabs.
834 panel_browser_window_gtk_->system_drag_disabled_for_testing_ = true; 838 panel_browser_window_gtk_->system_drag_disabled_for_testing_ = true;
835 839
836 GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY); 840 GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY);
837 gdk_event_get_root_coords(panel_browser_window_gtk_->last_mouse_down_, 841 event->motion.x_root = mouse_location.x();
838 &event->motion.x_root, &event->motion.y_root); 842 event->motion.y_root = mouse_location.y();
839 event->motion.x_root += delta_x;
840 event->motion.y_root += delta_y;
841 panel_browser_window_gtk_->DidProcessEvent(event); 843 panel_browser_window_gtk_->DidProcessEvent(event);
842 gdk_event_free(event); 844 gdk_event_free(event);
843 MessageLoopForUI::current()->RunAllPending(); 845 MessageLoopForUI::current()->RunAllPending();
844 } 846 }
845 847
846 void NativePanelTestingGtk::CancelDragTitlebar() { 848 void NativePanelTestingGtk::CancelDragTitlebar() {
847 panel_browser_window_gtk_->OnDragFailed( 849 panel_browser_window_gtk_->OnDragFailed(
848 panel_browser_window_gtk_->drag_widget_, NULL, 850 panel_browser_window_gtk_->drag_widget_, NULL,
849 GTK_DRAG_RESULT_USER_CANCELLED); 851 GTK_DRAG_RESULT_USER_CANCELLED);
850 MessageLoopForUI::current()->RunAllPending(); 852 MessageLoopForUI::current()->RunAllPending();
(...skipping 26 matching lines...) Expand all
877 MessageLoopForUI::current()->RunAllPending(); 879 MessageLoopForUI::current()->RunAllPending();
878 } 880 }
879 881
880 bool NativePanelTestingGtk::IsWindowSizeKnown() const { 882 bool NativePanelTestingGtk::IsWindowSizeKnown() const {
881 return panel_browser_window_gtk_->window_size_known_; 883 return panel_browser_window_gtk_->window_size_known_;
882 } 884 }
883 885
884 bool NativePanelTestingGtk::IsAnimatingBounds() const { 886 bool NativePanelTestingGtk::IsAnimatingBounds() const {
885 return panel_browser_window_gtk_->IsAnimatingBounds(); 887 return panel_browser_window_gtk_->IsAnimatingBounds();
886 } 888 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698