X-Git-Url: https://develop.uap-core.de/gitweb/uwplayer.git/blobdiff_plain/cb369bf7e3802b795a02017f3123869af2634626..1e4681c09375d0a2aece4ebdcd4a3d5badee5fc6:/application/Sidebar.c diff --git a/application/Sidebar.c b/application/Sidebar.c index b8c2f02..a3dd20a 100644 --- a/application/Sidebar.c +++ b/application/Sidebar.c @@ -26,6 +26,9 @@ #include #include #include +#include + +#include "xdnd.h" static void sidebar_class_init(void); @@ -40,6 +43,10 @@ static void sidebar_insert_child(Widget child); Boolean sidebar_acceptfocus(Widget widget, Time *time); static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); +static void xdndEnterAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); + +static void sidebar_xdnd_callback(Widget w, XtPointer udata, XtPointer cdata); + static XtResource resources[] = { @@ -47,10 +54,12 @@ static XtResource resources[] = { static XtActionsRec actionslist[] = { {"focusIn", FocusInAP}, + {"xdnd_enter", xdndEnterAP}, {"NULL", NULL} }; -static char defaultTranslations[] = ": focusIn()"; +static char defaultTranslations[] = ": focusIn()\n" + "XdndEnter: xdnd_enter()\n"; static XtResource constraints[] = {}; @@ -156,10 +165,15 @@ static void sidebar_resize(Widget widget) { } +static int xdnd_initialized = 0; + static void sidebar_realize(Widget widget, XtValueMask *mask, XSetWindowAttributes *attributes) { (xmManagerClassRec.core_class.realize)(widget, mask, attributes); - + if(!xdnd_initialized) { + XdndInit(XtDisplay(widget), XtWidgetToApplicationContext(widget), sidebar_xdnd_callback, widget); + } + XdndEnable(widget); } static void sidebar_expose(Widget widget, XEvent *event, Region region) { @@ -184,11 +198,76 @@ Boolean sidebar_acceptfocus(Widget widget, Time *time) { static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { - + printf("focusin\n"); + fflush(stdout); +} + +static void xdndEnterAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { + printf("xdndEnterAP\n"); + fflush(stdout); } + +static void sidebar_xdnd_callback(Widget w, XtPointer udata, XtPointer cdata) { + printf("xdnd\n"); + fflush(stdout); + + char *urilist = udata; + + size_t len = strlen(urilist); + + size_t start = 0; + if(len > 7 && !memcmp(urilist, "file://", 7)) { + start = 7; + } + + int err = 0; + + // urldecode + char *path = malloc(len + 1); + int k = 0; + for(int i=start;i