]> git.sesse.net Git - vlc/commitdiff
* drag & drop works with gnome file manager now
authorCyril Deguet <asmax@videolan.org>
Mon, 9 Jun 2003 00:32:58 +0000 (00:32 +0000)
committerCyril Deguet <asmax@videolan.org>
Mon, 9 Jun 2003 00:32:58 +0000 (00:32 +0000)
modules/gui/skins/x11/x11_dragdrop.cpp

index b981d11e47044da516cc87c99489519663555f36..95c55916798816370feb2c8da1cd96e5f9df3bc0 100644 (file)
@@ -2,7 +2,7 @@
  * x11_dragdrop.cpp: X11 implementation of the drag & drop
  *****************************************************************************
  * Copyright (C) 2003 VideoLAN
- * $Id: x11_dragdrop.cpp,v 1.3 2003/06/09 00:07:09 asmax Exp $
+ * $Id: x11_dragdrop.cpp,v 1.4 2003/06/09 00:32:58 asmax Exp $
  *
  * Authors: Cyril Deguet     <asmax@videolan.org>
  *
@@ -171,21 +171,34 @@ void X11DropObject::DndDrop( ldata_t data )
     XGetWindowProperty( display, src, propAtom, 0, 1024, False, 
                         AnyPropertyType, &type, &format, &nitems, &nbytes, 
                         (unsigned char**)&buffer );
-    string selection = buffer;
+    string selection = "";
+    if( buffer != NULL )
+    {
+        selection = buffer;
+    }
     XFree( buffer );
     XUNLOCK;
-    
-    // Find the protocol, if any
-    string::size_type pos = selection.find( ":", 0 );
-    if( selection.find("///", pos + 1 ) == pos + 1 )
+    if( selection != "" )
     {
-        selection.erase( pos + 1, 2 );
-    }
+        // TODO: multiple files handling
+        string::size_type end = selection.find( "\n", 0 );
+        selection = selection.substr( 0, end -1 );     
+        end = selection.find( "\r", 0 );
+        selection = selection.substr( 0, end -1 );
+
+        // Find the protocol, if any
+        string::size_type pos = selection.find( ":", 0 );
+        if( selection.find("///", pos + 1 ) == pos + 1 )
+        {
+            selection.erase( pos + 1, 2 );
+        }
     
-    char *name = new char[selection.size()+1];
-    strncpy( name, selection.c_str(), selection.size()+1 );
-    msg_Dbg( p_intf, "drop: %s\n", name );
-    OSAPI_PostMessage( NULL, VLC_DROP, (unsigned int)name, 0 );
+        char *name = new char[selection.size()+1];
+        strncpy( name, selection.c_str(), selection.size()+1 );
+        msg_Dbg( p_intf, "drop: %s\n", name );
+        OSAPI_PostMessage( NULL, VLC_DROP, (unsigned int)name, 0 );
+    }
     
     // Tell the source we accepted the drop
     XEvent event;
@@ -201,4 +214,5 @@ void X11DropObject::DndDrop( ldata_t data )
     XSendEvent( display, src, False, 0, &event );
     XUNLOCK;
 }
+
 #endif