[PATCH] Improvements to mb-desktop-xine-0.4

Terry Barnaby <[email protected]> Mon, 20 Jun 2005 16:52:35 +0100
Newsgroups gmane.comp.handhelds.matchbox
Message-ID <[email protected]>
Hi,

I have started using matchbox as the basis for a simple in-car multimedia
systems GUI. Thanks to every one involed in devloping Matchbox, this is
now working well for me.

I had to do some mods to mb-desktop-xine-0.4 to get it to work well
on my system and I enclose a patch with the mods I made in case they are
usefull to someone.

The mods do the following:
1. Add support for Videos greater than 2GByte in size.
2. Add support for mouse/touch-screen operation. The screen is divided
	into 9 rectangular areas (0 - 8) which when clicked/touched will
	perform a function. The functions so far defined:

	0:	Stop
	1:	VolumeUp
	2:	Stop
	3:	Left (GoBack)
	4:	Stop
	5:	Right(GoForward);
	6:	Stop
	7:	VolumeDown
	8:	Stop

3. Changed default view to VIEW_ICON rather than VIEW_LIST so more
	videos can be seen on screen.

4. Fixed aspect ratio bug.

5. Added support for *.mp4 files

Terry

_______________________________________________
Matchbox mailing list
[email protected]
https://handhelds.org/mailman/listinfo/matchbox
mb-desktop-xine-beam-1.patch (text/x-patch, 18 KB)
diff -u -r mb-desktop-xine-0.4/xinebrowser.c svn/mb-desktop-xine-0.4/xinebrowser.c
--- mb-desktop-xine-0.4/xinebrowser.c	2004-02-07 19:11:08.000000000 +0000
+++ svn/mb-desktop-xine-0.4/xinebrowser.c	2005-06-20 16:32:31.000000000 +0100
@@ -18,6 +18,11 @@
 
 /* Xine callbacks */
 
+typedef enum _XBCommand { XB_COMMAND_HOME, XB_COMMAND_INFO, XB_COMMAND_QUIT, XB_COMMAND_MUTE,
+    XB_COMMAND_VOLUME_UP, XB_COMMAND_VOLUME_DOWN, XB_COMMAND_UP, XB_COMMAND_DOWN,
+    XB_COMMAND_LEFT, XB_COMMAND_RIGHT, XB_COMMAND_SELECT, XB_COMMAND_PAUSE, XB_COMMAND_FAST } XBCommand;
+
+
 static void 
 dest_size_cb(void *user_data, int video_width, int video_height, 
 	     double video_pixel_aspect, int *dest_width, 
@@ -220,7 +225,7 @@
   res_h = (DisplayWidth(display, screen) * 1000 / DisplayWidthMM(display, 
 								 screen));
   res_v = (DisplayHeight(display, screen) * 1000 / DisplayHeightMM(display, 
-								   screen));
+								 screen));
 
   XSync(display, False);
   XUnlockDisplay(display);
@@ -231,7 +236,7 @@
   vis.dest_size_cb      = dest_size_cb;
   vis.frame_output_cb   = frame_output_cb;
   vis.user_data         = (void *)data;
-  data->pixel_aspect    = res_v / res_h;
+  data->pixel_aspect    = (double)res_v / res_h;
 
   /* Assume we get fullscreen */
   data->width           = DisplayWidth(display, screen);
@@ -403,12 +408,182 @@
 }
 
 void
+xinebrowser_command (MBDesktop *mb, BrowserData *data, XBCommand cmd)
+{
+  Bool     old_show;
+  Bool     playing_fast = False;
+  int      pos_stream;  /* 0..65535     */
+  int      pos_time;    /* milliseconds */
+  int      length_time;/* milliseconds */
+
+  switch (cmd) 
+    {
+    case XB_COMMAND_HOME:
+      if (data->current_mode == MBX_MODE_MOVIE_DVD)
+	{
+	  xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_MENU1);
+	}
+      break;
+    case XB_COMMAND_INFO:
+      if (data->showing_info)
+	{
+	  data->showing_info = False;
+	  xine_osd_hide(data->osd, 0);
+	}
+      else
+	data->showing_info = True; 
+      break;
+    case XB_COMMAND_QUIT:
+      data->running = 0;
+      break;
+    case XB_COMMAND_MUTE:
+      xinebrowser_volume_change (mb, data, MBX_VOLUME_TOGGLE_MUTE);
+      break;
+    case XB_COMMAND_VOLUME_UP:
+      xinebrowser_volume_change (mb, data, MBX_VOLUME_INC);
+      break;
+    case XB_COMMAND_VOLUME_DOWN:
+      xinebrowser_volume_change (mb, data, MBX_VOLUME_DEC);
+      break;
+    case XB_COMMAND_UP:
+      if (data->current_mode == MBX_MODE_MOVIE_DVD)
+	{
+	  xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_UP);
+	}
+      else xinebrowser_volume_change (mb, data, MBX_VOLUME_INC);
+      break;
+
+    case XB_COMMAND_DOWN:
+      if (data->current_mode == MBX_MODE_MOVIE_DVD)
+	{
+	  xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_DOWN);
+	}
+      else xinebrowser_volume_change (mb, data, MBX_VOLUME_DEC);
+      break;
+
+    case XB_COMMAND_RIGHT:
+      old_show = data->showing_info;
+      data->showing_info       = False;
+      data->last_osd_show_time = 0;
+      xine_osd_hide(data->osd, 0);
+      if (data->current_mode == MBX_MODE_MUSIC_FILE)
+	{
+	  data->current_item 
+	    = xinebrowser_get_next_item(mb, data, data->current_item);
+	  xinebrowser_play(mb, data, 
+			   mbdesktop_item_get_extended_name(mb, data->current_item));
+	  xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
+	}
+      else if (data->current_mode == MBX_MODE_MUSIC_CD)
+	{
+	  if (++data->cd_idx == data->cd_num_mrls)
+	    data->cd_idx = 0;
+
+	  /* Play next track */
+	  if((!xine_open(data->stream, data->cd_mrls[data->cd_idx])) 
+	     || (!xine_play(data->stream, 0, 0)))
+	    return; 		/* Failed to play */
+
+	  xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
+	}
+      else if (data->current_mode == MBX_MODE_MOVIE_DVD)
+	{
+	  xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_RIGHT);
+	  /* XINE_EVENT_INPUT_NEXT ? */
+	}
+      else
+	{
+	  if (xine_get_pos_length (data->stream, &pos_stream, 
+				   &pos_time, &length_time))
+	    {
+	      if (!xine_play (data->stream, pos_stream+1000, 0 ))
+		{
+		  fprintf(stderr, "mbdesktop-xine: seek failed\n");
+		}
+	    }
+	}
+      data->showing_info = old_show;
+      break;
+    case XB_COMMAND_LEFT:
+      old_show = data->showing_info;
+      data->showing_info       = False;
+      xine_osd_hide(data->osd, 0);
+      if (data->current_mode == MBX_MODE_MUSIC_FILE)
+	{
+	  data->current_item 
+	    = xinebrowser_get_prev_item(mb, data, data->current_item);
+	  xinebrowser_play(mb, data, mbdesktop_item_get_extended_name(mb, data->current_item));
+	  xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
+	}
+      else if (data->current_mode == MBX_MODE_MUSIC_CD)
+	{
+	  if (--data->cd_idx < 0)
+	    data->cd_idx = 0;
+
+	  /* Play next track */
+	  if((!xine_open(data->stream, data->cd_mrls[data->cd_idx])) 
+	     || (!xine_play(data->stream, 0, 0)))
+	    return; 		/* Failed to play */
+
+	  xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
+	}
+      else if (data->current_mode == MBX_MODE_MOVIE_DVD)
+	{
+	  xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_LEFT);
+	  /* XINE_EVENT_INPUT_PREV ? */
+	}
+      else
+	{
+	  if (xine_get_pos_length (data->stream, &pos_stream, 
+				   &pos_time, &length_time))
+	    {
+	      if (!xine_play (data->stream, 
+			      (pos_stream-1000 > 0) ? pos_stream-1000 : 0,
+			      0 ))
+		{
+		  fprintf(stderr, "mbdesktop-xine: seek failed\n");
+		}
+	    }
+	}
+      data->showing_info = old_show;
+      break;
+
+    case XB_COMMAND_PAUSE:
+      if(xine_get_param(data->stream, XINE_PARAM_SPEED) != XINE_SPEED_PAUSE)
+	xine_set_param(data->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
+      else
+	xine_set_param(data->stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
+      break;
+  case XB_COMMAND_FAST:
+    if (playing_fast)
+      {
+	playing_fast = False;
+	xine_set_param(data->stream, XINE_PARAM_SPEED, 
+		       XINE_SPEED_NORMAL );
+      } else {
+	playing_fast = True;
+	xine_set_param(data->stream, XINE_PARAM_SPEED, 
+		       XINE_SPEED_FAST_4 );
+      }
+
+    break;
+    case XB_COMMAND_SELECT:
+      if (data->current_mode == MBX_MODE_MOVIE_DVD)
+	{
+	  xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_SELECT);
+	}
+      else data->running = 0; /* Quit - func mainly for handhelds */
+      break;
+  }
+}
+
+void
 xinebrowser_win_event_loop (MBDesktop *mb, BrowserData *data)
 {
   Display *display = data->display;
   int      screen  = mbdesktop_xscreen(mb);
+  KeySym   ksym;
   Bool     old_show;
-  Bool  playing_fast = False;
 
   data->running            = 1;
   data->showing_info       = False;
@@ -421,206 +596,78 @@
     XNextEvent(display, &xevent);
 
     switch(xevent.type) {
-
+    case ButtonPress:
+      {
+      	int	pos = 0;
+        int     displayWidth = DisplayWidth(display, screen);
+        int     displayHeight = DisplayHeight(display, screen);
+        
+//	printf("BEAM Button press: (%d,%d)\n", xevent.xbutton.x, xevent.xbutton.y);
+	pos = xevent.xbutton.x / (displayWidth / 3);
+	pos = pos + 3 * (xevent.xbutton.y / (displayHeight / 3));
+//	printf("BEAM Button Pos: %d\n", pos);
+
+	switch(pos){
+	case 1:	xinebrowser_command(mb, data, XB_COMMAND_UP);		break;
+	case 7:	xinebrowser_command(mb, data, XB_COMMAND_DOWN);		break;
+	case 3:	xinebrowser_command(mb, data, XB_COMMAND_LEFT);		break;
+	case 5:	xinebrowser_command(mb, data, XB_COMMAND_RIGHT);	break;
+	
+	case 4:
+	default:
+		xinebrowser_command(mb, data, XB_COMMAND_SELECT);
+		break;
+	}
+      }
     case KeyPress:
       {
 	XKeyEvent  kevent;
-	KeySym     ksym;
 	char       kbuf[256];
 	int        len;
-	int pos_stream;  /* 0..65535     */
-	int pos_time;    /* milliseconds */
-	int length_time;/* milliseconds */
 	
 	kevent = xevent.xkey;
-	
+
 	XLockDisplay(display);
 	len = XLookupString(&kevent, kbuf, sizeof(kbuf), &ksym, NULL);
 	XUnlockDisplay(display);
 	
 	switch (ksym) 
 	  {
-	  case XK_Home:
-	    if (data->current_mode == MBX_MODE_MOVIE_DVD)
-	      {
-		xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_MENU1);
-	      }
-	    break;
-	    /* 
-	       also 
-
-        case BVW_DVD_TITLE_MENU:
-                event.type = XINE_EVENT_INPUT_MENU2;
-                break;
-        case BVW_DVD_SUBPICTURE_MENU:
-                event.type = XINE_EVENT_INPUT_MENU4;
-                break;
-        case BVW_DVD_AUDIO_MENU:
-                event.type = XINE_EVENT_INPUT_MENU5;
-                break;
-        case BVW_DVD_ANGLE_MENU:
-                event.type = XINE_EVENT_INPUT_MENU6;
-                break;
-        case BVW_DVD_CHAPTER_MENU:
-                event.type = XINE_EVENT_INPUT_MENU7;
-                break;
-
-	    */
-	  case XK_i:
-	    if (data->showing_info)
-	      {
-		data->showing_info = False;
-		xine_osd_hide(data->osd, 0);
-	      }
-	    else
-	      data->showing_info = True; 
-	    break;
-	  case XK_q:
-	  case XK_Q:
-	    data->running = 0;
-	    break;
-	  case XK_m:
-	  case XK_M:
-	    xinebrowser_volume_change (mb, data, MBX_VOLUME_TOGGLE_MUTE);
-	    break;
-	  case XK_plus:
-	    xinebrowser_volume_change (mb, data, MBX_VOLUME_INC);
-	    break;
-	  case XK_minus:
-	    xinebrowser_volume_change (mb, data, MBX_VOLUME_DEC);
-	    break;
-	  case XK_Up:
-	    if (data->current_mode == MBX_MODE_MOVIE_DVD)
-	      {
-		xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_UP);
-	      }
-	    else xinebrowser_volume_change (mb, data, MBX_VOLUME_INC);
-	    break;
-
-	  case XK_Down:
-	    if (data->current_mode == MBX_MODE_MOVIE_DVD)
-	      {
-		xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_DOWN);
-	      }
-	    else xinebrowser_volume_change (mb, data, MBX_VOLUME_DEC);
-	    break;
-
-	  case XK_Right:
-	    old_show = data->showing_info;
-	    data->showing_info       = False;
-	    data->last_osd_show_time = 0;
-	    xine_osd_hide(data->osd, 0);
-	    if (data->current_mode == MBX_MODE_MUSIC_FILE)
-	      {
-		data->current_item 
-		  = xinebrowser_get_next_item(mb, data, data->current_item);
-		xinebrowser_play(mb, data, 
-				 mbdesktop_item_get_extended_name(mb, data->current_item));
-		xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
-	      }
-	    else if (data->current_mode == MBX_MODE_MUSIC_CD)
-	      {
-		if (++data->cd_idx == data->cd_num_mrls)
-		  data->cd_idx = 0;
-		
-		/* Play next track */
-		if((!xine_open(data->stream, data->cd_mrls[data->cd_idx])) 
-		   || (!xine_play(data->stream, 0, 0)))
-		  return; 		/* Failed to play */
-		
-		xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
-	      }
-	    else if (data->current_mode == MBX_MODE_MOVIE_DVD)
-	      {
-		xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_RIGHT);
-		/* XINE_EVENT_INPUT_NEXT ? */
-	      }
-	    else
-	      {
-		if (xine_get_pos_length (data->stream, &pos_stream, 
-					 &pos_time, &length_time))
-		  {
-		    if (!xine_play (data->stream, pos_stream+1000, 0 ))
-		      {
-			fprintf(stderr, "mbdesktop-xine: seek failed\n");
-		      }
-		  }
-	      }
-	    data->showing_info = old_show;
-	    break;
-	  case XK_Left:
-	    old_show = data->showing_info;
-	    data->showing_info       = False;
-	    xine_osd_hide(data->osd, 0);
-	    if (data->current_mode == MBX_MODE_MUSIC_FILE)
-	      {
-		data->current_item 
-		  = xinebrowser_get_prev_item(mb, data, data->current_item);
-		xinebrowser_play(mb, data, mbdesktop_item_get_extended_name(mb, data->current_item));
-		xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
-	      }
-	    else if (data->current_mode == MBX_MODE_MUSIC_CD)
-	      {
-		if (--data->cd_idx < 0)
-		  data->cd_idx = 0;
-		
-		/* Play next track */
-		if((!xine_open(data->stream, data->cd_mrls[data->cd_idx])) 
-		   || (!xine_play(data->stream, 0, 0)))
-		  return; 		/* Failed to play */
-		
-		xinebrowser_show_info (mb, data, MBX_INFO_TIMEOUT);
-	      }
-	    else if (data->current_mode == MBX_MODE_MOVIE_DVD)
-	      {
-		xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_LEFT);
-		/* XINE_EVENT_INPUT_PREV ? */
-	      }
-	    else
-	      {
-		if (xine_get_pos_length (data->stream, &pos_stream, 
-					 &pos_time, &length_time))
-		  {
-		    if (!xine_play (data->stream, 
-				    (pos_stream-1000 > 0) ? pos_stream-1000 : 0,
-				    0 ))
-		      {
-			fprintf(stderr, "mbdesktop-xine: seek failed\n");
-		      }
-		  }
-	      }
-	    data->showing_info = old_show;
-	    break;
-	    
-	  case XK_space:
-	    if(xine_get_param(data->stream, XINE_PARAM_SPEED) != XINE_SPEED_PAUSE)
-	      xine_set_param(data->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
-	    else
-	      xine_set_param(data->stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
-	    break;
-	case XK_f:
-	  if (playing_fast)
-	    {
-	      playing_fast = False;
-	      xine_set_param(data->stream, XINE_PARAM_SPEED, 
-			     XINE_SPEED_NORMAL );
-	    } else {
-	      playing_fast = True;
-	      xine_set_param(data->stream, XINE_PARAM_SPEED, 
-			     XINE_SPEED_FAST_4 );
-	    }
-
-	  break;
-	  case XK_Return:
-	  case XK_KP_Enter:
-	    if (data->current_mode == MBX_MODE_MOVIE_DVD)
-	      {
-		xinebrowser_dvd_send_event (mb, data, XINE_EVENT_INPUT_SELECT);
-	      }
-	    else data->running = 0; /* Quit - func mainly for handhelds */
-	    break;
-	    
-
+	  case XK_Home: xinebrowser_command(mb, data, XB_COMMAND_HOME); break;
+	  case XK_i: xinebrowser_command(mb, data, XB_COMMAND_INFO); break;
+          case XK_Q:
+	  case XK_q: xinebrowser_command(mb, data, XB_COMMAND_QUIT); break;
+          case XK_M:
+	  case XK_m: xinebrowser_command(mb, data, XB_COMMAND_MUTE); break;
+	  case XK_plus: xinebrowser_command(mb, data, XB_COMMAND_VOLUME_UP); break;
+	  case XK_minus: xinebrowser_command(mb, data, XB_COMMAND_VOLUME_DOWN); break;
+	  case XK_Up: xinebrowser_command(mb, data, XB_COMMAND_UP); break;
+	  case XK_Down: xinebrowser_command(mb, data, XB_COMMAND_DOWN); break;
+	  case XK_Right: xinebrowser_command(mb, data, XB_COMMAND_RIGHT); break;
+	  case XK_Left: xinebrowser_command(mb, data, XB_COMMAND_LEFT); break;
+	  case XK_space: xinebrowser_command(mb, data, XB_COMMAND_PAUSE); break;
+	  case XK_f: xinebrowser_command(mb, data, XB_COMMAND_FAST); break;
+          case XK_KP_Enter:
+	  case XK_Return: xinebrowser_command(mb, data, XB_COMMAND_SELECT); break;
+          /* 
+             also 
+
+              case BVW_DVD_TITLE_MENU:
+                      event.type = XINE_EVENT_INPUT_MENU2;
+                      break;
+              case BVW_DVD_SUBPICTURE_MENU:
+                      event.type = XINE_EVENT_INPUT_MENU4;
+                      break;
+              case BVW_DVD_AUDIO_MENU:
+                      event.type = XINE_EVENT_INPUT_MENU5;
+                      break;
+              case BVW_DVD_ANGLE_MENU:
+                      event.type = XINE_EVENT_INPUT_MENU6;
+                      break;
+              case BVW_DVD_CHAPTER_MENU:
+                      event.type = XINE_EVENT_INPUT_MENU7;
+                      break;
+          */
 	}
       }
       break;
@@ -691,11 +738,8 @@
 
 	data->showing_info = old_show;
 	data->running = 1;
-	    
       }
   }
-
-
 }
 
 static void
@@ -1115,7 +1159,7 @@
       mbdesktop_item_set_user_data (mb, folder, (void *)data);
       mbdesktop_item_set_extended_name(mb, folder, data->BrowserFolderName);
 
-      mbdesktop_item_folder_set_view (mb, folder, VIEW_LIST);
+      mbdesktop_item_folder_set_view (mb, folder, VIEW_ICONS);
       mbdesktop_items_append_to_top_level (mb, folder);
   
       mbdesktop_item_set_activate_callback (mb, folder, 
@@ -1146,7 +1190,7 @@
 					       data->BrowserMusicFolderName, 
 					       "mbmusicfolder.png");
       
-      mbdesktop_item_folder_set_view (mb, folder, VIEW_LIST);
+      mbdesktop_item_folder_set_view (mb, folder, VIEW_ICONS);
       mbdesktop_item_set_user_data (mb, folder, (void *)data);
       mbdesktop_item_set_extended_name(mb, folder, 
 				       data->BrowserMusicFolderName);
@@ -1161,7 +1205,7 @@
 	  
 	  mbdesktop_item_set_extended_name(mb, subitem, 
 					   data->BrowserMusicFolderName);
-	  mbdesktop_item_folder_set_view (mb, subitem, VIEW_LIST);
+	  mbdesktop_item_folder_set_view (mb, subitem, VIEW_ICONS);
 	  mbdesktop_item_set_user_data (mb, subitem, (void *)data);
 	  
 	  mbdesktop_items_append_to_folder(mb, folder, subitem );
@@ -1230,7 +1274,7 @@
 						   data->BrowserRadioFolderName, 
 						   "mbmusicfolder.png");
 	  
-	  mbdesktop_item_folder_set_view (mb, subitem, VIEW_LIST);
+	  mbdesktop_item_folder_set_view (mb, subitem, VIEW_ICONS);
 	  mbdesktop_item_set_user_data (mb, subitem, (void *)data);
 	  mbdesktop_item_set_extended_name(mb, subitem, "Radio");
 	  
diff -u -r mb-desktop-xine-0.4/xinebrowser_callbacks.c svn/mb-desktop-xine-0.4/xinebrowser_callbacks.c
--- mb-desktop-xine-0.4/xinebrowser_callbacks.c	2004-02-07 19:11:22.000000000 +0000
+++ svn/mb-desktop-xine-0.4/xinebrowser_callbacks.c	2005-06-20 16:31:48.000000000 +0100
@@ -13,6 +13,9 @@
    GNU General Public License for more details.
 */
 
+/* BEAM add support for bigger files */
+#define _FILE_OFFSET_BITS	64
+
 #include "xinebrowser.h"
 
 static void
@@ -243,7 +246,7 @@
   if (mbdesktop_item_folder_has_contents(mb, item_folder))
       mbdesktop_item_folder_contents_free(mb, item_folder); 
 
-  if (regcomp(&re, ".*(avi|mpg|mpeg|wmv|asf|mov)$", 
+  if (regcomp(&re, ".*(avi|mpg|mpeg|wmv|asf|mov|mp4)$", 
 	      REG_EXTENDED|REG_ICASE|REG_NOSUB) != 0) 
     {
       fprintf(stderr, "mbdesktop-filebrowser: failed to compile regexp\n");
@@ -309,7 +312,7 @@
 
 	  mbdesktop_items_append_to_folder (mb, item_folder, subfolder);
 
-	  mbdesktop_item_folder_set_view (mb, subfolder, VIEW_LIST);
+	  mbdesktop_item_folder_set_view (mb, subfolder, VIEW_ICONS);
 	  mbdesktop_item_set_activate_callback (mb, subfolder, 
 						xinebrowser_movie_open_cb);
 
@@ -375,7 +378,7 @@
 		}
 
 	      mbdesktop_item_set_extended_name (mb, item_new, full_path);
-	      
+   
 	      if (mod_data->use_video_thumbnails)
 		mbdesktop_item_cache(mb, item_new, full_path);	      
 
@@ -550,7 +553,7 @@
 	  mbdesktop_item_set_extended_name (mb, subfolder, subfolderlongname);
 	  mbdesktop_item_set_user_data (mb, subfolder, (void *)mod_data);
 
-	  mbdesktop_item_folder_set_view (mb, subfolder, VIEW_LIST);
+	  mbdesktop_item_folder_set_view (mb, subfolder, VIEW_ICONS);
 	  mbdesktop_items_append_to_folder (mb, item_folder, subfolder);
 
 	  mbdesktop_item_set_activate_callback (mb, subfolder,