]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/dnd.cpp
remove incorrect cast of wxString to char* (unnecessary and breaks wxUSE_STL build)
[wxWidgets.git] / src / gtk1 / dnd.cpp
index 2295ecef460d9e69b9818aa91d5def1105ec7688..7b93d12dfa7624e4bca78283c86dbda699e9d33c 100644 (file)
@@ -56,10 +56,11 @@ static long gs_flagsForDrag = 0;
 // the trace mask we use with wxLogTrace() - call
 // wxLog::AddTraceMask(TRACE_DND) to enable the trace messages from here
 // (there are quite a few of them, so don't enable this by default)
-static const wxChar *TRACE_DND = _T("dnd");
+#define TRACE_DND _T("dnd")
 
+// global variables because GTK+ DnD want to have the
+// mouse event that caused it
 extern GdkEvent *g_lastMouseEvent;
-
 extern int g_lastButtonNumber;
 
 //----------------------------------------------------------------------------
@@ -192,7 +193,7 @@ static void target_drag_leave( GtkWidget *WXUNUSED(widget),
     drop_target->m_firstMotion = true;
 
     /* after this, invalidate the drop_target's GdkDragContext */
-    drop_target->SetDragContext( (GdkDragContext*) NULL );
+    drop_target->SetDragContext( NULL );
 }
 }
 
@@ -285,7 +286,7 @@ static gboolean target_drag_motion( GtkWidget *WXUNUSED(widget),
     }
 
     /* after this, invalidate the drop_target's GdkDragContext */
-    drop_target->SetDragContext( (GdkDragContext*) NULL );
+    drop_target->SetDragContext( NULL );
 
     /* this has to be done because GDK has no "drag_enter" event */
     drop_target->m_firstMotion = false;
@@ -383,10 +384,10 @@ static gboolean target_drag_drop( GtkWidget *widget,
     }
 
     /* after this, invalidate the drop_target's GdkDragContext */
-    drop_target->SetDragContext( (GdkDragContext*) NULL );
+    drop_target->SetDragContext( NULL );
 
     /* after this, invalidate the drop_target's drag widget */
-    drop_target->SetDragWidget( (GtkWidget*) NULL );
+    drop_target->SetDragWidget( NULL );
 
     /* this has to be done because GDK has no "drag_enter" event */
     drop_target->m_firstMotion = true;
@@ -447,7 +448,7 @@ static void target_drag_data_received( GtkWidget *WXUNUSED(widget),
     }
 
     /* after this, invalidate the drop_target's drag data */
-    drop_target->SetDragData( (GtkSelectionData*) NULL );
+    drop_target->SetDragData( NULL );
 }
 }
 
@@ -459,9 +460,9 @@ wxDropTarget::wxDropTarget( wxDataObject *data )
             : wxDropTargetBase( data )
 {
     m_firstMotion = true;
-    m_dragContext = (GdkDragContext*) NULL;
-    m_dragWidget = (GtkWidget*) NULL;
-    m_dragData = (GtkSelectionData*) NULL;
+    m_dragContext = NULL;
+    m_dragWidget = NULL;
+    m_dragData = NULL;
     m_dragTime = 0;
 }
 
@@ -581,7 +582,7 @@ void wxDropTarget::RegisterWidget( GtkWidget *widget )
 
     gtk_drag_dest_set( widget,
                        (GtkDestDefaults) 0,         /* no default behaviour */
-                       (GtkTargetEntry*) NULL,      /* we don't supply any formats here */
+                       NULL,      /* we don't supply any formats here */
                        0,                           /* number of targets = 0 */
                        (GdkDragAction) 0 );         /* we don't supply any actions here */
 
@@ -676,7 +677,7 @@ source_drag_data_get  (GtkWidget          *WXUNUSED(widget),
 
 extern "C" {
 static void source_drag_data_delete( GtkWidget *WXUNUSED(widget),
-                                     GdkDragContext *context,
+                                     GdkDragContext *WXUNUSED(context),
                                      wxDropSource *WXUNUSED(drop_source) )
 {
     if (g_isIdle)
@@ -747,7 +748,7 @@ wxDropSource::wxDropSource(wxWindow *win,
 {
     m_waiting = true;
 
-    m_iconWindow = (GtkWidget*) NULL;
+    m_iconWindow = NULL;
 
     m_window = win;
     m_widget = win->m_widget;
@@ -768,7 +769,7 @@ wxDropSource::wxDropSource(wxDataObject& data,
 
     SetData( data );
 
-    m_iconWindow = (GtkWidget*) NULL;
+    m_iconWindow = NULL;
 
     m_window = win;
     m_widget = win->m_widget;
@@ -814,7 +815,7 @@ void wxDropSource::PrepareIcon( int action, GdkDragContext *context )
     if ( icon->GetMask() )
         mask = icon->GetMask()->GetBitmap();
     else
-        mask = (GdkBitmap *)NULL;
+        mask = NULL;
 
     GdkPixmap *pixmap = icon->GetPixmap();
 
@@ -855,6 +856,14 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
     if (g_blockEventsOnDrag)
         return wxDragNone;
 
+    // don't start dragging if no button is down
+    if (g_lastButtonNumber == 0)
+        return wxDragNone;
+        
+    // we can only start a drag after a mouse event
+    if (g_lastMouseEvent == NULL)
+        return wxDragNone;
+
     // disabled for now
     g_blockEventsOnDrag = true;
 
@@ -862,7 +871,7 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
 
     m_waiting = true;
 
-    GtkTargetList *target_list = gtk_target_list_new( (GtkTargetEntry*) NULL, 0 );
+    GtkTargetList *target_list = gtk_target_list_new( NULL, 0 );
 
     wxDataFormat *array = new wxDataFormat[ m_data->GetFormatCount() ];
     m_data->GetAllFormats( array );
@@ -875,9 +884,6 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
     }
     delete[] array;
 
-    /* don't start dragging if no button is down */
-    if (g_lastButtonNumber)
-    {
         int action = GDK_ACTION_COPY;
         if ( flags & wxDrag_AllowMove )
             action |= GDK_ACTION_MOVE;
@@ -903,7 +909,6 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
         m_retValue = ConvertFromGTK(context->action);
         if ( m_retValue == wxDragNone )
             m_retValue = wxDragCancel;
-    }
 
     g_blockEventsOnDrag = false;