Index: chrome/browser/ui/panels/panel_browser_window_gtk.cc |
diff --git a/chrome/browser/ui/panels/panel_browser_window_gtk.cc b/chrome/browser/ui/panels/panel_browser_window_gtk.cc |
index 2602346841b4731ad2e97de6421a2f6c88396e26..8871d884f2ba52305b2a3d4293ef827141964661 100644 |
--- a/chrome/browser/ui/panels/panel_browser_window_gtk.cc |
+++ b/chrome/browser/ui/panels/panel_browser_window_gtk.cc |
@@ -9,6 +9,7 @@ |
#include "chrome/browser/ui/gtk/browser_titlebar.h" |
#include "chrome/browser/ui/panels/panel.h" |
#include "chrome/browser/ui/panels/panel_bounds_animation.h" |
+#include "chrome/browser/ui/panels/panel_drag_gtk.h" |
#include "chrome/browser/ui/panels/panel_manager.h" |
#include "chrome/browser/ui/panels/panel_strip.h" |
#include "chrome/browser/ui/panels/panel_settings_menu_model.h" |
@@ -41,7 +42,7 @@ const char* const kDrawAttentionTitleMarkupSuffix = "</span>"; |
// size in overflow expansion state. |
const int kMinWindowWidth = 2; |
-} |
+} // namespace |
NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, |
const gfx::Rect& bounds) { |
@@ -104,10 +105,21 @@ void PanelBrowserWindowGtk::Init() { |
} |
bool PanelBrowserWindowGtk::GetWindowEdge(int x, int y, GdkWindowEdge* edge) { |
- // Since panels are not resizable or movable by the user, we should not |
- // detect the window edge for behavioral purposes. The edge, if any, |
- // is present only for visual aspects. |
- return FALSE; |
+ // Only detect the window edge when panels can be resized by the user. |
+ // This method is used by the base class to detect when the cursor has |
+ // hit the window edge in order to change the cursor to a resize cursor |
+ // and to detect when to initiate a resize drag. |
+ return panel_->CanResizeByMouse() ? |
+ BrowserWindowGtk::GetWindowEdge(x, y, edge) : FALSE; |
+} |
+ |
+void PanelBrowserWindowGtk::EnsureDragHelperCreated() { |
+ if (drag_helper_.get()) |
+ return; |
+ |
+ drag_helper_.reset(new PanelDragGtk(panel_.get())); |
+ gtk_box_pack_end(GTK_BOX(window_vbox_), drag_helper_->widget(), |
+ FALSE, FALSE, 0); |
} |
bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( |
@@ -122,6 +134,22 @@ bool PanelBrowserWindowGtk::HandleTitleBarLeftMousePress( |
return TRUE; |
} |
+bool PanelBrowserWindowGtk::HandleWindowEdgeLeftMousePress( |
+ GtkWindow* window, |
+ GdkWindowEdge edge, |
+ GdkEventButton* event) { |
+ DCHECK_EQ(1U, event->button); |
+ DCHECK_EQ(GDK_BUTTON_PRESS, event->type); |
+ |
+ EnsureDragHelperCreated(); |
+ // Resize cursor was set by BrowserWindowGtk when mouse moved over |
+ // window edge. |
+ GdkCursor* cursor = |
+ gdk_window_get_cursor(gtk_widget_get_window(GTK_WIDGET(window_))); |
+ drag_helper_->InitialWindowEdgeMousePress(event, cursor, edge); |
+ return TRUE; |
+} |
+ |
void PanelBrowserWindowGtk::SaveWindowPosition() { |
// We don't save window position for panels as it's controlled by |
// PanelManager. |
@@ -286,6 +314,10 @@ void PanelBrowserWindowGtk::Observe( |
gtk_grab_remove(drag_widget_); |
DestroyDragWidget(); |
} |
+ |
+ if (drag_helper_.get()) |
+ drag_helper_.reset(); |
+ |
panel_->OnNativePanelClosed(); |
break; |
} |