2297d633645998394e46b76c34ca5d8de8f76959
[WebKit-https.git] / Source / WebCore / platform / gtk / GtkDragAndDropHelper.h
1 /*
2  * Copyright (C) 2011, Igalia S.L.
3  *
4  *  This library is free software; you can redistribute it and/or
5  *  modify it under the terms of the GNU Lesser General Public
6  *  License as published by the Free Software Foundation; either
7  *  version 2 of the License, or (at your option) any later version.
8  *
9  *  This library is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  *  Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public
15  *  License along with this library; if not, write to the Free Software
16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #ifndef GtkDragAndDropHelper_h
20 #define GtkDragAndDropHelper_h
21
22 #include "DataObjectGtk.h"
23 #include <wtf/FastMalloc.h>
24 #include <wtf/Noncopyable.h>
25 #include <wtf/text/CString.h>
26
27 namespace WebCore {
28
29 struct DroppingContext;
30 class DragData;
31
32 typedef void (*DragExitedCallback)(GtkWidget*, DragData*, bool dropHappened);
33
34 class GtkDragAndDropHelper {
35     WTF_MAKE_NONCOPYABLE(GtkDragAndDropHelper);
36     WTF_MAKE_FAST_ALLOCATED;
37
38 public:
39     GtkDragAndDropHelper()
40         : m_widget(0)
41     {
42     }
43     ~GtkDragAndDropHelper();
44
45     void setWidget(GtkWidget* widget) { m_widget = widget; }
46     bool handleDragEnd(GdkDragContext*);
47     void handleGetDragData(GdkDragContext*, GtkSelectionData*, guint info);
48     void handleDragLeave(GdkDragContext*, DragExitedCallback);
49     void handleDragLeaveLater(DroppingContext*);
50     DataObjectGtk* handleDragMotion(GdkDragContext*, const IntPoint&, unsigned time);
51     DataObjectGtk* handleDragDataReceived(GdkDragContext*, GtkSelectionData*, unsigned info, IntPoint&);
52     DataObjectGtk* handleDragDrop(GdkDragContext*);
53     void startedDrag(GdkDragContext*, DataObjectGtk*);
54
55 private:
56     GtkWidget* m_widget;
57     HashMap<GdkDragContext*, DroppingContext*> m_droppingContexts;
58     HashMap<GdkDragContext*, RefPtr<DataObjectGtk> > m_draggingDataObjects;
59 };
60
61 }
62
63 #endif // DataObjectGtk_h