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

Side by Side Diff: chrome/browser/ui/gtk/panels/panel_drag_gtk.h

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_GTK_PANELS_PANEL_DRAG_GTK_H_
6 #define CHROME_BROWSER_UI_GTK_PANELS_PANEL_DRAG_GTK_H_
7
8 #include <gtk/gtk.h>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "ui/base/gtk/gtk_signal.h"
13
14 class Panel;
15 class PanelDragDelegate;
16
17 // Class for GTK handling of move-drag and resize-drag on a panel.
18 // Only one type of drag may be active at any time.
19 // Dragging only begins if the mouse is moved beyond the drag threshold.
20 // If mouse is released without exceeding the drag threshold, the mouse
21 // press and release is treated as a mouse click.
22 class PanelDragGtk {
23 public:
24 explicit PanelDragGtk(Panel* panel);
25 ~PanelDragGtk();
26
27 GtkWidget* widget() const { return drag_widget_; }
28
29 // Sets up mouse and keyboard events processing while the mouse
30 // is pressed on a window edge.
31 // |event| is the mouse press event.
32 // |cursor| is the cursor to display during the drag.
33 // |edge| is the window edge from which to resize the panel.
34 void InitialWindowEdgeMousePress(GdkEventButton* event, GdkCursor* cursor,
35 GdkWindowEdge& edge);
36
37 // Sets up mouse and keyboard events processing while the mouse is
38 // pressed on the titlebar.
39 // |event| is the mouse press event.
40 // |titlebar_widget| should handle the mouse release event if the mouse
41 // is released without exceeding the drag threshold (a mouse click).
42 void InitialTitlebarMousePress(GdkEventButton* event,
43 GtkWidget* titlebar_widget);
44
45 private:
46 friend class GtkNativePanelTesting;
47
48 enum DragState {
49 NOT_DRAGGING,
50 DRAG_CAN_START, // mouse pressed
51 DRAG_IN_PROGRESS, // mouse moved beyond drag threshold
52 DRAG_ENDED_WAITING_FOR_MOUSE_RELEASE
53 };
54
55 // Callbacks for GTK mouse and key events.
56 CHROMEGTK_CALLBACK_1(PanelDragGtk, gboolean, OnMouseMoveEvent,
57 GdkEventMotion*);
58 CHROMEGTK_CALLBACK_1(PanelDragGtk, gboolean, OnButtonPressEvent,
59 GdkEventButton*);
60 CHROMEGTK_CALLBACK_1(PanelDragGtk, gboolean, OnButtonReleaseEvent,
61 GdkEventButton*);
62 CHROMEGTK_CALLBACK_1(PanelDragGtk, gboolean, OnKeyPressEvent,
63 GdkEventKey*);
64 CHROMEGTK_CALLBACK_1(PanelDragGtk, gboolean, OnKeyReleaseEvent,
65 GdkEventKey*);
66 CHROMEGTK_CALLBACK_1(PanelDragGtk, gboolean, OnGrabBrokenEvent,
67 GdkEventGrabBroken*);
68
69 // Utility to dcheck a bunch of state to ensure a clean slate.
70 // Returns only if all the dchecks pass.
71 void AssertCleanState();
72
73 void GrabPointerAndKeyboard(GdkEventButton* event,
74 GdkCursor* cursor);
75 void ReleasePointerAndKeyboardGrab();
76
77 // Ends any drag that is currently in progress (if any).
78 // Resets all drag state except for pointer and keyboard grabs.
79 // The grabs are released when the mouse is released to prevent a
80 // mouse release *after* the drag has ended (e.g. via ESC key) from
81 // being treated as a mouse click.
82 void EndDrag(bool canceled);
83
84 // Weak pointer to the panel being dragged.
85 Panel* panel_;
86
87 // Invisible event box to receive mouse and key events.
88 GtkWidget* drag_widget_;
89
90 DragState drag_state_;
91
92 // A copy of the initial button press event.
93 GdkEvent* initial_mouse_down_;
94
95 // Widget that should process the mouse click if mouse is released
96 // without exceeding the drag threshold. May be NULL if no click
97 // handling is necessary.
98 GtkWidget* click_handler_;
99
100 // Delegate for processing drag depends on actual type of drag.
101 PanelDragDelegate* drag_delegate_;
102
103 DISALLOW_COPY_AND_ASSIGN(PanelDragGtk);
104 };
105
106 #endif // CHROME_BROWSER_UI_GTK_PANELS_PANEL_DRAG_GTK_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698