# HG changeset patch # User pontscho # Date 1040069789 0 # Node ID e4736a12c898ea7032e0cfb666226a2177317cda # Parent ef20a6a7a98a71676bf41ddec5979b94717da7ca applied Gregory's patch diff -r ef20a6a7a98a -r e4736a12c898 Gui/mplayer/mw.c --- a/Gui/mplayer/mw.c Mon Dec 16 19:47:48 2002 +0000 +++ b/Gui/mplayer/mw.c Mon Dec 16 20:16:29 2002 +0000 @@ -688,11 +688,12 @@ struct stat buf; int f = 0; + char* subtitles = NULL; + char* filename = NULL; + if (num <= 0) return; - /* clear playlist */ - gtkSet(gtkDelPl,0,NULL); /* now fill it with new items */ for(f=0; f < num; f++){ @@ -710,16 +711,42 @@ if(stat(str,&buf) == 0 && S_ISDIR(buf.st_mode) == 0) { /* this is not a directory so try to play it */ printf("Received D&D %s\n",str); + + /* check if it is a subtitle file */ + { + char* ext = strrchr(str,'.'); + if (ext) { + static char supported[] = "utf/sub/srt/smi/rt//txt/ssa/aqt/"; + char* type; + int len; + if((len=strlen(++ext)) && (type=strstr(supported,ext)) &&\ + (type-supported)%4 == 0 && *(type+len) == '/'){ + /* handle subtitle file */ + gfree((void**)&subtitles); + subtitles = str; + continue; + } + } + } + + /* clear playlist */ + if (filename == NULL) { + filename = files[f]; + gtkSet(gtkDelPl,0,NULL); + } + item = calloc(1,sizeof(plItem)); /* FIXME: decompose file name ? */ /* yes -- Pontscho */ - if ( strrchr( str,'/' ) ) - { + if ( strrchr( str,'/' ) ) { char * s = strrchr( str,'/' ); *s=0; s++; - item->name = gstrdup( s ); - item->path = gstrdup( str ); - } else { item->name = strdup(str); item->path = strdup(""); } + item->name = gstrdup( s ); + item->path = gstrdup( str ); + } else { + item->name = strdup(str); + item->path = strdup(""); + } gtkSet(gtkAddPlItem,0,(void*)item); } else { printf("Received not a file: %s !\n",str); @@ -727,8 +754,14 @@ free( str ); } - mplSetFileName( NULL,files[0],STREAMTYPE_FILE ); - if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evStop,0 ); - mplEventHandling( evPlay,0 ); - + if (filename) { + mplSetFileName( NULL,filename,STREAMTYPE_FILE ); + if ( guiIntfStruct.Playing == 1 ) mplEventHandling( evStop,0 ); + mplEventHandling( evPlay,0 ); + } + if (subtitles) { + gfree((void**)&guiIntfStruct.Subtitlename); + guiIntfStruct.Subtitlename = subtitles; + guiLoadSubtitle(guiIntfStruct.Subtitlename); + } } diff -r ef20a6a7a98a -r e4736a12c898 Gui/wm/wsxdnd.c --- a/Gui/wm/wsxdnd.c Mon Dec 16 19:47:48 2002 +0000 +++ b/Gui/wm/wsxdnd.c Mon Dec 16 20:16:29 2002 +0000 @@ -163,7 +163,7 @@ unsigned long ret_items; /* while there is data left...*/ - while(ret_left){ + while(ret_left && atom_support == None){ XGetWindowProperty(wsDisplay,event->data.l[0],_XA_XdndTypeList, offset,256,False,XA_ATOM,&ret_type, &ret_format,&ret_items,&ret_left, @@ -183,9 +183,6 @@ break; } } - /* found it ! */ - if (atom_support != None) - break; } /* maybe next time ... */ XFree(ret_buff);