X-Git-Url: https://develop.uap-core.de/gitweb/uwplayer.git/blobdiff_plain/3c1675731caaac73d6c362075ffb82bc45d2f060..b911d3cfc927a9cec333d08409bee25721de25ae:/application/Sidebar.c diff --git a/application/Sidebar.c b/application/Sidebar.c index 4faff71..cf67fa0 100644 --- a/application/Sidebar.c +++ b/application/Sidebar.c @@ -31,6 +31,7 @@ #include "xdnd.h" #include "utils.h" #include "playlist.h" +#include "ucx/string.h" static void sidebar_class_init(void); @@ -192,8 +193,18 @@ static void sidebar_destroy(Widget widget) { } +static int testresize = 1; static void sidebar_resize(Widget widget) { - + if(testresize) { + XtWidgetGeometry geom; + geom.request_mode = CWWidth | CWHeight; + geom.width = 200; + geom.height = 2000; + XtWidgetGeometry result; + //XtMakeGeometryRequest(widget, &geom, &result); + testresize = 0; + } + printf("resize\n"); } static int xdnd_initialized = 0; @@ -222,22 +233,45 @@ static void sidebar_realize(Widget widget, XtValueMask *mask, XSetWindowAttribut XtWindow(widget), visual, widget->core.colormap); + + Dimension w, h; + + Widget parent = XtParent(widget); + XtVaSetValues(parent, XmNbackground, WhitePixelOfScreen(XtScreen(parent)), NULL); + + XtMakeResizeRequest(widget, 200, 100, &w, &h); + + } static void sidebar_expose(Widget widget, XEvent *event, Region region) { //printf("expose\n"); Dimension w, h; - XtMakeResizeRequest(widget, 200, 200, &w, &h); + //XtMakeResizeRequest(widget, 200, 2000, &w, &h); - Sidebar s = (Sidebar)widget; - XftFont *xftFont = s->sidebar.font->fonts->font; + w = widget->core.width; + h = widget->core.height; + Widget parent = XtParent(widget); - XftDrawRect(s->sidebar.d, &s->sidebar.bg, 0, 0, s->core.width, s->core.height); + Sidebar s = (Sidebar)widget; + XftFont *xftFont = s->sidebar.font->fonts->font; + UcxList *tracks = s->sidebar.window->playlist.tracks; + size_t numTracks = ucx_list_size(tracks); int fontheight = xftFont->ascent; int height = s->sidebar.elmHeight; + + int list_height = numTracks * height; + if((list_height > s->core.height) || (w < parent->core.width)) { + XtMakeResizeRequest(widget, parent->core.width, list_height + 5, &w, &h); + } + + + XftDrawRect(s->sidebar.d, &s->sidebar.bg, 0, 0, w, h); + + //printf("current track: %d\n", s->sidebar.window->playlist.current_track); int i = 0; @@ -290,16 +324,9 @@ static void PopupAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { } - -static void sidebar_xdnd_callback(Widget w, XtPointer udata, XtPointer cdata) { - printf("xdnd\n"); - fflush(stdout); - - Sidebar s = (Sidebar)cdata; - - char *urilist = udata; - - size_t len = strlen(urilist); +static void open_uri(Sidebar s, sstr_t uri) { + char *urilist = uri.ptr; + size_t len = uri.length; size_t start = 0; if(len > 7 && !memcmp(urilist, "file://", 7)) { @@ -349,6 +376,26 @@ static void sidebar_xdnd_callback(Widget w, XtPointer udata, XtPointer cdata) { free(path); } +static void sidebar_xdnd_callback(Widget w, XtPointer udata, XtPointer cdata) { + printf("xdnd\n"); + fflush(stdout); + + Sidebar s = (Sidebar)cdata; + + scstr_t urlist = scstr(udata); + + ssize_t nuris; + sstr_t *uris = scstrsplit(urlist, scstr("\r\n"), &nuris); + + for(int i=0;i 0) { + open_uri(s, uris[i]); + } + } + + SidebarRepaint((Widget)s); +} + /* --------------------------- public --------------------------- */