changeset 8481:e4736a12c898

applied Gregory's patch
author pontscho
date Mon, 16 Dec 2002 20:16:29 +0000
parents ef20a6a7a98a
children cfbca254b899
files Gui/mplayer/mw.c Gui/wm/wsxdnd.c
diffstat 2 files changed, 45 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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);
+  }
 }
--- 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);