Index: chrome/browser/ui/panels/panel_drag_gtk.h |
diff --git a/chrome/browser/ui/panels/panel_drag_gtk.h b/chrome/browser/ui/panels/panel_drag_gtk.h |
index f2ea5e650417f961596bf0a28ce73fa9cc1145c4..6ca655a5856572a0c5d1bf5badf74e99c3e2ce2e 100644 |
--- a/chrome/browser/ui/panels/panel_drag_gtk.h |
+++ b/chrome/browser/ui/panels/panel_drag_gtk.h |
@@ -48,7 +48,8 @@ class PanelDragGtk { |
enum DragState { |
NOT_DRAGGING, |
- DRAG_IN_PROGRESS |
+ DRAG_IN_PROGRESS, |
+ DRAG_ENDED_WAITING_FOR_MOUSE_RELEASE |
}; |
// Callbacks for GTK mouse and key events. |
@@ -71,9 +72,13 @@ class PanelDragGtk { |
void GrabPointerAndKeyboard(GdkEventButton* event, |
GdkCursor* cursor); |
+ void ReleasePointerAndKeyboardGrab(); |
// Ends any drag that is currently in progress (if any). |
- // Also resets all drag state. |
+ // Resets all drag state except for pointer and keyboard grabs. |
+ // The grabs are released when the mouse is released to prevent a |
+ // mouse release *after* the drag has ended (e.g. via ESC key) from |
+ // being treated as a mouse click. |
void EndDrag(bool canceled); |
// Weak pointer to the panel being dragged. |