- g_blockEventsOnDrag = FALSE;
-}
-
-wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
-{
- if (gdk_dnd.dnd_grabbed) return (wxDragResult) wxDragNone;
- if (gdk_dnd.drag_really) return (wxDragResult) wxDragNone;
-
- wxASSERT_MSG( m_data, "wxDragSource: no data" );
-
- if (!m_data) return (wxDragResult) wxDragNone;
- if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
-
- GdkWindowPrivate *wp = (GdkWindowPrivate*) m_widget->window;
-
- RegisterWindow();
-
- gdk_dnd.drag_perhaps = TRUE;
-
- gdk_dnd.dnd_drag_start.x = 5;
- gdk_dnd.dnd_drag_start.y = 5;
- gdk_dnd.real_sw = wp;
-
- if (gdk_dnd.drag_startwindows)
- {
- g_free( gdk_dnd.drag_startwindows );
- gdk_dnd.drag_startwindows = (GdkWindow **) NULL;
- }
- gdk_dnd.drag_numwindows = gdk_dnd.drag_really = 0;
-
- XWindowAttributes dnd_winattr;
- XGetWindowAttributes( gdk_display, wp->xwindow, &dnd_winattr );
- wp->dnd_drag_savedeventmask = dnd_winattr.your_event_mask;
-
- gdk_dnd_drag_addwindow( m_widget->window );
-
- GdkEventDragBegin ev;
- ev.type = GDK_DRAG_BEGIN;
- ev.window = m_widget->window;
- ev.u.allflags = 0;
- ev.u.flags.protocol_version = DND_PROTOCOL_VERSION;
-
- gdk_event_put( (GdkEvent*)&ev );
-
- XGrabPointer( gdk_display, wp->xwindow, False,
- ButtonMotionMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
- GrabModeAsync, GrabModeAsync, gdk_root_window, None, CurrentTime );
-
- gdk_dnd_set_drag_cursors( m_defaultCursor.GetCursor(), m_goaheadCursor.GetCursor() );
-
- gdk_dnd.dnd_grabbed = TRUE;
- gdk_dnd.drag_really = 1;
-
- int x = 0;
- int y = 0;
- gdk_window_get_pointer( m_widget->window, &x, &y, (GdkModifierType *) NULL );
-
- gdk_dnd_display_drag_cursor( x, y, FALSE, TRUE );
-
- while (gdk_dnd.drag_really || gdk_dnd.drag_perhaps) wxYield();
-
- UnregisterWindow();
-
- g_blockEventsOnDrag = FALSE;
-
- return m_retValue;
+ GdkBitmap *mask;
+ if ( icon->GetMask() )
+ mask = icon->GetMask()->GetBitmap();
+ else
+ mask = (GdkBitmap *)NULL;
+
+ GdkPixmap *pixmap = icon->GetPixmap();
+
+ gint width,height;
+ gdk_drawable_get_size (pixmap, &width, &height);
+
+ GdkColormap *colormap = gtk_widget_get_colormap( m_widget );
+ gtk_widget_push_colormap (colormap);
+
+ m_iconWindow = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_widget_set_events (m_iconWindow, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
+ gtk_widget_set_app_paintable (m_iconWindow, TRUE);
+
+ gtk_widget_pop_colormap ();
+
+ gtk_widget_set_size_request (m_iconWindow, width, height);
+ gtk_widget_realize (m_iconWindow);
+
+ g_signal_connect (m_iconWindow, "configure_event",
+ G_CALLBACK (gtk_dnd_window_configure_callback), this);
+
+ gdk_window_set_back_pixmap (m_iconWindow->window, pixmap, FALSE);
+
+ if (mask)
+ gtk_widget_shape_combine_mask (m_iconWindow, mask, 0, 0);
+
+ gtk_drag_set_icon_widget( context, m_iconWindow, 0, 0 );