* x11_dragdrop.cpp: X11 implementation of the drag & drop
*****************************************************************************
* Copyright (C) 2003 VideoLAN
- * $Id: x11_dragdrop.cpp,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ * $Id: x11_dragdrop.cpp,v 1.2 2003/06/08 18:17:50 asmax Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
{
}
//---------------------------------------------------------------------------
+void X11DropObject::DndEnter( ldata_t data )
+{
+ fprintf(stderr,"dnd enter\n");
+}
+//---------------------------------------------------------------------------
+void X11DropObject::DndPosition( ldata_t data )
+{
+ fprintf(stderr,"dnd position\n");
+}
+//---------------------------------------------------------------------------
+void X11DropObject::DndLeave( ldata_t data )
+{
+ fprintf(stderr,"dnd leave\n");
+}
+//---------------------------------------------------------------------------
+void X11DropObject::DndDrop( ldata_t data )
+{
+ fprintf(stderr,"dnd drop\n");
+}
#if 0
void X11DropObject::HandleDropStart( GdkDragContext *context )
{
* x11_dragdrop.h: X11 implementation of the drag & drop
*****************************************************************************
* Copyright (C) 2003 VideoLAN
- * $Id: x11_dragdrop.h,v 1.1 2003/04/28 14:32:57 asmax Exp $
+ * $Id: x11_dragdrop.h,v 1.2 2003/06/08 18:17:50 asmax Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
#include <X11/Xlib.h>
//---------------------------------------------------------------------------
+
+typedef long ldata_t[5];
+
class X11DropObject
{
private:
X11DropObject( intf_thread_t *_p_intf );
virtual ~X11DropObject();
- // void HandleDropStart( GdkDragContext *context );
+ void DndEnter( ldata_t data );
+ void DndPosition( ldata_t data );
+ void DndLeave( ldata_t data );
+ void DndDrop( ldata_t data );
};
//---------------------------------------------------------------------------
#endif
* x11_run.cpp:
*****************************************************************************
* Copyright (C) 2003 VideoLAN
- * $Id: x11_run.cpp,v 1.19 2003/06/08 11:33:14 asmax Exp $
+ * $Id: x11_run.cpp,v 1.20 2003/06/08 18:17:50 asmax Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
// Create event to dispatch in windows
// Skin event
- if( event->type == ClientMessage )
+ if( event->type == ClientMessage &&
+ ((XClientMessageEvent*)event)->message_type == 0 )
{
msg = ( (XClientMessageEvent *)event )->data.l[0];
evt = (Event *)new OSEvent( p_intf,
* x11_window.cpp: X11 implementation of the Window class
*****************************************************************************
* Copyright (C) 2003 VideoLAN
- * $Id: x11_window.cpp,v 1.15 2003/06/08 12:45:13 gbazin Exp $
+ * $Id: x11_window.cpp,v 1.16 2003/06/08 18:17:50 asmax Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
//--- X11 -------------------------------------------------------------------
#include <X11/Xlib.h>
+#include <X11/Xatom.h>
#include <X11/extensions/shape.h>
//--- SKIN ------------------------------------------------------------------
{
// register the listview as a drop target
DropObject = new X11DropObject( p_intf );
- // gdk_window_register_dnd( gwnd );
+
+ Atom xdndAtom = XInternAtom( display, "XdndAware", False );
+ char xdndVersion = 4;
+ XLOCK;
+ XChangeProperty( display, wnd, xdndAtom, XA_ATOM, 32,
+ PropModeReplace, (unsigned char *)&xdndVersion, 1);
+ XUNLOCK;
}
// Create Tool Tip window
OSAPI_PostMessage( this, WINDOW_LEAVE, 0, 0 );
return true;
-/* case GDK_DROP_START:
- DropObject->HandleDropStart( ( (GdkEventDND *)p2 )->context );
- return true;
-*/
+ case ClientMessage:
+ {
+ string type = XGetAtomName( display, ( (XClientMessageEvent*)
+ p2 )->message_type );
+ if( type == "XdndEnter" )
+ {
+ DropObject->DndEnter( ((XClientMessageEvent*)p2)->data.l );
+ return true;
+ }
+ else if( type == "XdndPosition" )
+ {
+ DropObject->DndPosition( ((XClientMessageEvent*)p2)->data.l );
+ return true;
+ }
+ else if( type == "XdndLeave" )
+ {
+ DropObject->DndLeave( ((XClientMessageEvent*)p2)->data.l );
+ return true;
+ }
+ else if( type == "XdndDrop" )
+ {
+ DropObject->DndDrop( ((XClientMessageEvent*)p2)->data.l );
+ return true;
+ }
+ }
+ return false;
+
default:
return false;
}