| Index: chrome/browser/gtk/tab_contents_drag_source.cc
|
| diff --git a/chrome/browser/gtk/tab_contents_drag_source.cc b/chrome/browser/gtk/tab_contents_drag_source.cc
|
| index c3d94c0ee029fc825e9b8311581beb1cfdabff4b..ffd914e8806f72e936bf945358cda9025f06bdfb 100644
|
| --- a/chrome/browser/gtk/tab_contents_drag_source.cc
|
| +++ b/chrome/browser/gtk/tab_contents_drag_source.cc
|
| @@ -32,29 +32,25 @@ TabContentsDragSource::TabContentsDragSource(
|
| : tab_contents_view_(tab_contents_view),
|
| drag_pixbuf_(NULL),
|
| drag_failed_(false),
|
| - drag_widget_(NULL),
|
| - drag_icon_(NULL) {
|
| - drag_widget_ = gtk_invisible_new();
|
| - g_signal_connect(drag_widget_, "drag-failed",
|
| + drag_widget_(gtk_invisible_new()),
|
| + drag_icon_(gtk_window_new(GTK_WINDOW_POPUP)) {
|
| + g_object_ref(drag_widget_);
|
| + signals_.Connect(drag_widget_, "drag-failed",
|
| G_CALLBACK(OnDragFailedThunk), this);
|
| - g_signal_connect(drag_widget_, "drag-begin", G_CALLBACK(OnDragBeginThunk),
|
| + signals_.Connect(drag_widget_, "drag-begin",
|
| + G_CALLBACK(OnDragBeginThunk),
|
| this);
|
| - g_signal_connect(drag_widget_, "drag-end", G_CALLBACK(OnDragEndThunk), this);
|
| - g_signal_connect(drag_widget_, "drag-data-get",
|
| + signals_.Connect(drag_widget_, "drag-end",
|
| + G_CALLBACK(OnDragEndThunk), this);
|
| + signals_.Connect(drag_widget_, "drag-data-get",
|
| G_CALLBACK(OnDragDataGetThunk), this);
|
| - g_object_ref_sink(drag_widget_);
|
| +
|
| + g_object_ref(drag_icon_);
|
| + signals_.Connect(drag_icon_, "expose-event",
|
| + G_CALLBACK(OnDragIconExposeThunk), this);
|
| }
|
|
|
| TabContentsDragSource::~TabContentsDragSource() {
|
| - g_signal_handlers_disconnect_by_func(drag_widget_,
|
| - reinterpret_cast<gpointer>(OnDragFailedThunk), this);
|
| - g_signal_handlers_disconnect_by_func(drag_widget_,
|
| - reinterpret_cast<gpointer>(OnDragBeginThunk), this);
|
| - g_signal_handlers_disconnect_by_func(drag_widget_,
|
| - reinterpret_cast<gpointer>(OnDragEndThunk), this);
|
| - g_signal_handlers_disconnect_by_func(drag_widget_,
|
| - reinterpret_cast<gpointer>(OnDragDataGetThunk), this);
|
| -
|
| // Break the current drag, if any.
|
| if (drop_data_.get()) {
|
| gtk_grab_add(drag_widget_);
|
| @@ -63,9 +59,8 @@ TabContentsDragSource::~TabContentsDragSource() {
|
| drop_data_.reset();
|
| }
|
|
|
| - gtk_widget_destroy(drag_widget_);
|
| g_object_unref(drag_widget_);
|
| - drag_widget_ = NULL;
|
| + g_object_unref(drag_icon_);
|
| }
|
|
|
| TabContents* TabContentsDragSource::tab_contents() const {
|
| @@ -319,18 +314,14 @@ void TabContentsDragSource::OnDragBegin(GtkWidget* sender,
|
| }
|
|
|
| if (drag_pixbuf_) {
|
| - drag_icon_ = gtk_window_new(GTK_WINDOW_POPUP);
|
| - g_object_ref_sink(drag_icon_);
|
| - g_signal_connect(drag_icon_, "expose-event",
|
| - G_CALLBACK(OnDragIconExposeThunk), this);
|
| gtk_widget_set_size_request(drag_icon_,
|
| gdk_pixbuf_get_width(drag_pixbuf_),
|
| gdk_pixbuf_get_height(drag_pixbuf_));
|
|
|
| - GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(drag_icon_));
|
| + GdkScreen* screen = gtk_widget_get_screen(drag_icon_);
|
| GdkColormap* rgba = gdk_screen_get_rgba_colormap(screen);
|
| if (rgba)
|
| - gtk_widget_set_colormap(GTK_WIDGET(drag_icon_), rgba);
|
| + gtk_widget_set_colormap(drag_icon_, rgba);
|
|
|
| gtk_drag_set_icon_widget(drag_context, drag_icon_,
|
| image_offset_.x(), image_offset_.y());
|
| @@ -339,10 +330,6 @@ void TabContentsDragSource::OnDragBegin(GtkWidget* sender,
|
|
|
| void TabContentsDragSource::OnDragEnd(GtkWidget* sender,
|
| GdkDragContext* drag_context) {
|
| - if (drag_icon_) {
|
| - g_object_unref(drag_icon_);
|
| - drag_icon_ = NULL;
|
| - }
|
| if (drag_pixbuf_) {
|
| g_object_unref(drag_pixbuf_);
|
| drag_pixbuf_ = NULL;
|
|
|