Index: chrome/browser/ui/gtk/tab_contents_drag_source.h |
diff --git a/chrome/browser/ui/gtk/tab_contents_drag_source.h b/chrome/browser/ui/gtk/tab_contents_drag_source.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..485c86532e37be778f453cd5245ea9a0c1d43820 |
--- /dev/null |
+++ b/chrome/browser/ui/gtk/tab_contents_drag_source.h |
@@ -0,0 +1,110 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_UI_GTK_TAB_CONTENTS_DRAG_SOURCE_H_ |
+#define CHROME_BROWSER_UI_GTK_TAB_CONTENTS_DRAG_SOURCE_H_ |
+#pragma once |
+ |
+#include <gtk/gtk.h> |
+ |
+#include "app/gtk_signal.h" |
+#include "app/gtk_signal_registrar.h" |
+#include "base/basictypes.h" |
+#include "base/file_path.h" |
+#include "base/message_loop.h" |
+#include "base/string16.h" |
+#include "gfx/point.h" |
+#include "gfx/native_widget_types.h" |
+#include "googleurl/src/gurl.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebDragOperation.h" |
+ |
+class SkBitmap; |
+class TabContents; |
+class TabContentsView; |
+struct WebDropData; |
+ |
+// TabContentsDragSource takes care of managing the drag from a TabContents |
+// with Gtk. |
+class TabContentsDragSource : public MessageLoopForUI::Observer { |
+ public: |
+ explicit TabContentsDragSource(TabContentsView* tab_contents_view); |
+ ~TabContentsDragSource(); |
+ |
+ TabContents* tab_contents() const; |
+ |
+ // Starts a drag for the tab contents this TabContentsDragSource was |
+ // created for. |
+ void StartDragging(const WebDropData& drop_data, |
+ WebKit::WebDragOperationsMask allowed_ops, |
+ GdkEventButton* last_mouse_down, |
+ const SkBitmap& image, |
+ const gfx::Point& image_offset); |
+ |
+ // MessageLoop::Observer implementation: |
+ virtual void WillProcessEvent(GdkEvent* event); |
+ virtual void DidProcessEvent(GdkEvent* event); |
+ |
+ private: |
+ CHROMEGTK_CALLBACK_2(TabContentsDragSource, gboolean, OnDragFailed, |
+ GdkDragContext*, GtkDragResult); |
+ CHROMEGTK_CALLBACK_1(TabContentsDragSource, void, OnDragBegin, |
+ GdkDragContext*); |
+ CHROMEGTK_CALLBACK_1(TabContentsDragSource, void, OnDragEnd, |
+ GdkDragContext*); |
+ CHROMEGTK_CALLBACK_4(TabContentsDragSource, void, OnDragDataGet, |
+ GdkDragContext*, GtkSelectionData*, guint, guint); |
+ CHROMEGTK_CALLBACK_1(TabContentsDragSource, gboolean, OnDragIconExpose, |
+ GdkEventExpose*); |
+ |
+ gfx::NativeView GetContentNativeView() const; |
+ |
+ // The view we're manging the drag for. |
+ TabContentsView* tab_contents_view_; |
+ |
+ // The drop data for the current drag (for drags that originate in the render |
+ // view). Non-NULL iff there is a current drag. |
+ scoped_ptr<WebDropData> drop_data_; |
+ |
+ // The image used for depicting the drag, and the offset between the cursor |
+ // and the top left pixel. |
+ GdkPixbuf* drag_pixbuf_; |
+ gfx::Point image_offset_; |
+ |
+ // The mime type for the file contents of the current drag (if any). |
+ GdkAtom drag_file_mime_type_; |
+ |
+ // Whether the current drag has failed. Meaningless if we are not the source |
+ // for a current drag. |
+ bool drag_failed_; |
+ |
+ // This is the widget we use to initiate drags. Since we don't use the |
+ // renderer widget, we can persist drags even when our contents is switched |
+ // out. We can't use an OwnedWidgetGtk because the GtkInvisible widget |
+ // initialization code sinks the reference. |
+ GtkWidget* drag_widget_; |
+ |
+ // Context created once drag starts. A NULL value indicates that there is |
+ // no drag currently in progress. |
+ GdkDragContext* drag_context_; |
+ |
+ // The file mime type for a drag-out download. |
+ string16 wide_download_mime_type_; |
+ |
+ // The file name to be saved to for a drag-out download. |
+ FilePath download_file_name_; |
+ |
+ // The URL to download from for a drag-out download. |
+ GURL download_url_; |
+ |
+ // The widget that provides visual feedback for the drag. We can't use |
+ // an OwnedWidgetGtk because the GtkWindow initialization code sinks |
+ // the reference. |
+ GtkWidget* drag_icon_; |
+ |
+ GtkSignalRegistrar signals_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TabContentsDragSource); |
+}; |
+ |
+#endif // CHROME_BROWSER_UI_GTK_TAB_CONTENTS_DRAG_SOURCE_H_ |