]> git.sesse.net Git - vlc/commitdiff
*Much work on the gnome interface: added oct's playlist from gtk plugin,
authorStéphane Borel <stef@videolan.org>
Sun, 6 May 2001 18:32:30 +0000 (18:32 +0000)
committerStéphane Borel <stef@videolan.org>
Sun, 6 May 2001 18:32:30 +0000 (18:32 +0000)
tuned appearence, added preferences window (with no features yet), jump
window to go to specified time (not functionnal yet), and fixed some
bugs.

*moved b_fullscreen from p_vout->p_sys to p_vout and unified way of
toggling fullscreen in sdl in x11/xvideo output (using p_vout->i_ch
nges) so that an interface plugin can toogle fullscreen (implemented
in gnome)

*added p_input->stream.p_selected_area->i_tell in input TS so that the
slider work with ts files ( however, the time counter doesn't since we
have no mux_rate )

*improved ac3 spdif output ( and made it work again :)). It uses a true
blank frame now, and it allows to switch languages like a traditionnal
output. It doesn't support multiplexing though, neither can we switch
between spdif/analogical mode on-the-fly.

*beginning of the back port of gnome to gtk for those who do not have
gnome.

29 files changed:
include/audio_output.h
include/config.h.in
include/video_output.h
plugins/dvd/input_dvd.c
plugins/gnome/Makefile
plugins/gnome/gnome_callbacks.c
plugins/gnome/gnome_callbacks.h
plugins/gnome/gnome_interface.c
plugins/gnome/gnome_interface.h
plugins/gnome/intf_gnome.c
plugins/gnome/intf_gnome.glade
plugins/gnome/intf_gnome.h
plugins/gtk/gtk_callbacks.c
plugins/gtk/gtk_callbacks.h
plugins/gtk/gtk_interface.c
plugins/gtk/intf_gtk.c
plugins/gtk/intf_gtk.glade
plugins/gtk/intf_gtk.h
plugins/mpeg/input_ts.c
plugins/sdl/vout_sdl.c
plugins/x11/vout_x11.c
plugins/x11/vout_xvideo.c
src/ac3_spdif/ac3_iec958.c
src/ac3_spdif/ac3_spdif.c
src/ac3_spdif/ac3_spdif.h
src/audio_output/aout_ext-dec.c
src/audio_output/aout_spdif.c
src/input/input.c
src/video_output/video_output.c

index 996114e2575a3ae1c9c81a39dd29dd3ca53a0046..00267ea9094e279a6654c0bc4f7b439630d387ed 100644 (file)
@@ -2,7 +2,7 @@
  * audio_output.h : audio output thread interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: audio_output.h,v 1.34 2001/05/06 04:32:02 sam Exp $
+ * $Id: audio_output.h,v 1.35 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *
@@ -188,13 +188,15 @@ typedef struct aout_thread_s
 #define AOUT_FMT_U16_BE      0x00000100                    /* Big endian U16 */
 #define AOUT_FMT_AC3         0x00000400                 /* Dolby Digital AC3 */
 
-
 #ifdef WORDS_BIGENDIAN
 #define AOUT_FMT_S16_NE      AOUT_FMT_S16_BE
 #else
 #define AOUT_FMT_S16_NE      AOUT_FMT_S16_LE
 #endif
 
+/* Size of a frame for spdif output */
+#define SPDIF_FRAME_SIZE 6144
+
 /*****************************************************************************
  * Prototypes
  *****************************************************************************/
index f8ec6082a822468ff24863729295c461bced1567..2911dde361575f746a54e00729fc78626e07011a 100644 (file)
 
 /* Environment variable containing the display method */
 #define INTF_METHOD_VAR                 "vlc_intf"
+#define INTF_METHOD_DEFAULT             "gtk"
 
 /* Environment variable used to store startup script name and default value */
 #define INTF_INIT_SCRIPT_VAR            "vlcrc"
 /* Maximum number of channels */
 #define INTF_MAX_CHANNELS               10
 
+/* Default search path for interface file browser */
+#define INTF_PATH_VAR                   "vlc_search_path"
+
 /*****************************************************************************
  * Input thread configuration
  *****************************************************************************/
 
-/* Environment variable containing the display method */
+/* Environment variable containing the input method */
 #define INPUT_METHOD_VAR                "vlc_input"
+#define INPUT_METHOD_DEFAULT            "ps"
 
 /* XXX?? */
 #define INPUT_IDLE_SLEEP                ((int)(0.100*CLOCK_FREQ))
 /* Maximum length of a hostname or source name */
 #define INPUT_MAX_SOURCE_LENGTH         100
 
+/* Default network protocol */
+#define INPUT_NETWORK_PROTOCOL_VAR      "vlc_network_protocol"
+#define INPUT_NETWORK_PROTOCOL_DEFAULT  "ts"
+
 /* Default remote server */
 #define INPUT_SERVER_VAR                "vlc_server"
 #define INPUT_SERVER_DEFAULT            "138.195.143.220"
-#define INPUT_BCAST_ADDR                "138.195.143.255"
 
 /* Default input port */
 #define INPUT_PORT_VAR                  "vlc_server_port"
 #define INPUT_PORT_DEFAULT              1234
 
+/* Default broadcast address */
+#define INPUT_BCAST_ADRR_VAR            "vlc_broadcast_addr"
+#define INPUT_BCAST_ADDR_DEFAULT        "138.195.143.255"
+
 /* Broadcast mode */
 #define INPUT_BROADCAST_VAR             "vlc_broadcast"
 #define INPUT_BROADCAST_DEFAULT         0
  * mark it to be presented */
 #define DEFAULT_PTS_DELAY               (mtime_t)(.2*CLOCK_FREQ)
 
+/* DVD defaults */
 #define INPUT_DVD_DEVICE_VAR            "vlc_dvd_device"
 #define INPUT_DVD_DEVICE_DEFAULT        "/dev/dvd"
 
 #define INPUT_CHANNEL_VAR               "vlc_input_channel"
 #define INPUT_SUBTITLE_VAR              "vlc_input_subtitle"
 
+/* VCD defaults */
+#define INPUT_VVC_DEVICE_VAR            "vlc_vcd_device"
+#define INPUT_VCD_DEVICE_DEFAULT        "/dev/cdrom"
+
 /*****************************************************************************
  * Audio configuration
  *****************************************************************************/
 
 /* Environment variable containing the audio output method */
 #define AOUT_METHOD_VAR                 "vlc_aout"
+#define AOUT_METHOD_DEFAULT             "dsp"
 
 /* Environment variable used to store dsp device name, and default value */
 #define AOUT_DSP_VAR                    "vlc_dsp"
 
 /* Environment variable containing the display method */
 #define VOUT_METHOD_VAR                 "vlc_vout"
+#define VOUT_METHOD_DEFAULT             "x11"
 
 /* Environment variable containing the motion compensation method */
 #define MOTION_METHOD_VAR               "vlc_motion"
 #define VOUT_WIDTH_DEFAULT              720
 #define VOUT_HEIGHT_DEFAULT             576
 
+#define VOUT_DEPTH_VAR                  "vlc_depth"
+#define VOUT_DEPTH_DEFAULT              15
+
+#define VOUT_FULLSCREEN_VAR             "vlc_fullscreen"
+#define VOUT_FULLSCREEN_DEFAULT         0
+
+#define VOUT_FULLSCREEN_DEPTH_VAR       "vlc_fullscreen_depth"
+#define VOUT_FULLSCREEN_DEPTH_DEFAULT   32
+
 /* Maximum width of a scaled source picture - this should be relatively high,
  * since higher stream values will result in no display at all. */
 #define VOUT_MAX_WIDTH                  4096
 #define VOUT_OVERLAY_DEFAULT            0
 
 /* Default gamma */
-#define VOUT_GAMMA                      0.
+#define VOUT_GAMMA_VAR                  "vlc_gamma"
+#define VOUT_GAMMA_DEFAULT              0.
 
 /* Default fonts */
 #define VOUT_DEFAULT_FONT               "default8x9.psf"
 #define INTF_MSG_QSIZE                  64
 
 /* Interface warnig message level */
-#define INTF_WARNING_VAR                "warning_level"
+#define INTF_WARNING_VAR                "vlc_warning_level"
 #define INTF_WARNING_DEFAULT            12
 
 /* Define to enable messages queues - disabling messages queue can be useful
 /* Maximal number of commands which can be saved in history list */
 #define INTF_CONSOLE_MAX_HISTORY        20
 
+/****************************************************************************
+ * Playlist defaults
+ ****************************************************************************/
+
+/* Launch on start-up */
+#define PLAYLIST_STARTUP_VAR            "vlc_playlist_on_start_up"
+#define PLAYLIST_STARTUP_DEFAULT        0
+
+/* Enqueue drag'n dropped item */
+#define PLAYLIST_ENQUEUE_VAR            "vlc_playlist_enqueue"
+#define PLAYLIST_ENQUEUE_DZFAULT        0
+
+/* Loop on playlist end */
+#define PLAYLIST_LOOP_VAR               "vlc_playlist_loop"
+#define PLAYLIST_LOOP_DEFAULT           0
+
index f6fed8705a6625b639c1a2f7c9b21b9795cb86aa..0a36f65071219e452604a23638a47f33380392a2 100644 (file)
@@ -5,7 +5,7 @@
  * thread, and destroy a previously oppenned video output thread.
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_output.h,v 1.59 2001/05/06 04:32:02 sam Exp $
+ * $Id: video_output.h,v 1.60 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -210,6 +210,7 @@ typedef struct vout_thread_s
     boolean_t           b_info;              /* print additional information */
     boolean_t           b_interface;                     /* render interface */
     boolean_t           b_scale;                    /* allow picture scaling */
+    boolean_t           b_fullscreen;           /* toogle fullscreen dusplay */
     mtime_t             render_time;             /* last picture render time */
 
 
index aeed661cc0f69e34ddb631f5398de3fe3c5b0fcd..136e665e9f6de72b25aefa0d7134265ad57e9fe0 100644 (file)
@@ -10,7 +10,7 @@
  *  -dvd_udf to find files
  *****************************************************************************
  * Copyright (C) 1998-2001 VideoLAN
- * $Id: input_dvd.c,v 1.54 2001/04/29 17:57:50 stef Exp $
+ * $Id: input_dvd.c,v 1.55 2001/05/06 18:32:30 stef Exp $
  *
  * Author: Stéphane Borel <stef@via.ecp.fr>
  *
@@ -380,8 +380,8 @@ static void DVDInit( input_thread_t * p_input )
     /* reading several block once seems to cause lock-up
      * when using input_ToggleES
      * who wrote thez damn buggy piece of shit ??? --stef */
-    p_dvd->i_block_once = 32;
-    p_input->i_read_once = 128;
+    p_dvd->i_block_once = 1;//32;
+    p_input->i_read_once = 8;//128;
 
     i = CSSTest( p_input->i_handle );
 
@@ -398,7 +398,7 @@ static void DVDInit( input_thread_t * p_input )
 
     /* Reading structures initialisation */
     p_input->p_method_data =
-        DVDNetlistInit( 8192, 16384, 2048, DVD_LB_SIZE, p_dvd->i_block_once );
+        DVDNetlistInit( 2048, 4096, 2048, DVD_LB_SIZE, p_dvd->i_block_once );
     intf_WarnMsg( 2, "dvd info: netlist initialized" );
 
     /* Ifo allocation & initialisation */
@@ -1350,12 +1350,17 @@ static int DVDFindSector( thread_dvd_data_t * p_dvd )
     }
 
     /* Find start and end sectors of new cell */
+#if 1
     p_dvd->i_sector = MAX(
          p_dvd->p_ifo->vts.cell_inf.p_cell_map[p_dvd->i_cell].i_start_sector,
          title.p_cell_play[p_dvd->i_prg_cell].i_start_sector );
     p_dvd->i_end_sector = MIN(
          p_dvd->p_ifo->vts.cell_inf.p_cell_map[p_dvd->i_cell].i_end_sector,
          title.p_cell_play[p_dvd->i_prg_cell].i_end_sector );
+#else
+    p_dvd->i_sector = title.p_cell_play[p_dvd->i_prg_cell].i_start_sector;
+    p_dvd->i_end_sector = title.p_cell_play[p_dvd->i_prg_cell].i_end_sector;
+#endif
 
 /*
     intf_WarnMsg( 1, "cell: %d sector1: 0x%x end1: 0x%x\n"
index 5665090ee8f665b82d5e808dd9800a52d7e6437a..fb248d1ffcf51cbb7c5187b4a922795ea3ba342f 100644 (file)
@@ -7,7 +7,7 @@
 # Objects
 #
 
-PLUGIN_GNOME = gnome.o intf_gnome.o gnome_callbacks.o gnome_interface.o gnome_support.o
+PLUGIN_GNOME = gnome.o intf_gnome.o gnome_callbacks.o gnome_interface.o gnome_support.o gnome_playlist.o
 BUILTIN_GNOME = $(PLUGIN_GNOME:%.o=BUILTIN_%.o)
 
 ALL_OBJ = $(PLUGIN_GNOME) $(BUILTIN_GNOME)
index e3f6a635bb0e6c485262136cf38ff75ef67e551a..5347b2feff0d6d4859adaa563b32b4b7b967624b 100644 (file)
@@ -2,7 +2,7 @@
  * gnome_callbacks.c : Callbacks for the Gnome plugin.
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: gnome_callbacks.c,v 1.25 2001/05/01 04:18:18 sam Exp $
+ * $Id: gnome_callbacks.c,v 1.26 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
 #include "intf_playlist.h"
 #include "intf_msg.h"
 
+#include "video.h"
+#include "video_output.h"
+#include "audio_output.h"
+
 #include "gnome_callbacks.h"
+#include "gnome_playlist.h"
 #include "gnome_interface.h"
 #include "gnome_support.h"
 #include "intf_gnome.h"
 
 #include "main.h"
 
-/*****************************************************************************
- * Inline function to retrieve the interface structure
- *****************************************************************************/
-static __inline__ intf_thread_t * GetIntf( GtkWidget *item, char * psz_parent )
-{
-    return( gtk_object_get_data( GTK_OBJECT( lookup_widget(item, psz_parent) ),
-                                 "p_intf" ) );
-}
-
-
 /*****************************************************************************
  * Interface callbacks
  *****************************************************************************
@@ -118,6 +113,7 @@ on_intf_window_drag_data_received      (GtkWidget       *widget,
                                         guint            time,
                                         gpointer         user_data)
 {
+#if 0
     char *psz_text = data->data;
     int i_len      = strlen( psz_text );
 
@@ -157,6 +153,21 @@ on_intf_window_drag_data_received      (GtkWidget       *widget,
         intf_ErrMsg( "intf error: unknown dropped type");
         break;
     }
+#else
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET( widget ), "intf_window" );
+    int             i_end  = p_main->p_playlist->i_size;
+
+    GnomeDropDataReceived( p_intf, data, info, PLAYLIST_END );
+
+     if( p_intf->p_input != NULL )
+     {
+        /* FIXME: temporary hack */
+        p_intf->p_input->b_eof = 1;
+     }
+     
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+
+#endif
 }
 
 
@@ -263,7 +274,7 @@ on_menubar_open_activate               (GtkMenuItem     *menuitem,
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
 
     /* If we have never used the file selector, open it */
-    if( p_intf->p_sys->p_fileopen == NULL)
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_fileopen ) )
     {
         p_intf->p_sys->p_fileopen = create_intf_fileopen();
         gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
@@ -281,6 +292,14 @@ on_menubar_disc_activate               (GtkMenuItem     *menuitem,
 {
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
 
+    /* If we have never used the file selector, open it */
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+
     gtk_widget_show( p_intf->p_sys->p_disc );
     gdk_window_raise( p_intf->p_sys->p_disc->window );
 }
@@ -292,6 +311,14 @@ on_menubar_network_activate            (GtkMenuItem     *menuitem,
 {
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
 
+    /* If we have never used the file selector, open it */
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_network ) )
+    {
+        p_intf->p_sys->p_network = create_intf_network();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_network ),
+                             "p_intf", p_intf );
+    }
+
     gtk_widget_show( p_intf->p_sys->p_network );
     gdk_window_raise( p_intf->p_sys->p_network->window );
 }
@@ -313,7 +340,9 @@ void
 on_menubar_playlist_activate           (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+    playlist_t *    p_playlist ;
+    GtkCList *      p_list;
 
     if( !GTK_IS_WIDGET( p_intf->p_sys->p_playlist ) )
     {
@@ -321,6 +350,17 @@ on_menubar_playlist_activate           (GtkMenuItem     *menuitem,
         gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_playlist ),
                              "p_intf", p_intf );
     }
+
+    vlc_mutex_lock( &p_main->p_playlist->change_lock );
+    if( p_main->p_playlist->i_size > 0 )
+    {
+        p_playlist = p_main->p_playlist;
+        p_list = GTK_CLIST( lookup_widget( p_intf->p_sys->p_playlist,
+                                           "playlist_clist" ) );
+        GnomeRebuildCList( p_list, p_playlist );
+    }
+    vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+
     gtk_widget_show( p_intf->p_sys->p_playlist );
     gdk_window_raise( p_intf->p_sys->p_playlist->window );
 }
@@ -366,6 +406,22 @@ on_menubar_subtitle_toggle             (GtkCheckMenuItem     *menuitem,
 }
 
 
+void
+on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    if( p_vout_bank->i_count )
+    {
+        vlc_mutex_lock( &p_vout_bank->pp_vout[0]->change_lock );
+        if( p_vout_bank->pp_vout[0]->b_fullscreen ==
+                !GTK_CHECK_MENU_ITEM( menuitem )->active )
+            p_vout_bank->pp_vout[0]->i_changes |= VOUT_FULLSCREEN_CHANGE;
+        vlc_mutex_unlock( &p_vout_bank->pp_vout[0]->change_lock );
+    }
+}
+
+
+
 void
 on_menubar_title_toggle                (GtkCheckMenuItem     *menuitem,
                                         gpointer              user_data)
@@ -374,8 +430,9 @@ on_menubar_title_toggle                (GtkCheckMenuItem     *menuitem,
 
     if( menuitem->active && !p_intf->p_sys->b_title_update )
     {
+        gint i_title = (gint)user_data;
         p_intf->p_input->pf_set_area( p_intf->p_input,
-                                     (input_area_t*)user_data );
+            p_intf->p_input->stream.pp_areas[i_title] );
 
         input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
 
@@ -391,7 +448,7 @@ on_menubar_chapter_toggle              (GtkCheckMenuItem     *menuitem,
     intf_thread_t * p_intf    = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
     input_area_t *  p_area    = p_intf->p_input->stream.p_selected_area;
     gint            i_chapter = (gint)user_data;
-    char            psz_chapter[3];
+    char            psz_chapter[5];
 
     if( menuitem->active && !p_intf->p_sys->b_chapter_update )
     {
@@ -448,7 +505,18 @@ void
 on_menubar_preferences_activate        (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
 
+    /* If we have never used the file selector, open it */
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_preferences ) )
+    {
+        p_intf->p_sys->p_preferences = create_intf_preferences();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_preferences ),
+                             "p_intf", p_intf );
+    }
+
+    gtk_widget_show( p_intf->p_sys->p_preferences );
+    gdk_window_raise( p_intf->p_sys->p_preferences->window );
 }
 
 
@@ -482,7 +550,7 @@ on_toolbar_open_clicked                (GtkButton       *button,
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
 
     /* If we have never used the file selector, open it */
-    if( p_intf->p_sys->p_fileopen == NULL)
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_fileopen ) )
     {
         p_intf->p_sys->p_fileopen = create_intf_fileopen();
         gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
@@ -500,6 +568,14 @@ on_toolbar_disc_clicked                (GtkButton       *button,
 {
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
 
+    /* If we have never used the file selector, open it */
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    {
+        p_intf->p_sys->p_disc = create_intf_disc();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+                             "p_intf", p_intf );
+    }
+
     gtk_widget_show( p_intf->p_sys->p_disc );
     gdk_window_raise( p_intf->p_sys->p_disc->window );
 }
@@ -511,6 +587,14 @@ on_toolbar_network_clicked             (GtkButton       *button,
 {
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
 
+    /* If we have never used the file selector, open it */
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_network ) )
+    {
+        p_intf->p_sys->p_network = create_intf_network();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_network ),
+                             "p_intf", p_intf );
+    }
+
     gtk_widget_show( p_intf->p_sys->p_network );
     gdk_window_raise( p_intf->p_sys->p_network->window );
 }
@@ -528,7 +612,14 @@ void
 on_toolbar_stop_clicked                (GtkButton       *button,
                                         gpointer         user_data)
 {
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
 
+    if( p_intf->p_input != NULL )
+    {
+        p_vout_bank->pp_vout[0]->b_die = 1;
+        p_aout_bank->pp_aout[0]->b_die = 1;
+        p_intf->p_input->b_die = 1;
+    }
 }
 
 
@@ -596,8 +687,21 @@ on_toolbar_playlist_clicked            (GtkButton       *button,
         gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_playlist ),
                              "p_intf", p_intf );
     }
-    gtk_widget_show( p_intf->p_sys->p_playlist );
-    gdk_window_raise( p_intf->p_sys->p_playlist->window );
+
+    if( GTK_WIDGET_VISIBLE( p_intf->p_sys->p_playlist ) )
+    {
+        gtk_widget_hide( p_intf->p_sys->p_playlist );
+    } 
+    else 
+    {        
+        GtkCList * p_clist;
+
+        p_clist = GTK_CLIST( gtk_object_get_data(
+            GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+        GnomeRebuildCList( p_clist , p_main->p_playlist );
+        gtk_widget_show( p_intf->p_sys->p_playlist );
+        gdk_window_raise( p_intf->p_sys->p_playlist->window );
+    }
 }
 
 
@@ -654,6 +758,14 @@ on_popup_play_activate                 (GtkMenuItem     *menuitem,
 }
 
 
+void
+on_popup_back_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+
+}
+
+
 void
 on_popup_pause_activate                (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
@@ -693,6 +805,21 @@ on_popup_fast_activate                 (GtkMenuItem     *menuitem,
 }
 
 
+void
+on_popup_fullscreen_activate           (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    if( p_vout_bank->i_count )
+    {
+        vlc_mutex_lock( &p_vout_bank->pp_vout[0]->change_lock );
+        if( p_vout_bank->pp_vout[0]->b_fullscreen ==
+                !GTK_CHECK_MENU_ITEM( menuitem )->active )
+            p_vout_bank->pp_vout[0]->i_changes |= VOUT_FULLSCREEN_CHANGE;
+        vlc_mutex_unlock( &p_vout_bank->pp_vout[0]->change_lock );
+    }
+}
+
+
 void
 on_popup_audio_toggle                  (GtkCheckMenuItem     *menuitem,
                                         gpointer              user_data)
@@ -789,7 +916,7 @@ on_popup_open_activate                 (GtkMenuItem     *menuitem,
     intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
 
     /* If we have never used the file selector, open it */
-    if( p_intf->p_sys->p_fileopen == NULL)
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_fileopen ) )
     {
         p_intf->p_sys->p_fileopen = create_intf_fileopen();
         gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
@@ -852,86 +979,120 @@ on_popup_exit_activate                 (GtkMenuItem     *menuitem,
 }
 
 
-/*****************************************************************************
- * Fileopen callbacks
- *****************************************************************************
- * The following callbacks are related to the file requester.
- *****************************************************************************/
 void
-on_intf_fileopen_destroy               (GtkObject       *object,
+on_popup_stop_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(object), "intf_fileopen" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
 
-    p_intf->p_sys->p_fileopen = NULL;
+    if( p_intf->p_input != NULL )
+    {
+        p_intf->p_input->b_die = 1;
+    }
 }
 
 
 void
-on_fileopen_ok_clicked                 (GtkButton       *button,
+on_popup_playlist_activate             (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_fileopen" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
 
-    GtkWidget *filesel;
-    gchar *filename;
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_playlist ) )
+    {
+        p_intf->p_sys->p_playlist = create_intf_playlist();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_playlist ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_playlist );
+    gdk_window_raise( p_intf->p_sys->p_playlist->window );
+}
 
-    filesel = gtk_widget_get_toplevel (GTK_WIDGET (button));
-    gtk_widget_hide (filesel);
-    filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
 
-    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, (char*)filename );
+void
+on_popup_jump_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
 
-    /* Select added item and switch to file interface */
-    if( p_intf->p_input != NULL )
-        p_intf->p_input->b_eof = 1;
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_jump ) )
+    {
+        p_intf->p_sys->p_jump = create_intf_jump();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_jump ),
+                             "p_intf", p_intf );
+    }
 
-//    p_intf->p_sys->b_mode_changed = 1;
+    gtk_widget_show( p_intf->p_sys->p_jump );
+    gdk_window_raise( p_intf->p_sys->p_jump->window );
 }
 
 
 void
-on_fileopen_cancel_clicked             (GtkButton       *button,
+on_popup_preferences_activate          (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+    gtk_widget_show( p_intf->p_sys->p_preferences );
+    gdk_window_raise( p_intf->p_sys->p_preferences->window );
+
 }
 
 
 /*****************************************************************************
- * Playlist callbacks
+ * Fileopen callbacks
  *****************************************************************************
- * The following callbacks are related to the playlist.
+ * The following callbacks are related to the file requester.
  *****************************************************************************/
 void
-on_intf_playlist_destroy               (GtkObject       *object,
+on_intf_fileopen_destroy               (GtkObject       *object,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(object), "intf_playlist" );
-
-    p_intf->p_sys->p_playlist = NULL;
+    gtk_widget_hide( GTK_WIDGET( object ) );
 }
 
 
 void
-on_playlist_ok_clicked                 (GtkButton       *button,
+on_fileopen_ok_clicked                 (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_playlist" );
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_fileopen" );
+    GtkCList *      p_playlist_clist;
+    GtkWidget *     p_filesel;
+    gchar *         psz_filename;
+    int             i_end = p_main->p_playlist->i_size;
+
+    p_filesel = gtk_widget_get_toplevel( GTK_WIDGET(button) );
+    gtk_widget_hide( p_filesel );
+    psz_filename =
+        gtk_file_selection_get_filename( GTK_FILE_SELECTION( p_filesel ) );
+
+    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, (char*)psz_filename );
+
+    /* catch the GTK CList */
+    p_playlist_clist = GTK_CLIST( gtk_object_get_data(
+        GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+    /* update the display */
+    GnomeRebuildCList( p_playlist_clist, p_main->p_playlist );
+
+    /* Select added item and switch to file interface */
+    if( p_intf->p_input != NULL )
+    {
+        p_intf->p_input->b_eof = 1;
+    }
 
-    gtk_widget_hide( p_intf->p_sys->p_playlist );
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
 }
 
 
 void
-on_playlist_close_clicked              (GtkButton       *button,
+on_fileopen_cancel_clicked             (GtkButton       *button,
                                         gpointer         user_data)
 {
     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
 }
 
 
-
 /*****************************************************************************
  * Module manager callbacks
  *****************************************************************************
@@ -1004,9 +1165,12 @@ void
 on_disc_ok_clicked                     (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
-    char *psz_device, *psz_source, *psz_method;
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
+    GtkCList *      p_playlist_clist;
+    char *          psz_device, *psz_source, *psz_method;
+    int             i_end = p_main->p_playlist->i_size;
 
+    gtk_widget_hide( p_intf->p_sys->p_disc );
     psz_device = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
                                          GTK_WIDGET(button), "disc_name" ) ) );
 
@@ -1051,13 +1215,19 @@ on_disc_ok_clicked                     (GtkButton       *button,
     intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
     free( psz_source );
 
+    /* catch the GTK CList */
+    p_playlist_clist = GTK_CLIST( gtk_object_get_data(
+        GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+    /* update the display */
+    GnomeRebuildCList( p_playlist_clist, p_main->p_playlist );
+
     /* Select added item and switch to DVD interface */
-    intf_PlaylistJumpto( p_main->p_playlist, p_main->p_playlist->i_size-2 );
     if( p_intf->p_input != NULL )
+    {
         p_intf->p_input->b_eof = 1;
-//    p_intf->p_sys->b_mode_changed = 1;
+    }
 
-    gtk_widget_hide( p_intf->p_sys->p_disc );
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
 }
 
 
@@ -1078,10 +1248,14 @@ void
 on_network_ok_clicked                  (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_network" );
-    char *psz_source, *psz_server, *psz_protocol;
-    unsigned int i_port;
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_network" );
+    GtkCList *      p_playlist_clist;
+    char *          psz_source, *psz_server, *psz_protocol;
+    unsigned int    i_port;
+    boolean_t       b_broadcast;
+    int             i_end = p_main->p_playlist->i_size;
 
+    gtk_widget_hide( p_intf->p_sys->p_network );
     psz_server = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
                                  GTK_WIDGET(button), "network_server" ) ) );
 
@@ -1110,27 +1284,62 @@ on_network_ok_clicked                  (GtkButton       *button,
         intf_ErrMsg( "intf error: invalid port %i", i_port );
     }
 
-    /* Allocate room for "protocol://server:port" */
-    psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
-                           + strlen( psz_server ) + 1 /* ":" */
-                           + 5 /* 0-65535 */ + 1 /* "\0" */ );
-    if( psz_source == NULL )
+    /* do we have a broadcast address */
+    b_broadcast = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
+        lookup_widget( GTK_WIDGET(button), "broadcast_check" ) ) );
+    if( b_broadcast )
     {
-        return;
+        char *  psz_broadcast;
+        psz_broadcast = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
+                                 GTK_WIDGET(button), "network_broadcast" ) ) );
+        /* Allocate room for "protocol://server:port" */
+        psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
+                               + strlen( psz_server ) + 1 /* ":" */
+                               + 5 /* 0-65535 */
+                               + strlen( psz_broadcast ) + 2 /* "::" */ 
+                               + 1 /* "\0" */ );
+        if( psz_source == NULL )
+        {
+            return;
+        }
+
+        /* Build source name and add it to playlist */
+        sprintf( psz_source, "%s://%s:%i::%s", psz_protocol,
+                                               psz_server,
+                                               i_port,
+                                               psz_broadcast );
     }
-   
-    /* Build source name and add it to playlist */
-    sprintf( psz_source, "%s://%s:%i", psz_protocol, psz_server, i_port );
+    else
+    {
+        /* Allocate room for "protocol://server:port" */
+        psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
+                               + strlen( psz_server ) + 1 /* ":" */
+                               + 5 /* 0-65535 */ + 1 /* "\0" */ );
+        if( psz_source == NULL )
+        {
+            return;
+        }
+       
+        /* Build source name and add it to playlist */
+        sprintf( psz_source, "%s://%s:%i", psz_protocol, psz_server, i_port );
+    }
+
     intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
     free( psz_source );
 
+    /* catch the GTK CList */
+    p_playlist_clist = GTK_CLIST( gtk_object_get_data(
+        GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+    /* update the display */
+    GnomeRebuildCList( p_playlist_clist, p_main->p_playlist );
+
     /* Select added item and switch to network interface */
-    intf_PlaylistJumpto( p_main->p_playlist, p_main->p_playlist->i_size-2 );
     if( p_intf->p_input != NULL )
+    {
         p_intf->p_input->b_eof = 1;
-//    p_intf->p_sys->b_mode_changed = 1;
+    }
 
-    gtk_widget_hide( p_intf->p_sys->p_network );
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
 }
 
 
@@ -1141,3 +1350,76 @@ on_network_cancel_clicked              (GtkButton       *button,
     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
 }
 
+
+void
+on_broadcast_check_toggled             (GtkToggleButton *togglebutton,
+                                        gpointer         user_data)
+{
+    GtkWidget *     p_network;
+
+    p_network = gtk_widget_get_toplevel( GTK_WIDGET (togglebutton) );
+    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
+            "network_broadcast_combo" ),
+            gtk_toggle_button_get_active( togglebutton ) );
+    gtk_widget_set_sensitive( gtk_object_get_data( GTK_OBJECT( p_network ),
+            "network_broadcast" ),
+            gtk_toggle_button_get_active( togglebutton ) );
+}
+
+
+/****************************************************************************
+ * Jump window
+ ****************************************************************************
+ * Those callback are received from the jump window that allow to select
+ * an arbitrary position of the stream.
+ ****************************************************************************/
+void
+on_jump_ok_clicked                     (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+
+void
+on_jump_apply_clicked                  (GtkButton       *button,
+                                        gpointer         user_data)
+{
+
+}
+
+
+void
+on_jump_cancel_clicked                 (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+
+/****************************************************************************
+ * Preferences window callbacks
+ ****************************************************************************/
+void
+on_preferences_ok_clicked              (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+
+void
+on_preferences_apply_clicked           (GtkButton       *button,
+                                        gpointer         user_data)
+{
+
+}
+
+
+void
+on_preferences_cancel_clicked          (GtkButton       *button,
+                                        gpointer         user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
index 910a438659ec4fdc5e75c3784fa07d5c9d11ed87..4b88c2414d88614841d30910a375958ae5717bb3 100644 (file)
@@ -2,7 +2,7 @@
  * gnome_callbacks.h : Callbacks for the Gnome plugin.
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: gnome_callbacks.h,v 1.15 2001/04/22 00:08:26 stef Exp $
+ * $Id: gnome_callbacks.h,v 1.16 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *      
@@ -122,14 +122,6 @@ void
 on_popup_about_activate                (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-void
-on_intf_playlist_destroy               (GtkObject       *object,
-                                        gpointer         user_data);
-
-void
-on_playlist_close_clicked              (GtkButton       *button,
-                                        gpointer         user_data);
-
 void
 on_popup_slow_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
@@ -162,14 +154,6 @@ void
 on_modules_cancel_clicked              (GtkButton       *button,
                                         gpointer         user_data);
 
-void
-on_intf_playlist_destroy               (GtkObject       *object,
-                                        gpointer         user_data);
-
-void
-on_playlist_ok_clicked                 (GtkButton       *button,
-                                        gpointer         user_data);
-
 void
 on_menubar_modules_activate            (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
@@ -297,3 +281,148 @@ on_menubar_angle_toggle                (GtkCheckMenuItem     *menuitem,
 void
 on_popup_angle_toggle                  (GtkCheckMenuItem     *menuitem,
                                         gpointer             user_data);
+
+void
+on_popup_stop_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_popup_jump_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_popup_preferences_activate          (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_broadcast_check_toggled             (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+on_jump_ok_clicked                     (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_jump_apply_clicked                  (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_jump_cancel_clicked                 (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_popup_playlist_activate             (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_preferences_ok_clicked              (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_preferences_apply_clicked           (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_preferences_cancel_clicked          (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_popup_fullscreen_activate           (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_close_clicked              (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_intf_playlist_destroy               (GtkObject       *object,
+                                        gpointer         user_data);
+
+void
+on_intf_playlist_destroy               (GtkObject       *object,
+                                        gpointer         user_data);
+
+void
+on_playlist_ok_clicked                 (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_playlist_disc_activate              (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_file_activate              (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_network_activate           (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_url_activate               (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_crop_activate              (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_invert_activate            (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_select_activate            (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+gboolean
+on_playlist_clist_event                (GtkWidget       *widget,
+                                        GdkEvent        *event,
+                                        gpointer         user_data);
+
+void
+on_playlist_clist_drag_data_received   (GtkWidget       *widget,
+                                        GdkDragContext  *drag_context,
+                                        gint             x,
+                                        gint             y,
+                                        GtkSelectionData *data,
+                                        guint            info,
+                                        guint            time,
+                                        gpointer         user_data);
+
+gboolean
+on_playlist_clist_drag_motion          (GtkWidget       *widget,
+                                        GdkDragContext  *drag_context,
+                                        gint             x,
+                                        gint             y,
+                                        guint            time,
+                                        gpointer         user_data);
+
+
+
+void
+on_playlist_delete_all_activate        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_delete_item_activate       (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_playlist_ok_clicked                 (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_playlist_apply_clicked              (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_playlist_cancel_clicked             (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_popup_back_activate                 (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
index dfa6464f60284991b407728afdaf284ac193da45..035632190d835a24d57d2d14ee0b21c2c15f3670 100644 (file)
@@ -47,6 +47,14 @@ static GnomeUIInfo menubar_file_menu_uiinfo[] =
 
 static GnomeUIInfo menubar_view_menu_uiinfo[] =
 {
+  {
+    GNOME_APP_UI_TOGGLEITEM, N_("_Fullscreen"),
+    NULL,
+    (gpointer) on_menubar_fullscreen_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_SEPARATOR,
   {
     GNOME_APP_UI_ITEM, N_("_Title"),
     N_("Choose title"),
@@ -141,26 +149,27 @@ create_intf_window (void)
   GtkWidget *toolbar_playlist;
   GtkWidget *toolbar_prev;
   GtkWidget *toolbar_next;
-  GtkWidget *vbox2;
-  GtkWidget *hbox4;
-  GtkWidget *label_date;
-  GtkWidget *label_status;
-  GtkWidget *label_bar;
+  GtkWidget *vbox8;
+  GtkWidget *slider_handlebox;
+  GtkWidget *slider_frame;
   GtkWidget *slider;
   GtkWidget *file_box;
-  GtkWidget *label_file;
+  GtkWidget *label_status;
   GtkWidget *dvd_box;
+  GtkWidget *label21;
   GtkWidget *title_chapter_box;
   GtkWidget *label19;
   GtkWidget *label_title;
   GtkWidget *button_title_prev;
   GtkWidget *button_title_next;
+  GtkWidget *vseparator1;
   GtkWidget *dvd_chapter_box;
   GtkWidget *label20;
   GtkWidget *label_chapter;
   GtkWidget *button_chapter_prev;
   GtkWidget *button_chapter_next;
   GtkWidget *network_box;
+  GtkWidget *network_address_label;
   GtkWidget *network_channel_box;
   GtkWidget *label_network;
   GtkObject *network_spinbutton_adj;
@@ -172,6 +181,7 @@ create_intf_window (void)
 
   intf_window = gnome_app_new ("VideoLAN Client", _("VideoLAN Client"));
   gtk_object_set_data (GTK_OBJECT (intf_window), "intf_window", intf_window);
+  gtk_window_set_policy (GTK_WINDOW (intf_window), FALSE, TRUE, TRUE);
 
   dockitem = GNOME_APP (intf_window)->dock;
   gtk_widget_ref (dockitem);
@@ -217,39 +227,48 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (menubar_view_menu_uiinfo[0].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_title",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_fullscreen",
                             menubar_view_menu_uiinfo[0].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (menubar_view_menu_uiinfo[0].widget, FALSE);
 
   gtk_widget_ref (menubar_view_menu_uiinfo[1].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_chapter",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator9",
                             menubar_view_menu_uiinfo[1].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (menubar_view_menu_uiinfo[1].widget, FALSE);
 
   gtk_widget_ref (menubar_view_menu_uiinfo[2].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_angle",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_title",
                             menubar_view_menu_uiinfo[2].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_set_sensitive (menubar_view_menu_uiinfo[2].widget, FALSE);
 
   gtk_widget_ref (menubar_view_menu_uiinfo[3].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator7",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_chapter",
                             menubar_view_menu_uiinfo[3].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (menubar_view_menu_uiinfo[3].widget, FALSE);
 
   gtk_widget_ref (menubar_view_menu_uiinfo[4].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_playlist",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_angle",
                             menubar_view_menu_uiinfo[4].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_set_sensitive (menubar_view_menu_uiinfo[4].widget, FALSE);
 
   gtk_widget_ref (menubar_view_menu_uiinfo[5].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_modules",
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator7",
                             menubar_view_menu_uiinfo[5].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (menubar_view_menu_uiinfo[5].widget, FALSE);
+
+  gtk_widget_ref (menubar_view_menu_uiinfo[6].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_playlist",
+                            menubar_view_menu_uiinfo[6].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (menubar_view_menu_uiinfo[7].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_modules",
+                            menubar_view_menu_uiinfo[7].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (menubar_view_menu_uiinfo[7].widget, FALSE);
 
   gtk_widget_ref (menubar_uiinfo[2].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_settings",
@@ -277,7 +296,6 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_preferences",
                             menubar_settings_menu_uiinfo[3].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (menubar_settings_menu_uiinfo[3].widget, FALSE);
 
   gtk_widget_ref (menubar_uiinfo[3].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_help",
@@ -305,7 +323,7 @@ create_intf_window (void)
   toolbar_file = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                 GTK_TOOLBAR_CHILD_BUTTON,
                                 NULL,
-                                _("Open"),
+                                _("File"),
                                 _("Open a File"), NULL,
                                 tmp_toolbar_icon, NULL, NULL);
   gtk_widget_ref (toolbar_file);
@@ -376,6 +394,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_play", toolbar_play,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_play);
+  gtk_widget_set_sensitive (toolbar_play, FALSE);
 
   tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_BOTTOM);
   toolbar_pause = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
@@ -388,6 +407,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_pause", toolbar_pause,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_pause);
+  gtk_widget_set_sensitive (toolbar_pause, FALSE);
 
   tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_TIMER_STOP);
   toolbar_slow = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
@@ -400,6 +420,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_slow", toolbar_slow,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_slow);
+  gtk_widget_set_sensitive (toolbar_slow, FALSE);
 
   tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_TIMER);
   toolbar_fast = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
@@ -412,6 +433,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_fast", toolbar_fast,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_fast);
+  gtk_widget_set_sensitive (toolbar_fast, FALSE);
 
   gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
 
@@ -426,7 +448,6 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_playlist", toolbar_playlist,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_playlist);
-  gtk_widget_set_sensitive (toolbar_playlist, FALSE);
 
   tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_FIRST);
   toolbar_prev = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
@@ -452,49 +473,34 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_next);
 
-  vbox2 = gtk_vbox_new (FALSE, 0);
-  gtk_widget_ref (vbox2);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "vbox2", vbox2,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (vbox2);
-  gnome_app_set_contents (GNOME_APP (intf_window), vbox2);
-
-  hbox4 = gtk_hbox_new (TRUE, 0);
-  gtk_widget_ref (hbox4);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "hbox4", hbox4,
+  vbox8 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_ref (vbox8);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "vbox8", vbox8,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (hbox4);
-  gtk_box_pack_start (GTK_BOX (vbox2), hbox4, TRUE, TRUE, 0);
-  gtk_widget_set_usize (hbox4, 650, -2);
+  gtk_widget_show (vbox8);
+  gnome_app_set_contents (GNOME_APP (intf_window), vbox8);
 
-  label_date = gtk_label_new (_("-:--:--"));
-  gtk_widget_ref (label_date);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_date", label_date,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_date);
-  gtk_box_pack_start (GTK_BOX (hbox4), label_date, FALSE, FALSE, 0);
-
-  label_status = gtk_label_new (_("Status: foo"));
-  gtk_widget_ref (label_status);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_status", label_status,
+  slider_handlebox = gtk_handle_box_new ();
+  gtk_widget_ref (slider_handlebox);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider_handlebox", slider_handlebox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_status);
-  gtk_box_pack_start (GTK_BOX (hbox4), label_status, FALSE, FALSE, 0);
-  gtk_widget_set_usize (label_status, 350, -2);
+  gtk_box_pack_start (GTK_BOX (vbox8), slider_handlebox, TRUE, TRUE, 0);
 
-  label_bar = gtk_label_new (_("Bar: baz"));
-  gtk_widget_ref (label_bar);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_bar", label_bar,
+  slider_frame = gtk_frame_new (_("-:--:--"));
+  gtk_widget_ref (slider_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider_frame", slider_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_bar);
-  gtk_box_pack_start (GTK_BOX (hbox4), label_bar, FALSE, FALSE, 0);
+  gtk_widget_show (slider_frame);
+  gtk_container_add (GTK_CONTAINER (slider_handlebox), slider_frame);
+  gtk_frame_set_label_align (GTK_FRAME (slider_frame), 0.05, 0.5);
 
   slider = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 6.25, 0)));
   gtk_widget_ref (slider);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider", slider,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (slider);
-  gtk_box_pack_start (GTK_BOX (vbox2), slider, TRUE, TRUE, 0);
+  gtk_container_add (GTK_CONTAINER (slider_frame), slider);
+  gtk_widget_set_usize (slider, 500, 15);
   gtk_scale_set_draw_value (GTK_SCALE (slider), FALSE);
   gtk_scale_set_digits (GTK_SCALE (slider), 3);
 
@@ -503,22 +509,29 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "file_box", file_box,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (file_box);
-  gtk_box_pack_start (GTK_BOX (vbox2), file_box, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox8), file_box, TRUE, TRUE, 0);
+  gtk_widget_set_usize (file_box, 500, 24);
 
-  label_file = gtk_label_new (_("Vlc File Mode"));
-  gtk_widget_ref (label_file);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_file", label_file,
+  label_status = gtk_label_new (_("Playlist empty"));
+  gtk_widget_ref (label_status);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_status", label_status,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_file);
-  gtk_box_pack_start (GTK_BOX (file_box), label_file, TRUE, TRUE, 0);
-  gtk_widget_set_usize (label_file, -2, 24);
+  gtk_widget_show (label_status);
+  gtk_box_pack_start (GTK_BOX (file_box), label_status, TRUE, TRUE, 0);
 
   dvd_box = gtk_hbox_new (FALSE, 0);
   gtk_widget_ref (dvd_box);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "dvd_box", dvd_box,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_box_pack_start (GTK_BOX (vbox2), dvd_box, TRUE, TRUE, 0);
-  gtk_widget_set_usize (dvd_box, -2, 24);
+  gtk_box_pack_start (GTK_BOX (vbox8), dvd_box, TRUE, TRUE, 0);
+  gtk_widget_set_usize (dvd_box, 500, 24);
+
+  label21 = gtk_label_new (_("DVD  "));
+  gtk_widget_ref (label21);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label21", label21,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (label21);
+  gtk_box_pack_start (GTK_BOX (dvd_box), label21, TRUE, FALSE, 0);
 
   title_chapter_box = gtk_hbox_new (FALSE, 10);
   gtk_widget_ref (title_chapter_box);
@@ -558,6 +571,13 @@ create_intf_window (void)
   gtk_box_pack_start (GTK_BOX (title_chapter_box), button_title_next, FALSE, FALSE, 0);
   gtk_button_set_relief (GTK_BUTTON (button_title_next), GTK_RELIEF_NONE);
 
+  vseparator1 = gtk_vseparator_new ();
+  gtk_widget_ref (vseparator1);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "vseparator1", vseparator1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (vseparator1);
+  gtk_box_pack_start (GTK_BOX (dvd_box), vseparator1, FALSE, FALSE, 0);
+
   dvd_chapter_box = gtk_hbox_new (FALSE, 10);
   gtk_widget_ref (dvd_chapter_box);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "dvd_chapter_box", dvd_chapter_box,
@@ -572,7 +592,7 @@ create_intf_window (void)
   gtk_widget_show (label20);
   gtk_box_pack_start (GTK_BOX (dvd_chapter_box), label20, FALSE, FALSE, 0);
 
-  label_chapter = gtk_label_new (_("--"));
+  label_chapter = gtk_label_new (_("---"));
   gtk_widget_ref (label_chapter);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_chapter", label_chapter,
                             (GtkDestroyNotify) gtk_widget_unref);
@@ -601,21 +621,28 @@ create_intf_window (void)
   gtk_widget_ref (network_box);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "network_box", network_box,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_box_pack_start (GTK_BOX (vbox2), network_box, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox8), network_box, FALSE, FALSE, 0);
+  gtk_widget_set_usize (network_box, 500, 24);
+
+  network_address_label = gtk_label_new (_("No server"));
+  gtk_widget_ref (network_address_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "network_address_label", network_address_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (network_address_label);
+  gtk_box_pack_start (GTK_BOX (network_box), network_address_label, FALSE, FALSE, 0);
 
   network_channel_box = gtk_hbox_new (FALSE, 0);
   gtk_widget_ref (network_channel_box);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "network_channel_box", network_channel_box,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (network_channel_box);
-  gtk_box_pack_start (GTK_BOX (network_box), network_channel_box, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (network_box), network_channel_box, FALSE, FALSE, 0);
 
   label_network = gtk_label_new (_("Network Channel:"));
   gtk_widget_ref (label_network);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_network", label_network,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (label_network);
-  gtk_box_pack_start (GTK_BOX (network_channel_box), label_network, TRUE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (network_channel_box), label_network, TRUE, FALSE, 5);
 
   network_spinbutton_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);
   network_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_spinbutton_adj), 1, 0);
@@ -623,15 +650,16 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "network_spinbutton", network_spinbutton,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (network_spinbutton);
-  gtk_box_pack_start (GTK_BOX (network_channel_box), network_spinbutton, FALSE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (network_channel_box), network_spinbutton, FALSE, TRUE, 5);
   gtk_widget_set_sensitive (network_spinbutton, FALSE);
 
-  appbar = gnome_appbar_new (TRUE, TRUE, GNOME_PREFERENCES_NEVER);
+  appbar = gnome_appbar_new (FALSE, TRUE, GNOME_PREFERENCES_NEVER);
   gtk_widget_ref (appbar);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "appbar", appbar,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (appbar);
   gnome_app_set_statusbar (GNOME_APP (intf_window), appbar);
+  gtk_widget_set_usize (appbar, 500, -2);
 
   gtk_signal_connect (GTK_OBJECT (intf_window), "destroy",
                       GTK_SIGNAL_FUNC (on_intf_window_destroy),
@@ -731,7 +759,7 @@ static GnomeUIInfo popup_file_menu_uiinfo[] =
 static GnomeUIInfo intf_popup_uiinfo[] =
 {
   {
-    GNOME_APP_UI_ITEM, N_("_Play"),
+    GNOME_APP_UI_ITEM, N_("Play"),
     NULL,
     (gpointer) on_popup_play_activate, NULL, NULL,
     GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD,
@@ -744,6 +772,20 @@ static GnomeUIInfo intf_popup_uiinfo[] =
     GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOTTOM,
     0, (GdkModifierType) 0, NULL
   },
+  {
+    GNOME_APP_UI_ITEM, N_("Stop"),
+    NULL,
+    (gpointer) on_popup_stop_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_STOP,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("Back"),
+    NULL,
+    (gpointer) on_popup_back_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK,
+    0, (GdkModifierType) 0, NULL
+  },
   {
     GNOME_APP_UI_ITEM, N_("Slow"),
     NULL,
@@ -759,11 +801,26 @@ static GnomeUIInfo intf_popup_uiinfo[] =
     0, (GdkModifierType) 0, NULL
   },
   GNOMEUIINFO_SEPARATOR,
+  {
+    GNOME_APP_UI_TOGGLEITEM, N_("_Fullscreen"),
+    N_("Toggle fullscreen mode"),
+    (gpointer) on_popup_fullscreen_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_SEPARATOR,
+  {
+    GNOME_APP_UI_ITEM, N_("_Jump"),
+    N_("Got directly so specified point"),
+    (gpointer) on_popup_jump_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_JUMP_TO,
+    0, (GdkModifierType) 0, NULL
+  },
   {
     GNOME_APP_UI_ITEM, N_("_Navigation"),
     N_("Navigate through titles and chapters"),
     (gpointer) NULL, NULL, NULL,
-    GNOME_APP_PIXMAP_NONE, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SEARCH,
     0, (GdkModifierType) 0, NULL
   },
   {
@@ -777,17 +834,26 @@ static GnomeUIInfo intf_popup_uiinfo[] =
     GNOME_APP_UI_ITEM, N_("_Audio"),
     N_("Select audio channel"),
     (gpointer) NULL, NULL, NULL,
-    GNOME_APP_PIXMAP_NONE, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_VOLUME,
     0, (GdkModifierType) 0, NULL
   },
   {
     GNOME_APP_UI_ITEM, N_("_Subtitles"),
     N_("Select subtitle channel"),
     (gpointer) NULL, NULL, NULL,
-    GNOME_APP_PIXMAP_NONE, NULL,
+    GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FONT,
     0, (GdkModifierType) 0, NULL
   },
+  GNOMEUIINFO_SEPARATOR,
   GNOMEUIINFO_MENU_FILE_TREE (popup_file_menu_uiinfo),
+  {
+    GNOME_APP_UI_ITEM, N_("Playlist..."),
+    NULL,
+    (gpointer) on_popup_playlist_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_MENU_PREFERENCES_ITEM (on_popup_preferences_activate, NULL),
   GNOMEUIINFO_SEPARATOR,
   GNOMEUIINFO_MENU_EXIT_ITEM (on_popup_exit_activate, NULL),
   GNOMEUIINFO_END
@@ -814,49 +880,80 @@ create_intf_popup (void)
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[2].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_slow",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_stop",
                             intf_popup_uiinfo[2].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[3].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_fast",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_back",
                             intf_popup_uiinfo[3].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (intf_popup_uiinfo[3].widget, FALSE);
 
   gtk_widget_ref (intf_popup_uiinfo[4].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator3",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_slow",
                             intf_popup_uiinfo[4].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   gtk_widget_ref (intf_popup_uiinfo[5].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_navigation",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_fast",
                             intf_popup_uiinfo[5].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (intf_popup_uiinfo[5].widget, FALSE);
 
   gtk_widget_ref (intf_popup_uiinfo[6].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_angle",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator3",
                             intf_popup_uiinfo[6].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (intf_popup_uiinfo[6].widget, FALSE);
 
   gtk_widget_ref (intf_popup_uiinfo[7].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_audio",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_fullscreen",
                             intf_popup_uiinfo[7].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (intf_popup_uiinfo[7].widget, FALSE);
 
   gtk_widget_ref (intf_popup_uiinfo[8].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_subtitle",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator8",
                             intf_popup_uiinfo[8].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (intf_popup_uiinfo[8].widget, FALSE);
 
   gtk_widget_ref (intf_popup_uiinfo[9].widget);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file",
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_jump",
                             intf_popup_uiinfo[9].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
+  gtk_widget_ref (intf_popup_uiinfo[10].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_navigation",
+                            intf_popup_uiinfo[10].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (intf_popup_uiinfo[10].widget, FALSE);
+
+  gtk_widget_ref (intf_popup_uiinfo[11].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_angle",
+                            intf_popup_uiinfo[11].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (intf_popup_uiinfo[11].widget, FALSE);
+
+  gtk_widget_ref (intf_popup_uiinfo[12].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_audio",
+                            intf_popup_uiinfo[12].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (intf_popup_uiinfo[12].widget, FALSE);
+
+  gtk_widget_ref (intf_popup_uiinfo[13].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_subtitle",
+                            intf_popup_uiinfo[13].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_set_sensitive (intf_popup_uiinfo[13].widget, FALSE);
+
+  gtk_widget_ref (intf_popup_uiinfo[14].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator13",
+                            intf_popup_uiinfo[14].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (intf_popup_uiinfo[15].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file",
+                            intf_popup_uiinfo[15].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
   gtk_widget_ref (popup_file_menu_uiinfo[0].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_open",
                             popup_file_menu_uiinfo[0].widget,
@@ -882,14 +979,24 @@ create_intf_popup (void)
                             popup_file_menu_uiinfo[4].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
-  gtk_widget_ref (intf_popup_uiinfo[10].widget);
+  gtk_widget_ref (intf_popup_uiinfo[16].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_playlist",
+                            intf_popup_uiinfo[16].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (intf_popup_uiinfo[17].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_preferences",
+                            intf_popup_uiinfo[17].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (intf_popup_uiinfo[18].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator2",
-                            intf_popup_uiinfo[10].widget,
+                            intf_popup_uiinfo[18].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
-  gtk_widget_ref (intf_popup_uiinfo[11].widget);
+  gtk_widget_ref (intf_popup_uiinfo[19].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_exit",
-                            intf_popup_uiinfo[11].widget,
+                            intf_popup_uiinfo[19].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
 
   return intf_popup;
@@ -1038,97 +1145,6 @@ create_intf_modules (void)
   return intf_modules;
 }
 
-GtkWidget*
-create_intf_playlist (void)
-{
-  GtkWidget *intf_playlist;
-  GtkWidget *dialog_vbox2;
-  GtkWidget *label11;
-  GtkWidget *scrolledwindow3;
-  GtkWidget *clist2;
-  GtkWidget *label8;
-  GtkWidget *label9;
-  GtkWidget *label10;
-  GtkWidget *dialog_action_area2;
-  GtkWidget *playlist_ok;
-
-  intf_playlist = gnome_dialog_new (_("Playlist"), NULL);
-  gtk_object_set_data (GTK_OBJECT (intf_playlist), "intf_playlist", intf_playlist);
-
-  dialog_vbox2 = GNOME_DIALOG (intf_playlist)->vbox;
-  gtk_object_set_data (GTK_OBJECT (intf_playlist), "dialog_vbox2", dialog_vbox2);
-  gtk_widget_show (dialog_vbox2);
-
-  label11 = gtk_label_new (_("Sorry, the playlist isn't functional yet. Please retry in a later version."));
-  gtk_widget_ref (label11);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label11", label11,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label11);
-  gtk_box_pack_start (GTK_BOX (dialog_vbox2), label11, FALSE, FALSE, 0);
-
-  scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
-  gtk_widget_ref (scrolledwindow3);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "scrolledwindow3", scrolledwindow3,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (scrolledwindow3);
-  gtk_box_pack_start (GTK_BOX (dialog_vbox2), scrolledwindow3, TRUE, TRUE, 0);
-
-  clist2 = gtk_clist_new (3);
-  gtk_widget_ref (clist2);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "clist2", clist2,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (clist2);
-  gtk_container_add (GTK_CONTAINER (scrolledwindow3), clist2);
-  gtk_clist_set_column_width (GTK_CLIST (clist2), 0, 211);
-  gtk_clist_set_column_width (GTK_CLIST (clist2), 1, 49);
-  gtk_clist_set_column_width (GTK_CLIST (clist2), 2, 35);
-  gtk_clist_column_titles_hide (GTK_CLIST (clist2));
-
-  label8 = gtk_label_new (_("Name"));
-  gtk_widget_ref (label8);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label8", label8,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label8);
-  gtk_clist_set_column_widget (GTK_CLIST (clist2), 0, label8);
-
-  label9 = gtk_label_new (_("Type"));
-  gtk_widget_ref (label9);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label9", label9,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label9);
-  gtk_clist_set_column_widget (GTK_CLIST (clist2), 1, label9);
-
-  label10 = gtk_label_new (_("Length"));
-  gtk_widget_ref (label10);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label10", label10,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label10);
-  gtk_clist_set_column_widget (GTK_CLIST (clist2), 2, label10);
-
-  dialog_action_area2 = GNOME_DIALOG (intf_playlist)->action_area;
-  gtk_object_set_data (GTK_OBJECT (intf_playlist), "dialog_action_area2", dialog_action_area2);
-  gtk_widget_show (dialog_action_area2);
-  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
-  gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area2), 8);
-
-  gnome_dialog_append_button (GNOME_DIALOG (intf_playlist), GNOME_STOCK_BUTTON_OK);
-  playlist_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_playlist)->buttons)->data);
-  gtk_widget_ref (playlist_ok);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_ok", playlist_ok,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (playlist_ok);
-  GTK_WIDGET_SET_FLAGS (playlist_ok, GTK_CAN_DEFAULT);
-
-  gtk_signal_connect (GTK_OBJECT (intf_playlist), "destroy",
-                      GTK_SIGNAL_FUNC (on_intf_playlist_destroy),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (playlist_ok), "clicked",
-                      GTK_SIGNAL_FUNC (on_playlist_ok_clicked),
-                      NULL);
-
-  return intf_playlist;
-}
-
 GtkWidget*
 create_intf_disc (void)
 {
@@ -1337,10 +1353,17 @@ create_intf_network (void)
   GtkWidget *label18;
   GtkObject *network_port_adj;
   GtkWidget *network_port;
+  GtkWidget *broadcast_check;
+  GtkWidget *network_broadcast_combo;
+  GtkWidget *network_broadcast;
+  GtkWidget *network_server_combo;
   GtkWidget *network_server;
   GtkWidget *hbuttonbox1;
   GtkWidget *network_ok;
   GtkWidget *network_cancel;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
 
   intf_network = gnome_dialog_new (_("Network Stream"), NULL);
   gtk_object_set_data (GTK_OBJECT (intf_network), "intf_network", intf_network);
@@ -1405,7 +1428,7 @@ create_intf_network (void)
   gtk_widget_show (frame4);
   gtk_box_pack_start (GTK_BOX (hbox3), frame4, TRUE, TRUE, 0);
 
-  table2 = gtk_table_new (2, 2, FALSE);
+  table2 = gtk_table_new (3, 2, FALSE);
   gtk_widget_ref (table2);
   gtk_object_set_data_full (GTK_OBJECT (intf_network), "table2", table2,
                             (GtkDestroyNotify) gtk_widget_unref);
@@ -1444,15 +1467,47 @@ create_intf_network (void)
   gtk_table_attach (GTK_TABLE (table2), network_port, 1, 2, 1, 2,
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, network_port, _("Port of the stream server"), NULL);
+
+  broadcast_check = gtk_check_button_new_with_label (_("Broadcast"));
+  gtk_widget_ref (broadcast_check);
+  gtk_object_set_data_full (GTK_OBJECT (intf_network), "broadcast_check", broadcast_check,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (broadcast_check);
+  gtk_table_attach (GTK_TABLE (table2), broadcast_check, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
 
-  network_server = gtk_entry_new ();
+  network_broadcast_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (network_broadcast_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_network), "network_broadcast_combo", network_broadcast_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (network_broadcast_combo);
+  gtk_table_attach (GTK_TABLE (table2), network_broadcast_combo, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  network_broadcast = gnome_entry_gtk_entry (GNOME_ENTRY (network_broadcast_combo));
+  gtk_widget_ref (network_broadcast);
+  gtk_object_set_data_full (GTK_OBJECT (intf_network), "network_broadcast", network_broadcast,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (network_broadcast);
+  gtk_widget_set_sensitive (network_broadcast, FALSE);
+
+  network_server_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (network_server_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_network), "network_server_combo", network_server_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (network_server_combo);
+  gtk_table_attach (GTK_TABLE (table2), network_server_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  network_server = gnome_entry_gtk_entry (GNOME_ENTRY (network_server_combo));
   gtk_widget_ref (network_server);
   gtk_object_set_data_full (GTK_OBJECT (intf_network), "network_server", network_server,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (network_server);
-  gtk_table_attach (GTK_TABLE (table2), network_server, 1, 2, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
   gtk_entry_set_text (GTK_ENTRY (network_server), _("vls"));
 
   hbuttonbox1 = GNOME_DIALOG (intf_network)->action_area;
@@ -1477,6 +1532,9 @@ create_intf_network (void)
   gtk_widget_show (network_cancel);
   GTK_WIDGET_SET_FLAGS (network_cancel, GTK_CAN_DEFAULT);
 
+  gtk_signal_connect (GTK_OBJECT (broadcast_check), "toggled",
+                      GTK_SIGNAL_FUNC (on_broadcast_check_toggled),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (network_ok), "clicked",
                       GTK_SIGNAL_FUNC (on_network_ok_clicked),
                       NULL);
@@ -1484,6 +1542,1264 @@ create_intf_network (void)
                       GTK_SIGNAL_FUNC (on_network_cancel_clicked),
                       NULL);
 
+  gtk_object_set_data (GTK_OBJECT (intf_network), "tooltips", tooltips);
+
   return intf_network;
 }
 
+static GnomeUIInfo playlist_add_menu_uiinfo[] =
+{
+  {
+    GNOME_APP_UI_ITEM, N_("Disc"),
+    NULL,
+    (gpointer) on_playlist_disc_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("File"),
+    NULL,
+    (gpointer) on_playlist_file_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("Network"),
+    NULL,
+    (gpointer) on_playlist_network_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("Url"),
+    NULL,
+    (gpointer) on_playlist_url_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_END
+};
+
+static GnomeUIInfo playlist_delete_menu_uiinfo[] =
+{
+  {
+    GNOME_APP_UI_ITEM, N_("All"),
+    NULL,
+    (gpointer) on_playlist_delete_all_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("Item"),
+    NULL,
+    (gpointer) on_playlist_delete_item_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_END
+};
+
+static GnomeUIInfo playlist_selection_menu_uiinfo[] =
+{
+  {
+    GNOME_APP_UI_ITEM, N_("Crop"),
+    NULL,
+    (gpointer) on_playlist_crop_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("Invert"),
+    NULL,
+    (gpointer) on_playlist_invert_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_ITEM, N_("Select"),
+    NULL,
+    (gpointer) on_playlist_select_activate, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_END
+};
+
+static GnomeUIInfo playlist_menubar_uiinfo[] =
+{
+  {
+    GNOME_APP_UI_SUBTREE, N_("Add"),
+    NULL,
+    playlist_add_menu_uiinfo, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_SUBTREE, N_("Delete"),
+    NULL,
+    playlist_delete_menu_uiinfo, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  {
+    GNOME_APP_UI_SUBTREE, N_("Selection"),
+    NULL,
+    playlist_selection_menu_uiinfo, NULL, NULL,
+    GNOME_APP_PIXMAP_NONE, NULL,
+    0, (GdkModifierType) 0, NULL
+  },
+  GNOMEUIINFO_END
+};
+
+GtkWidget*
+create_intf_playlist (void)
+{
+  GtkWidget *intf_playlist;
+  GtkWidget *playlist_vbox;
+  GtkWidget *playlist_scrolledwindow;
+  GtkWidget *playlist_viewport;
+  GtkWidget *playlist_frame;
+  GtkWidget *playlist_clist;
+  GtkWidget *playlist_label_url;
+  GtkWidget *playlist_label_duration;
+  GtkWidget *playlist_menubar;
+  GtkWidget *playlist_action;
+  GtkWidget *playlist_ok;
+  GtkWidget *playlist_cancel;
+
+  intf_playlist = gnome_dialog_new (_("Playlist"), NULL);
+  gtk_object_set_data (GTK_OBJECT (intf_playlist), "intf_playlist", intf_playlist);
+  gtk_window_set_default_size (GTK_WINDOW (intf_playlist), 400, 300);
+  gtk_window_set_policy (GTK_WINDOW (intf_playlist), TRUE, TRUE, FALSE);
+
+  playlist_vbox = GNOME_DIALOG (intf_playlist)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_playlist), "playlist_vbox", playlist_vbox);
+  gtk_widget_show (playlist_vbox);
+
+  playlist_scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_ref (playlist_scrolledwindow);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_scrolledwindow", playlist_scrolledwindow,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_scrolledwindow);
+  gtk_box_pack_start (GTK_BOX (playlist_vbox), playlist_scrolledwindow, TRUE, TRUE, 0);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (playlist_scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  playlist_viewport = gtk_viewport_new (NULL, NULL);
+  gtk_widget_ref (playlist_viewport);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_viewport", playlist_viewport,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_viewport);
+  gtk_container_add (GTK_CONTAINER (playlist_scrolledwindow), playlist_viewport);
+
+  playlist_frame = gtk_frame_new (_("Playlist"));
+  gtk_widget_ref (playlist_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_frame", playlist_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_frame);
+  gtk_container_add (GTK_CONTAINER (playlist_viewport), playlist_frame);
+  gtk_frame_set_label_align (GTK_FRAME (playlist_frame), 0.05, 0.5);
+
+  playlist_clist = gtk_clist_new (2);
+  gtk_widget_ref (playlist_clist);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_clist", playlist_clist,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_clist);
+  gtk_container_add (GTK_CONTAINER (playlist_frame), playlist_clist);
+  gtk_clist_set_column_width (GTK_CLIST (playlist_clist), 0, 287);
+  gtk_clist_set_column_width (GTK_CLIST (playlist_clist), 1, 70);
+  gtk_clist_column_titles_show (GTK_CLIST (playlist_clist));
+
+  playlist_label_url = gtk_label_new (_("Url"));
+  gtk_widget_ref (playlist_label_url);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_label_url", playlist_label_url,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_label_url);
+  gtk_clist_set_column_widget (GTK_CLIST (playlist_clist), 0, playlist_label_url);
+
+  playlist_label_duration = gtk_label_new (_("Duration"));
+  gtk_widget_ref (playlist_label_duration);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_label_duration", playlist_label_duration,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_label_duration);
+  gtk_clist_set_column_widget (GTK_CLIST (playlist_clist), 1, playlist_label_duration);
+
+  playlist_menubar = gtk_menu_bar_new ();
+  gtk_widget_ref (playlist_menubar);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_menubar", playlist_menubar,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_menubar);
+  gtk_box_pack_start (GTK_BOX (playlist_vbox), playlist_menubar, FALSE, FALSE, 0);
+  gnome_app_fill_menu (GTK_MENU_SHELL (playlist_menubar), playlist_menubar_uiinfo,
+                       NULL, FALSE, 0);
+
+  gtk_widget_ref (playlist_menubar_uiinfo[0].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add",
+                            playlist_menubar_uiinfo[0].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_add_menu_uiinfo[0].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_disc",
+                            playlist_add_menu_uiinfo[0].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_add_menu_uiinfo[1].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_file",
+                            playlist_add_menu_uiinfo[1].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_add_menu_uiinfo[2].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_network",
+                            playlist_add_menu_uiinfo[2].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_add_menu_uiinfo[3].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_url",
+                            playlist_add_menu_uiinfo[3].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_menubar_uiinfo[1].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_delete",
+                            playlist_menubar_uiinfo[1].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_delete_menu_uiinfo[0].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_delete_all",
+                            playlist_delete_menu_uiinfo[0].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_delete_menu_uiinfo[1].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playmist_delete_item",
+                            playlist_delete_menu_uiinfo[1].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_menubar_uiinfo[2].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection",
+                            playlist_menubar_uiinfo[2].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_selection_menu_uiinfo[0].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_crop",
+                            playlist_selection_menu_uiinfo[0].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_selection_menu_uiinfo[1].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_invert",
+                            playlist_selection_menu_uiinfo[1].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  gtk_widget_ref (playlist_selection_menu_uiinfo[2].widget);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_select",
+                            playlist_selection_menu_uiinfo[2].widget,
+                            (GtkDestroyNotify) gtk_widget_unref);
+
+  playlist_action = GNOME_DIALOG (intf_playlist)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_playlist), "playlist_action", playlist_action);
+  gtk_widget_show (playlist_action);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (playlist_action), GTK_BUTTONBOX_END);
+  gtk_button_box_set_spacing (GTK_BUTTON_BOX (playlist_action), 8);
+  gtk_button_box_set_child_size (GTK_BUTTON_BOX (playlist_action), 100, 38);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_playlist), GNOME_STOCK_BUTTON_OK);
+  playlist_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_playlist)->buttons)->data);
+  gtk_widget_ref (playlist_ok);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_ok", playlist_ok,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_ok);
+  GTK_WIDGET_SET_FLAGS (playlist_ok, GTK_CAN_DEFAULT);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_playlist), GNOME_STOCK_BUTTON_CANCEL);
+  playlist_cancel = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_playlist)->buttons)->data);
+  gtk_widget_ref (playlist_cancel);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_cancel", playlist_cancel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_cancel);
+  GTK_WIDGET_SET_FLAGS (playlist_cancel, GTK_CAN_DEFAULT);
+
+  gtk_signal_connect (GTK_OBJECT (playlist_clist), "event",
+                      GTK_SIGNAL_FUNC (on_playlist_clist_event),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_data_received",
+                      GTK_SIGNAL_FUNC (on_playlist_clist_drag_data_received),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_motion",
+                      GTK_SIGNAL_FUNC (on_playlist_clist_drag_motion),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (playlist_ok), "clicked",
+                      GTK_SIGNAL_FUNC (on_playlist_ok_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (playlist_cancel), "clicked",
+                      GTK_SIGNAL_FUNC (on_playlist_cancel_clicked),
+                      NULL);
+
+  return intf_playlist;
+}
+
+GtkWidget*
+create_intf_jump (void)
+{
+  GtkWidget *intf_jump;
+  GtkWidget *jump_vbox;
+  GtkWidget *jump_frame;
+  GtkWidget *jump_box;
+  GtkObject *jump_second_spinbutton_adj;
+  GtkWidget *jump_second_spinbutton;
+  GtkWidget *jump_label1;
+  GtkObject *jump_minute_spinbutton_adj;
+  GtkWidget *jump_minute_spinbutton;
+  GtkWidget *jump_label2;
+  GtkObject *jump_hour_spinbutton_adj;
+  GtkWidget *jump_hour_spinbutton;
+  GtkWidget *jump_action;
+  GtkWidget *jump_ok;
+  GtkWidget *jump_cancel;
+
+  intf_jump = gnome_dialog_new (NULL, NULL);
+  gtk_object_set_data (GTK_OBJECT (intf_jump), "intf_jump", intf_jump);
+  gtk_window_set_policy (GTK_WINDOW (intf_jump), FALSE, FALSE, FALSE);
+
+  jump_vbox = GNOME_DIALOG (intf_jump)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_jump), "jump_vbox", jump_vbox);
+  gtk_widget_show (jump_vbox);
+
+  jump_frame = gtk_frame_new (_("Jump to:"));
+  gtk_widget_ref (jump_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_frame", jump_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_frame);
+  gtk_box_pack_start (GTK_BOX (jump_vbox), jump_frame, FALSE, FALSE, 0);
+  gtk_frame_set_label_align (GTK_FRAME (jump_frame), 0.05, 0.5);
+
+  jump_box = gtk_hbox_new (FALSE, 0);
+  gtk_widget_ref (jump_box);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_box", jump_box,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_box);
+  gtk_container_add (GTK_CONTAINER (jump_frame), jump_box);
+
+  jump_second_spinbutton_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
+  jump_second_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (jump_second_spinbutton_adj), 1, 0);
+  gtk_widget_ref (jump_second_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_second_spinbutton", jump_second_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_second_spinbutton);
+  gtk_box_pack_end (GTK_BOX (jump_box), jump_second_spinbutton, FALSE, FALSE, 5);
+
+  jump_label1 = gtk_label_new (_(":"));
+  gtk_widget_ref (jump_label1);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_label1", jump_label1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_label1);
+  gtk_box_pack_end (GTK_BOX (jump_box), jump_label1, FALSE, FALSE, 5);
+
+  jump_minute_spinbutton_adj = gtk_adjustment_new (0, 0, 59, 1, 10, 10);
+  jump_minute_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (jump_minute_spinbutton_adj), 1, 0);
+  gtk_widget_ref (jump_minute_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_minute_spinbutton", jump_minute_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_minute_spinbutton);
+  gtk_box_pack_end (GTK_BOX (jump_box), jump_minute_spinbutton, FALSE, FALSE, 5);
+
+  jump_label2 = gtk_label_new (_(":"));
+  gtk_widget_ref (jump_label2);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_label2", jump_label2,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_label2);
+  gtk_box_pack_end (GTK_BOX (jump_box), jump_label2, FALSE, FALSE, 5);
+
+  jump_hour_spinbutton_adj = gtk_adjustment_new (0, 0, 10, 1, 10, 10);
+  jump_hour_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (jump_hour_spinbutton_adj), 1, 0);
+  gtk_widget_ref (jump_hour_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_hour_spinbutton", jump_hour_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_hour_spinbutton);
+  gtk_box_pack_end (GTK_BOX (jump_box), jump_hour_spinbutton, FALSE, FALSE, 5);
+
+  jump_action = GNOME_DIALOG (intf_jump)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_jump), "jump_action", jump_action);
+  gtk_widget_show (jump_action);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (jump_action), GTK_BUTTONBOX_END);
+  gtk_button_box_set_spacing (GTK_BUTTON_BOX (jump_action), 8);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_jump), GNOME_STOCK_BUTTON_OK);
+  jump_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_jump)->buttons)->data);
+  gtk_widget_ref (jump_ok);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_ok", jump_ok,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_ok);
+  GTK_WIDGET_SET_FLAGS (jump_ok, GTK_CAN_DEFAULT);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_jump), GNOME_STOCK_BUTTON_CANCEL);
+  jump_cancel = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_jump)->buttons)->data);
+  gtk_widget_ref (jump_cancel);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_cancel", jump_cancel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_cancel);
+  GTK_WIDGET_SET_FLAGS (jump_cancel, GTK_CAN_DEFAULT);
+
+  gtk_signal_connect (GTK_OBJECT (jump_ok), "clicked",
+                      GTK_SIGNAL_FUNC (on_jump_ok_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (jump_cancel), "clicked",
+                      GTK_SIGNAL_FUNC (on_jump_cancel_clicked),
+                      NULL);
+
+  return intf_jump;
+}
+
+GtkWidget*
+create_intf_preferences (void)
+{
+  GtkWidget *intf_preferences;
+  GtkWidget *preferences_vbox;
+  GtkWidget *preferences_frame;
+  GtkWidget *preferences_notebook;
+  GtkWidget *preferences_file_table;
+  GtkWidget *preferences_file_combo;
+  GtkWidget *preferences_file_entry;
+  GtkWidget *preferences_file_path_label;
+  GtkWidget *preferences_file;
+  GtkWidget *preferences_disc_table;
+  GtkWidget *preferences_disc_dvd_combo;
+  GtkWidget *preferences_disc_dvd_entry;
+  GtkWidget *preferences_file_vcd_combo;
+  GtkWidget *preferences_disc_vcd_entry;
+  GtkWidget *preferences_disc_dvd_label;
+  GtkWidget *preferences_disc_vcd_label;
+  GtkWidget *preferences_disc;
+  GtkWidget *preferences_network_table;
+  GtkWidget *preferences_network_server_label;
+  GtkObject *preferences_network_port_spinbutton_adj;
+  GtkWidget *preferences_network_port_spinbutton;
+  GtkWidget *preferences_network_broadcast_label;
+  GtkWidget *preferences_network_port_label;
+  GtkWidget *preferences_network_server_combo;
+  GtkWidget *preferences_network_server_entry;
+  GtkWidget *preferences_network_broadcast_combo;
+  GtkWidget *preferences_network_broadcast_entry;
+  GtkWidget *preferences_network_broadcast_check_button;
+  GSList *preferences_network_protocol_group_group = NULL;
+  GtkWidget *preferences_network_ts_radiobutton;
+  GtkWidget *preferences_network_rtp_radiobutton;
+  GtkWidget *preferences_network_http_radiobutton;
+  GtkWidget *preferences_network_protocol_label;
+  GtkWidget *preferences_network;
+  GtkWidget *preferences_network_interface_table;
+  GtkWidget *preferences_interface_label;
+  GtkWidget *preferences_network_interface_combo;
+  GtkWidget *preferences_network_interface_entry;
+  GtkWidget *preferences_interface;
+  GtkWidget *preferences_video_table;
+  GtkWidget *preferences_video_output_label;
+  GtkWidget *preferences_video_height;
+  GtkObject *preferences_video_height_spinbutton_adj;
+  GtkWidget *preferences_video_height_spinbutton;
+  GtkObject *preferences_video_width_spinbutton_adj;
+  GtkWidget *preferences_video_width_spinbutton;
+  GtkWidget *preferences_video_width_label;
+  GtkWidget *preferences_video_output_combo;
+  GtkWidget *preferences_video_output_entry;
+  GtkWidget *preferences_video_depth;
+  GtkWidget *preferences_video_depth_optionmenu;
+  GtkWidget *preferences_video_depth_optionmenu_menu;
+  GtkWidget *glade_menuitem;
+  GtkWidget *preferences_video_fullscreen_depth;
+  GtkWidget *preferences_video_fullscreen_depth_optionmenu;
+  GtkWidget *preferences_video_fullscreen_depth_optionmenu_menu;
+  GtkWidget *preferences_video_fullscreen_checkbutton;
+  GtkWidget *preferences_video_grayscale_checkbutton;
+  GtkWidget *preferences_video_gamma_label;
+  GtkObject *spinbutton4_adj;
+  GtkWidget *spinbutton4;
+  GtkWidget *preferences_video;
+  GtkWidget *preference_audio_table;
+  GtkWidget *preferences_audio_spdif_checkbutton;
+  GtkWidget *preferences_audio_output_label;
+  GtkWidget *preferences_audio_output_combo;
+  GtkWidget *preferences_audio_output_entry;
+  GtkWidget *preferences_audio_frequency_label;
+  GtkWidget *preferences_audio_frequency_optionmenu;
+  GtkWidget *preferences_audio_frequency_optionmenu_menu;
+  GtkWidget *preferences_audio_quality_label;
+  GtkWidget *preferences_audio_quality_optionmenu;
+  GtkWidget *preferences_audio_quality_optionmenu_menu;
+  GtkWidget *preferences_audio_channels_label;
+  GtkWidget *preferences_audio_channels_optionmenu;
+  GtkWidget *preferences_audio_channels_optionmenu_menu;
+  GtkWidget *preferences_audio;
+  GtkWidget *preference_playlist_table;
+  GtkWidget *preferences_playlist_launch_on_startup_checkbutton;
+  GtkWidget *preferences_playlist_loop_checkbutton;
+  GtkWidget *playlist_enqueue_as_default_checkbutton;
+  GtkWidget *preferences_playlist;
+  GtkWidget *preferences_misc_table;
+  GtkWidget *preferences_misc_associated_filesframe;
+  GtkWidget *preferences_misc_associated_files_vbox;
+  GtkWidget *preferences_misc_mpeg_checkbutton;
+  GtkWidget *preferences_misc_mp2_checkbutton;
+  GtkWidget *preferences_misc_vob_checkbutton;
+  GtkWidget *preferences_misc_ts_checkbutton;
+  GtkWidget *preferences_misc;
+  GtkWidget *preferences_dialog;
+  GtkWidget *preferences_ok;
+  GtkWidget *preferences_apply;
+  GtkWidget *preferences_cancel;
+
+  intf_preferences = gnome_dialog_new (_("Preferences"), NULL);
+  gtk_object_set_data (GTK_OBJECT (intf_preferences), "intf_preferences", intf_preferences);
+  gtk_window_set_default_size (GTK_WINDOW (intf_preferences), 450, 350);
+  gtk_window_set_policy (GTK_WINDOW (intf_preferences), TRUE, TRUE, FALSE);
+
+  preferences_vbox = GNOME_DIALOG (intf_preferences)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_preferences), "preferences_vbox", preferences_vbox);
+  gtk_widget_show (preferences_vbox);
+
+  preferences_frame = gtk_frame_new (_("Preferences"));
+  gtk_widget_ref (preferences_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_frame", preferences_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_frame);
+  gtk_box_pack_start (GTK_BOX (preferences_vbox), preferences_frame, TRUE, TRUE, 0);
+  gtk_frame_set_label_align (GTK_FRAME (preferences_frame), 0.05, 0.5);
+
+  preferences_notebook = gtk_notebook_new ();
+  gtk_widget_ref (preferences_notebook);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_notebook", preferences_notebook,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_notebook);
+  gtk_container_add (GTK_CONTAINER (preferences_frame), preferences_notebook);
+
+  preferences_file_table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_ref (preferences_file_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_table", preferences_file_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_file_table);
+
+  preferences_file_combo = gnome_file_entry_new (NULL, NULL);
+  gtk_widget_ref (preferences_file_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_combo", preferences_file_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_combo);
+  gtk_table_attach (GTK_TABLE (preferences_file_table), preferences_file_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_file_entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (preferences_file_combo));
+  gtk_widget_ref (preferences_file_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_entry", preferences_file_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_entry);
+
+  preferences_file_path_label = gtk_label_new (_("Default path: "));
+  gtk_widget_ref (preferences_file_path_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_path_label", preferences_file_path_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_path_label);
+  gtk_table_attach (GTK_TABLE (preferences_file_table), preferences_file_path_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_file_path_label), 0, 0.5);
+
+  preferences_file = gtk_label_new (_("File"));
+  gtk_widget_ref (preferences_file);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file", preferences_file,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 0), preferences_file);
+
+  preferences_disc_table = gtk_table_new (2, 2, FALSE);
+  gtk_widget_ref (preferences_disc_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_table", preferences_disc_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_disc_table);
+
+  preferences_disc_dvd_combo = gnome_file_entry_new (NULL, NULL);
+  gtk_widget_ref (preferences_disc_dvd_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_dvd_combo", preferences_disc_dvd_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_dvd_combo);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_disc_dvd_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_disc_dvd_entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (preferences_disc_dvd_combo));
+  gtk_widget_ref (preferences_disc_dvd_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_dvd_entry", preferences_disc_dvd_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_dvd_entry);
+
+  preferences_file_vcd_combo = gnome_file_entry_new (NULL, NULL);
+  gtk_widget_ref (preferences_file_vcd_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_vcd_combo", preferences_file_vcd_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_vcd_combo);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_file_vcd_combo, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_disc_vcd_entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (preferences_file_vcd_combo));
+  gtk_widget_ref (preferences_disc_vcd_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_vcd_entry", preferences_disc_vcd_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_vcd_entry);
+
+  preferences_disc_dvd_label = gtk_label_new (_("Default DVD path: "));
+  gtk_widget_ref (preferences_disc_dvd_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_dvd_label", preferences_disc_dvd_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_dvd_label);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_disc_dvd_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_disc_dvd_label), 0, 0.5);
+
+  preferences_disc_vcd_label = gtk_label_new (_("Default VCD path: "));
+  gtk_widget_ref (preferences_disc_vcd_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_vcd_label", preferences_disc_vcd_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_vcd_label);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_disc_vcd_label, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_disc_vcd_label), 0, 0.5);
+
+  preferences_disc = gtk_label_new (_("Disc"));
+  gtk_widget_ref (preferences_disc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc", preferences_disc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 1), preferences_disc);
+
+  preferences_network_table = gtk_table_new (7, 2, FALSE);
+  gtk_widget_ref (preferences_network_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_table", preferences_network_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_network_table);
+
+  preferences_network_server_label = gtk_label_new (_("Default server: "));
+  gtk_widget_ref (preferences_network_server_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_server_label", preferences_network_server_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_server_label);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_server_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_network_server_label), 0, 0.5);
+
+  preferences_network_port_spinbutton_adj = gtk_adjustment_new (1234, 0, 65535, 1, 10, 10);
+  preferences_network_port_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_network_port_spinbutton_adj), 1, 0);
+  gtk_widget_ref (preferences_network_port_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_port_spinbutton", preferences_network_port_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_port_spinbutton);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_port_spinbutton, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_network_broadcast_label = gtk_label_new (_("Broadcast address: "));
+  gtk_widget_ref (preferences_network_broadcast_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_broadcast_label", preferences_network_broadcast_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_broadcast_label);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_broadcast_label, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_network_broadcast_label), 0, 0.5);
+
+  preferences_network_port_label = gtk_label_new (_("Default port: "));
+  gtk_widget_ref (preferences_network_port_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_port_label", preferences_network_port_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_port_label);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_port_label, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_network_port_label), 0, 0.5);
+
+  preferences_network_server_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (preferences_network_server_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_server_combo", preferences_network_server_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_server_combo);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_server_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_network_server_entry = gnome_entry_gtk_entry (GNOME_ENTRY (preferences_network_server_combo));
+  gtk_widget_ref (preferences_network_server_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_server_entry", preferences_network_server_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_server_entry);
+  gtk_entry_set_text (GTK_ENTRY (preferences_network_server_entry), _("vls"));
+
+  preferences_network_broadcast_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (preferences_network_broadcast_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_broadcast_combo", preferences_network_broadcast_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_broadcast_combo);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_broadcast_combo, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_network_broadcast_entry = gnome_entry_gtk_entry (GNOME_ENTRY (preferences_network_broadcast_combo));
+  gtk_widget_ref (preferences_network_broadcast_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_broadcast_entry", preferences_network_broadcast_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_broadcast_entry);
+
+  preferences_network_broadcast_check_button = gtk_check_button_new_with_label (_("Broadcast mode"));
+  gtk_widget_ref (preferences_network_broadcast_check_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_broadcast_check_button", preferences_network_broadcast_check_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_broadcast_check_button);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_broadcast_check_button, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_network_ts_radiobutton = gtk_radio_button_new_with_label (preferences_network_protocol_group_group, _("TS"));
+  preferences_network_protocol_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (preferences_network_ts_radiobutton));
+  gtk_widget_ref (preferences_network_ts_radiobutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_ts_radiobutton", preferences_network_ts_radiobutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_ts_radiobutton);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_ts_radiobutton, 1, 2, 4, 5,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_SHRINK), 0, 0);
+
+  preferences_network_rtp_radiobutton = gtk_radio_button_new_with_label (preferences_network_protocol_group_group, _("RTP"));
+  preferences_network_protocol_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (preferences_network_rtp_radiobutton));
+  gtk_widget_ref (preferences_network_rtp_radiobutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_rtp_radiobutton", preferences_network_rtp_radiobutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_rtp_radiobutton);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_rtp_radiobutton, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_SHRINK), 0, 0);
+
+  preferences_network_http_radiobutton = gtk_radio_button_new_with_label (preferences_network_protocol_group_group, _("HTTP"));
+  preferences_network_protocol_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (preferences_network_http_radiobutton));
+  gtk_widget_ref (preferences_network_http_radiobutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_http_radiobutton", preferences_network_http_radiobutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_http_radiobutton);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_http_radiobutton, 1, 2, 6, 7,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_SHRINK), 0, 0);
+
+  preferences_network_protocol_label = gtk_label_new (_("Default protocol: "));
+  gtk_widget_ref (preferences_network_protocol_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_protocol_label", preferences_network_protocol_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_protocol_label);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_protocol_label, 0, 1, 4, 7,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_network_protocol_label), 0, 0.5);
+
+  preferences_network = gtk_label_new (_("Network"));
+  gtk_widget_ref (preferences_network);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network", preferences_network,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 2), preferences_network);
+
+  preferences_network_interface_table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_ref (preferences_network_interface_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_interface_table", preferences_network_interface_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_interface_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_network_interface_table);
+
+  preferences_interface_label = gtk_label_new (_("Default interface: "));
+  gtk_widget_ref (preferences_interface_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_interface_label", preferences_interface_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_interface_label);
+  gtk_table_attach (GTK_TABLE (preferences_network_interface_table), preferences_interface_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_interface_label), 0, 0.5);
+
+  preferences_network_interface_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (preferences_network_interface_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_interface_combo", preferences_network_interface_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_interface_combo);
+  gtk_table_attach (GTK_TABLE (preferences_network_interface_table), preferences_network_interface_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_network_interface_entry = gnome_entry_gtk_entry (GNOME_ENTRY (preferences_network_interface_combo));
+  gtk_widget_ref (preferences_network_interface_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_interface_entry", preferences_network_interface_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_interface_entry);
+
+  preferences_interface = gtk_label_new (_("Interface"));
+  gtk_widget_ref (preferences_interface);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_interface", preferences_interface,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_interface);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 3), preferences_interface);
+
+  preferences_video_table = gtk_table_new (7, 2, FALSE);
+  gtk_widget_ref (preferences_video_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_table", preferences_video_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_video_table);
+
+  preferences_video_output_label = gtk_label_new (_("Default output: "));
+  gtk_widget_ref (preferences_video_output_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_output_label", preferences_video_output_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_output_label);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_output_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_output_label), 0, 0.5);
+
+  preferences_video_height = gtk_label_new (_("Default height: "));
+  gtk_widget_ref (preferences_video_height);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_height", preferences_video_height,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_height);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_height, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_height), 0, 0.5);
+
+  preferences_video_height_spinbutton_adj = gtk_adjustment_new (576, 0, 1600, 1, 10, 10);
+  preferences_video_height_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_video_height_spinbutton_adj), 1, 0);
+  gtk_widget_ref (preferences_video_height_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_height_spinbutton", preferences_video_height_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_height_spinbutton);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_height_spinbutton, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_video_width_spinbutton_adj = gtk_adjustment_new (720, 100, 1600, 1, 10, 10);
+  preferences_video_width_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_video_width_spinbutton_adj), 1, 0);
+  gtk_widget_ref (preferences_video_width_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_width_spinbutton", preferences_video_width_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_width_spinbutton);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_width_spinbutton, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_video_width_label = gtk_label_new (_("Default width: "));
+  gtk_widget_ref (preferences_video_width_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_width_label", preferences_video_width_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_width_label);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_width_label, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_width_label), 0, 0.5);
+
+  preferences_video_output_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (preferences_video_output_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_output_combo", preferences_video_output_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_output_combo);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_output_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_video_output_entry = gnome_entry_gtk_entry (GNOME_ENTRY (preferences_video_output_combo));
+  gtk_widget_ref (preferences_video_output_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_output_entry", preferences_video_output_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_output_entry);
+
+  preferences_video_depth = gtk_label_new (_("Default depth:"));
+  gtk_widget_ref (preferences_video_depth);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_depth", preferences_video_depth,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_depth);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_depth, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_depth), 0, 0.5);
+
+  preferences_video_depth_optionmenu = gtk_option_menu_new ();
+  gtk_widget_ref (preferences_video_depth_optionmenu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_depth_optionmenu", preferences_video_depth_optionmenu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_depth_optionmenu);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_depth_optionmenu, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_video_depth_optionmenu_menu = gtk_menu_new ();
+  glade_menuitem = gtk_menu_item_new_with_label (_("15 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_video_depth_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("16 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_video_depth_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("32 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_video_depth_optionmenu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_video_depth_optionmenu), preferences_video_depth_optionmenu_menu);
+  gtk_option_menu_set_history (GTK_OPTION_MENU (preferences_video_depth_optionmenu), 1);
+
+  preferences_video_fullscreen_depth = gtk_label_new (_("Fullscreen depth:"));
+  gtk_widget_ref (preferences_video_fullscreen_depth);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_fullscreen_depth", preferences_video_fullscreen_depth,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_fullscreen_depth);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_fullscreen_depth, 0, 1, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_fullscreen_depth), 0, 0.5);
+
+  preferences_video_fullscreen_depth_optionmenu = gtk_option_menu_new ();
+  gtk_widget_ref (preferences_video_fullscreen_depth_optionmenu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_fullscreen_depth_optionmenu", preferences_video_fullscreen_depth_optionmenu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_fullscreen_depth_optionmenu);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_fullscreen_depth_optionmenu, 1, 2, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+  preferences_video_fullscreen_depth_optionmenu_menu = gtk_menu_new ();
+  glade_menuitem = gtk_menu_item_new_with_label (_("15 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_video_fullscreen_depth_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("16 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_video_fullscreen_depth_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("32 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_video_fullscreen_depth_optionmenu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_video_fullscreen_depth_optionmenu), preferences_video_fullscreen_depth_optionmenu_menu);
+  gtk_option_menu_set_history (GTK_OPTION_MENU (preferences_video_fullscreen_depth_optionmenu), 2);
+
+  preferences_video_fullscreen_checkbutton = gtk_check_button_new_with_label (_("Fullscreen on play"));
+  gtk_widget_ref (preferences_video_fullscreen_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_fullscreen_checkbutton", preferences_video_fullscreen_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_fullscreen_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_fullscreen_checkbutton, 0, 1, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_video_grayscale_checkbutton = gtk_check_button_new_with_label (_("Grayscale"));
+  gtk_widget_ref (preferences_video_grayscale_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_grayscale_checkbutton", preferences_video_grayscale_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_grayscale_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_grayscale_checkbutton, 1, 2, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_video_gamma_label = gtk_label_new (_("Gamma:"));
+  gtk_widget_ref (preferences_video_gamma_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_gamma_label", preferences_video_gamma_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_gamma_label);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_gamma_label, 0, 1, 5, 6,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_gamma_label), 0, 0.5);
+
+  spinbutton4_adj = gtk_adjustment_new (0, 0, 5, 0.1, 10, 10);
+  spinbutton4 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton4_adj), 1, 1);
+  gtk_widget_ref (spinbutton4);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "spinbutton4", spinbutton4,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (spinbutton4);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), spinbutton4, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  preferences_video = gtk_label_new (_("Video"));
+  gtk_widget_ref (preferences_video);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video", preferences_video,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 4), preferences_video);
+
+  preference_audio_table = gtk_table_new (5, 2, FALSE);
+  gtk_widget_ref (preference_audio_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preference_audio_table", preference_audio_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preference_audio_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preference_audio_table);
+
+  preferences_audio_spdif_checkbutton = gtk_check_button_new_with_label (_("Spdif output"));
+  gtk_widget_ref (preferences_audio_spdif_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_spdif_checkbutton", preferences_audio_spdif_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_spdif_checkbutton);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_spdif_checkbutton, 0, 2, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_audio_output_label = gtk_label_new (_("Default output: "));
+  gtk_widget_ref (preferences_audio_output_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_output_label", preferences_audio_output_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_output_label);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_output_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_output_label), 0, 0.5);
+
+  preferences_audio_output_combo = gnome_entry_new (NULL);
+  gtk_widget_ref (preferences_audio_output_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_output_combo", preferences_audio_output_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_output_combo);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_output_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_audio_output_entry = gnome_entry_gtk_entry (GNOME_ENTRY (preferences_audio_output_combo));
+  gtk_widget_ref (preferences_audio_output_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_output_entry", preferences_audio_output_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_output_entry);
+
+  preferences_audio_frequency_label = gtk_label_new (_("Frequency: "));
+  gtk_widget_ref (preferences_audio_frequency_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_frequency_label", preferences_audio_frequency_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_frequency_label);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_frequency_label, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_frequency_label), 0, 0.5);
+
+  preferences_audio_frequency_optionmenu = gtk_option_menu_new ();
+  gtk_widget_ref (preferences_audio_frequency_optionmenu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_frequency_optionmenu", preferences_audio_frequency_optionmenu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_frequency_optionmenu);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_frequency_optionmenu, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_audio_frequency_optionmenu_menu = gtk_menu_new ();
+  glade_menuitem = gtk_menu_item_new_with_label (_("48000 Hz"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_frequency_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("44100 Hz"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_frequency_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("32000 Hz"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_frequency_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("22050 Hz"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_frequency_optionmenu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_audio_frequency_optionmenu), preferences_audio_frequency_optionmenu_menu);
+
+  preferences_audio_quality_label = gtk_label_new (_("Quality: "));
+  gtk_widget_ref (preferences_audio_quality_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_quality_label", preferences_audio_quality_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_quality_label);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_quality_label, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_quality_label), 0, 0.5);
+
+  preferences_audio_quality_optionmenu = gtk_option_menu_new ();
+  gtk_widget_ref (preferences_audio_quality_optionmenu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_quality_optionmenu", preferences_audio_quality_optionmenu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_quality_optionmenu);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_quality_optionmenu, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_audio_quality_optionmenu_menu = gtk_menu_new ();
+  glade_menuitem = gtk_menu_item_new_with_label (_("16 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_quality_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("8 bits"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_quality_optionmenu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_audio_quality_optionmenu), preferences_audio_quality_optionmenu_menu);
+
+  preferences_audio_channels_label = gtk_label_new (_("Channels: "));
+  gtk_widget_ref (preferences_audio_channels_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_channels_label", preferences_audio_channels_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_channels_label);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_channels_label, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_channels_label), 0, 0.5);
+
+  preferences_audio_channels_optionmenu = gtk_option_menu_new ();
+  gtk_widget_ref (preferences_audio_channels_optionmenu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_channels_optionmenu", preferences_audio_channels_optionmenu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_channels_optionmenu);
+  gtk_table_attach (GTK_TABLE (preference_audio_table), preferences_audio_channels_optionmenu, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  preferences_audio_channels_optionmenu_menu = gtk_menu_new ();
+  glade_menuitem = gtk_menu_item_new_with_label (_("Mono"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_channels_optionmenu_menu), glade_menuitem);
+  glade_menuitem = gtk_menu_item_new_with_label (_("Stereo"));
+  gtk_widget_show (glade_menuitem);
+  gtk_menu_append (GTK_MENU (preferences_audio_channels_optionmenu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_audio_channels_optionmenu), preferences_audio_channels_optionmenu_menu);
+  gtk_option_menu_set_history (GTK_OPTION_MENU (preferences_audio_channels_optionmenu), 1);
+
+  preferences_audio = gtk_label_new (_("Audio"));
+  gtk_widget_ref (preferences_audio);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio", preferences_audio,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 5), preferences_audio);
+
+  preference_playlist_table = gtk_table_new (3, 1, FALSE);
+  gtk_widget_ref (preference_playlist_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preference_playlist_table", preference_playlist_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preference_playlist_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preference_playlist_table);
+
+  preferences_playlist_launch_on_startup_checkbutton = gtk_check_button_new_with_label (_("Launch on startup"));
+  gtk_widget_ref (preferences_playlist_launch_on_startup_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_launch_on_startup_checkbutton", preferences_playlist_launch_on_startup_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_playlist_launch_on_startup_checkbutton);
+  gtk_table_attach (GTK_TABLE (preference_playlist_table), preferences_playlist_launch_on_startup_checkbutton, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_playlist_loop_checkbutton = gtk_check_button_new_with_label (_("Loop on playlist end"));
+  gtk_widget_ref (preferences_playlist_loop_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_loop_checkbutton", preferences_playlist_loop_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_playlist_loop_checkbutton);
+  gtk_table_attach (GTK_TABLE (preference_playlist_table), preferences_playlist_loop_checkbutton, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  playlist_enqueue_as_default_checkbutton = gtk_check_button_new_with_label (_("Enqueue as default"));
+  gtk_widget_ref (playlist_enqueue_as_default_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "playlist_enqueue_as_default_checkbutton", playlist_enqueue_as_default_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_enqueue_as_default_checkbutton);
+  gtk_table_attach (GTK_TABLE (preference_playlist_table), playlist_enqueue_as_default_checkbutton, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_playlist = gtk_label_new (_("Playlist"));
+  gtk_widget_ref (preferences_playlist);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist", preferences_playlist,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_playlist);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 6), preferences_playlist);
+
+  preferences_misc_table = gtk_table_new (1, 1, FALSE);
+  gtk_widget_ref (preferences_misc_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_table", preferences_misc_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_misc_table);
+
+  preferences_misc_associated_filesframe = gtk_frame_new (_("Files associated with vlc"));
+  gtk_widget_ref (preferences_misc_associated_filesframe);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_associated_filesframe", preferences_misc_associated_filesframe,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_associated_filesframe);
+  gtk_table_attach (GTK_TABLE (preferences_misc_table), preferences_misc_associated_filesframe, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+  gtk_widget_set_sensitive (preferences_misc_associated_filesframe, FALSE);
+  gtk_frame_set_label_align (GTK_FRAME (preferences_misc_associated_filesframe), 0.05, 0.5);
+
+  preferences_misc_associated_files_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_ref (preferences_misc_associated_files_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_associated_files_vbox", preferences_misc_associated_files_vbox,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_associated_files_vbox);
+  gtk_container_add (GTK_CONTAINER (preferences_misc_associated_filesframe), preferences_misc_associated_files_vbox);
+
+  preferences_misc_mpeg_checkbutton = gtk_check_button_new_with_label (_("mpeg"));
+  gtk_widget_ref (preferences_misc_mpeg_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_mpeg_checkbutton", preferences_misc_mpeg_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_mpeg_checkbutton);
+  gtk_box_pack_start (GTK_BOX (preferences_misc_associated_files_vbox), preferences_misc_mpeg_checkbutton, FALSE, FALSE, 0);
+
+  preferences_misc_mp2_checkbutton = gtk_check_button_new_with_label (_("mp2"));
+  gtk_widget_ref (preferences_misc_mp2_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_mp2_checkbutton", preferences_misc_mp2_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_mp2_checkbutton);
+  gtk_box_pack_start (GTK_BOX (preferences_misc_associated_files_vbox), preferences_misc_mp2_checkbutton, FALSE, FALSE, 0);
+
+  preferences_misc_vob_checkbutton = gtk_check_button_new_with_label (_("vob"));
+  gtk_widget_ref (preferences_misc_vob_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_vob_checkbutton", preferences_misc_vob_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_vob_checkbutton);
+  gtk_box_pack_start (GTK_BOX (preferences_misc_associated_files_vbox), preferences_misc_vob_checkbutton, FALSE, FALSE, 0);
+
+  preferences_misc_ts_checkbutton = gtk_check_button_new_with_label (_("ts"));
+  gtk_widget_ref (preferences_misc_ts_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_ts_checkbutton", preferences_misc_ts_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_ts_checkbutton);
+  gtk_box_pack_start (GTK_BOX (preferences_misc_associated_files_vbox), preferences_misc_ts_checkbutton, FALSE, FALSE, 0);
+
+  preferences_misc = gtk_label_new (_("Misc"));
+  gtk_widget_ref (preferences_misc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc", preferences_misc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (preferences_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences_notebook), 7), preferences_misc);
+
+  preferences_dialog = GNOME_DIALOG (intf_preferences)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_preferences), "preferences_dialog", preferences_dialog);
+  gtk_widget_show (preferences_dialog);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (preferences_dialog), GTK_BUTTONBOX_END);
+  gtk_button_box_set_spacing (GTK_BUTTON_BOX (preferences_dialog), 8);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_preferences), GNOME_STOCK_BUTTON_OK);
+  preferences_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_preferences)->buttons)->data);
+  gtk_widget_ref (preferences_ok);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_ok", preferences_ok,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_ok);
+  GTK_WIDGET_SET_FLAGS (preferences_ok, GTK_CAN_DEFAULT);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_preferences), GNOME_STOCK_BUTTON_APPLY);
+  preferences_apply = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_preferences)->buttons)->data);
+  gtk_widget_ref (preferences_apply);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_apply", preferences_apply,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_apply);
+  GTK_WIDGET_SET_FLAGS (preferences_apply, GTK_CAN_DEFAULT);
+
+  gnome_dialog_append_button (GNOME_DIALOG (intf_preferences), GNOME_STOCK_BUTTON_CANCEL);
+  preferences_cancel = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_preferences)->buttons)->data);
+  gtk_widget_ref (preferences_cancel);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_cancel", preferences_cancel,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_cancel);
+  GTK_WIDGET_SET_FLAGS (preferences_cancel, GTK_CAN_DEFAULT);
+
+  gtk_signal_connect (GTK_OBJECT (preferences_ok), "clicked",
+                      GTK_SIGNAL_FUNC (on_preferences_ok_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (preferences_apply), "clicked",
+                      GTK_SIGNAL_FUNC (on_preferences_apply_clicked),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (preferences_cancel), "clicked",
+                      GTK_SIGNAL_FUNC (on_preferences_cancel_clicked),
+                      NULL);
+
+  return intf_preferences;
+}
+
index 6aed3c6dcfff229e4b14fbe36848e97822f14be3..a1322db0c49adb3f2d767927bc56097bd03eef4d 100644 (file)
@@ -7,6 +7,8 @@ GtkWidget* create_intf_popup (void);
 GtkWidget* create_intf_about (void);
 GtkWidget* create_intf_fileopen (void);
 GtkWidget* create_intf_modules (void);
-GtkWidget* create_intf_playlist (void);
 GtkWidget* create_intf_disc (void);
 GtkWidget* create_intf_network (void);
+GtkWidget* create_intf_playlist (void);
+GtkWidget* create_intf_jump (void);
+GtkWidget* create_intf_preferences (void);
index f19859ba2f39fe0f7819d472e1a2745233e88a46..f090d470b2e5e2a5bb47065b25bab3f93328c2e1 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gnome.c: Gnome interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gnome.c,v 1.35 2001/05/01 15:12:22 sam Exp $
+ * $Id: intf_gnome.c,v 1.36 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
 #include "interface.h"
 #include "intf_playlist.h"
 
+#include "video.h"
+#include "video_output.h"
+
 #include "gnome_callbacks.h"
+#include "gnome_playlist.h"
 #include "gnome_interface.h"
 #include "gnome_support.h"
 #include "intf_gnome.h"
@@ -69,17 +73,11 @@ static void intf_Run       ( intf_thread_t *p_intf );
 static gint GnomeManage    ( gpointer p_data );
 static gint GnomeLanguageMenus( gpointer, GtkWidget *, es_descriptor_t *, gint,
                               void (*pf_toggle)(GtkCheckMenuItem *, gpointer) );
-static gint GnomeChapterMenu  ( gpointer, GtkWidget *,
-                              void (*pf_toggle)(GtkCheckMenuItem *, gpointer) );
-static gint GnomeAngleMenu    ( gpointer, GtkWidget *,
-                              void (*pf_toggle)(GtkCheckMenuItem *, gpointer) );
 static gint GnomeTitleMenu    ( gpointer, GtkWidget *, 
                               void (*pf_toggle)(GtkCheckMenuItem *, gpointer) );
 static gint GnomeSetupMenu    ( intf_thread_t * p_intf );
 static void GnomeDisplayDate  ( GtkAdjustment *p_adj );
-static gint GnomeDiscModeManage( intf_thread_t * p_intf );
-static gint GnomeFileModeManage( intf_thread_t * p_intf );
-static gint GnomeNetworkModeManage( intf_thread_t * p_intf );
+static gint GnomeModeManage   ( intf_thread_t * p_intf );
 
 /*****************************************************************************
  * g_atexit: kludge to avoid the Gnome thread to segfault at exit
@@ -207,8 +205,7 @@ static void intf_Run( intf_thread_t *p_intf )
     /* Create some useful widgets that will certainly be used */
     p_intf->p_sys->p_window = create_intf_window( );
     p_intf->p_sys->p_popup = create_intf_popup( );
-    p_intf->p_sys->p_disc = create_intf_disc( );
-    p_intf->p_sys->p_network = create_intf_network( );
+    p_intf->p_sys->p_playlist = create_intf_playlist();
 
     /* Set the title of the main window */
     gtk_window_set_title( GTK_WINDOW(p_intf->p_sys->p_window),
@@ -218,12 +215,17 @@ static void intf_Run( intf_thread_t *p_intf )
     gtk_drag_dest_set( GTK_WIDGET( p_intf->p_sys->p_window ),
                        GTK_DEST_DEFAULT_ALL, target_table,
                        1, GDK_ACTION_COPY );
+    /* Accept file drops on the playlist window */
+    gtk_drag_dest_set( GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
+                            p_intf->p_sys->p_playlist ), "playlist_clist") ),
+                       GTK_DEST_DEFAULT_ALL, target_table,
+                       1, GDK_ACTION_COPY );
 
     /* Get the interface labels */
+    p_intf->p_sys->p_slider_frame = gtk_object_get_data(
+                      GTK_OBJECT( p_intf->p_sys->p_window ), "slider_frame" );
     #define P_LABEL( name ) GTK_LABEL( gtk_object_get_data( \
                          GTK_OBJECT( p_intf->p_sys->p_window ), name ) )
-    p_intf->p_sys->p_label_date = P_LABEL( "label_date" );
-    p_intf->p_sys->p_label_status = P_LABEL( "label_status" );
     p_intf->p_sys->p_label_title = P_LABEL( "label_title" );
     p_intf->p_sys->p_label_chapter = P_LABEL( "label_chapter" );
     #undef P_LABEL
@@ -240,9 +242,12 @@ static void intf_Run( intf_thread_t *p_intf )
 
     /* We don't create these ones yet because we perhaps won't need them */
     p_intf->p_sys->p_about = NULL;
-    p_intf->p_sys->p_playlist = NULL;
     p_intf->p_sys->p_modules = NULL;
     p_intf->p_sys->p_fileopen = NULL;
+    p_intf->p_sys->p_disc = NULL;
+    p_intf->p_sys->p_network = NULL;
+    p_intf->p_sys->p_preferences = NULL;
+    p_intf->p_sys->p_jump = NULL;
 
     /* Store p_intf to keep an eye on it */
     gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),
@@ -251,10 +256,7 @@ static void intf_Run( intf_thread_t *p_intf )
     gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_popup),
                          "p_intf", p_intf );
 
-    gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_disc),
-                         "p_intf", p_intf );
-
-    gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_network),
+    gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_playlist ),
                          "p_intf", p_intf );
 
     gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_adj),
@@ -310,55 +312,18 @@ static gint GnomeManage( gpointer p_data )
         p_intf->b_menu_change = 0;
     }
 
-    if( p_intf->p_input != NULL )
+    /* update the playlist */
+    GnomePlayListManage( p_intf ); 
+
+    if( p_intf->p_input != NULL && !p_intf->b_die/*&& !p_intf->p_input->b_die*/ )
     {
-        GtkWidget *     p_slider;
         float           newvalue;
 
 //        vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
         /* New input or stream map change */
         if( p_intf->p_input->stream.b_changed || p_intf->p_sys->b_mode_changed )
         {
-            switch( p_intf->p_input->stream.i_method & 0xf0 )
-            {
-                case INPUT_METHOD_FILE:
-                    GnomeFileModeManage( p_intf );
-                    break;
-                case INPUT_METHOD_DISC:
-                    GnomeDiscModeManage( p_intf );
-                    break;
-                case INPUT_METHOD_NETWORK:
-                    GnomeNetworkModeManage( p_intf );
-                    break;
-                default:
-                    intf_ErrMsg( "intf error: can't determine input method" );
-                    break;
-            }
-            p_slider = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                                   p_intf->p_sys->p_window ), "slider" ) );
-
-            if( p_intf->p_input->stream.b_seekable )
-            {
-                gtk_widget_show( GTK_WIDGET( p_slider ) );
-            }
-            else
-            {
-                gtk_widget_hide( GTK_WIDGET( p_slider ) );
-            }
-
-            /* get ready for menu regeneration */
-            p_intf->p_sys->b_title_update = 1;
-            p_intf->p_sys->b_chapter_update = 1;
-            p_intf->p_sys->b_angle_update = 1;
-            p_intf->p_sys->b_audio_update = 1;
-            p_intf->p_sys->b_spu_update = 1;
-            p_intf->p_sys->i_part = 0;
-
-            p_intf->p_input->stream.b_changed = 0;
-            p_intf->p_sys->b_mode_changed = 0;
-            intf_WarnMsg( 2, 
-                          "intf info: menus refreshed as stream has changed" );
-
+            GnomeModeManage( p_intf );
         }
 
 //        vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
@@ -423,6 +388,119 @@ static gint GnomeManage( gpointer p_data )
 #undef p_intf
 }
 
+/*****************************************************************************
+ * GnomeRadioMenu: update interactive menus of the interface
+ *****************************************************************************
+ * Sets up menus with information from input
+ * Warning: since this function is designed to be called by management
+ * function, the interface lock has to be taken
+ *****************************************************************************/
+static gint GnomeRadioMenu( intf_thread_t * p_intf,
+                            GtkWidget * p_root, GSList * p_menu_group,
+                            char * psz_item_name,
+                            int i_nb, int i_selected,
+                     void( *pf_toggle )( GtkCheckMenuItem *, gpointer ) )
+{
+    char                psz_name[ GNOME_MENU_LABEL_SIZE ];
+    GtkWidget *         p_menu;
+    GtkWidget *         p_submenu;
+    GtkWidget *         p_item_group;
+    GtkWidget *         p_item;
+    GtkWidget *         p_item_selected;
+    GSList *            p_group;
+    gint                i_item;
+
+    /* temporary hack to avoid blank menu when an open menu is removed */
+    if( GTK_MENU_ITEM(p_root)->submenu != NULL )
+    {
+        gtk_menu_popdown( GTK_MENU( GTK_MENU_ITEM(p_root)->submenu ) );
+    }
+    /* removes previous menu */
+    gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_root ) );
+    gtk_widget_set_sensitive( p_root, FALSE );
+
+    p_item_group = NULL;
+    p_submenu = NULL;
+    p_item_selected = NULL;
+    p_group = p_menu_group;
+
+    p_menu = gtk_menu_new();
+
+    for( i_item = 0 ; i_item < i_nb ; i_item++ )
+    {
+        /* we group chapters in packets of ten for small screens */
+        if( ( i_item % 10 == 0 ) && ( i_nb > 20 ) )
+        {
+            if( i_item != 0 )
+            {
+                gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_item_group ),
+                                           p_submenu );
+                gtk_menu_append( GTK_MENU( p_menu ), p_item_group );
+            }
+
+            snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
+                      "%d - %d", i_item + 1, i_item + 10);
+            psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
+            p_item_group = gtk_menu_item_new_with_label( psz_name );
+            gtk_widget_show( p_item_group );
+            p_submenu = gtk_menu_new();
+        }
+
+        snprintf( psz_name, GNOME_MENU_LABEL_SIZE, "%s %d",
+                  psz_item_name, i_item + 1 );
+        psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
+
+        p_item = gtk_radio_menu_item_new_with_label( p_group, psz_name );
+        p_group = gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_item ) );
+
+        if( i_selected == i_item + 1 )
+        {
+            p_item_selected = p_item;
+        }
+        
+        gtk_widget_show( p_item );
+
+        /* setup signal hanling */
+        gtk_signal_connect( GTK_OBJECT( p_item ),
+                            "toggled",
+                            GTK_SIGNAL_FUNC( pf_toggle ),
+                            (gpointer)(i_item + 1) );
+
+        if( i_nb > 20 )
+        {
+            gtk_menu_append( GTK_MENU( p_submenu ), p_item );
+        }
+        else
+        {
+            gtk_menu_append( GTK_MENU( p_menu ), p_item );
+        }
+    }
+
+    if( i_nb > 20 )
+    {
+        gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_item_group ), p_submenu );
+        gtk_menu_append( GTK_MENU( p_menu ), p_item_group );
+    }
+
+    /* link the new menu to the title menu item */
+    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_root ), p_menu );
+
+    /* toggle currently selected chapter */
+    if( p_item_selected != NULL )
+    {
+        gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_selected ),
+                                        TRUE );
+    }
+
+    /* be sure that menu is sensitive, if there are several items */
+    if( i_nb > 0 )
+    {
+        gtk_widget_set_sensitive( p_root, TRUE );
+    }
+
+    return TRUE;
+}
+
 /*****************************************************************************
  * GnomeLanguageMenus: update interactive menus of the interface
  *****************************************************************************
@@ -453,6 +531,11 @@ static gint GnomeLanguageMenus( gpointer          p_data,
     /* cast */
     p_intf = (intf_thread_t *)p_data;
 
+    /* temporary hack to avoid blank menu when an open menu is removed */
+    if( GTK_MENU_ITEM(p_root)->submenu != NULL )
+    {
+        gtk_menu_popdown( GTK_MENU( GTK_MENU_ITEM(p_root)->submenu ) );
+    }
     /* removes previous menu */
     gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_root ) );
     gtk_widget_set_sensitive( p_root, FALSE );
@@ -463,7 +546,7 @@ static gint GnomeLanguageMenus( gpointer          p_data,
     p_menu = gtk_menu_new();
 
     /* special case for "off" item */
-    snprintf( psz_name, GNOME_MENU_LABEL_SIZE, "Off" );
+    snprintf( psz_name, GNOME_MENU_LABEL_SIZE, "None" );
     psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
 
     p_item = gtk_radio_menu_item_new_with_label( p_group, psz_name );
@@ -542,193 +625,7 @@ static gint GnomeLanguageMenus( gpointer          p_data,
 
     return TRUE;
 }
-
-/*****************************************************************************
- * GnomeAngleMenu: generate angle menu for current title
- *****************************************************************************/
-static gint GnomeAngleMenu( gpointer p_data, GtkWidget * p_angle,
-                        void(*pf_toggle)( GtkCheckMenuItem *, gpointer ) )
-{
-    intf_thread_t *     p_intf;
-    char                psz_name[ GNOME_MENU_LABEL_SIZE ];
-    GtkWidget *         p_angle_menu;
-    GSList *            p_angle_group;
-    GtkWidget *         p_item;
-    GtkWidget *         p_item_active;
-    gint                i_angle;
-
-    /* cast */
-    p_intf = (intf_thread_t*)p_data;
-
-    /* removes previous menu */
-    gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_angle ) );
-    gtk_widget_set_sensitive( p_angle, FALSE );
-
-    p_angle_menu = gtk_menu_new();;
-    p_angle_group = NULL;
-    p_item = NULL;
-    p_item_active = NULL;
-
-    for( i_angle = 0 ;
-         i_angle < p_intf->p_input->stream.p_selected_area->i_angle_nb ;
-         i_angle++ )
-    {
-        snprintf( psz_name, GNOME_MENU_LABEL_SIZE, "Angle %d", i_angle + 1 );
-        psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
-
-        p_item = gtk_radio_menu_item_new_with_label( p_angle_group,
-                                                     psz_name );
-        p_angle_group =
-            gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_item ) );
-
-        if( p_intf->p_input->stream.p_selected_area->i_angle ==
-                                                            ( i_angle + 1 ) )
-        {
-            p_item_active = p_item;
-        }
-
-        gtk_widget_show( p_item );
-
-        /* setup signal hanling */
-        gtk_signal_connect( GTK_OBJECT( p_item ),
-                        "toggled",
-                        GTK_SIGNAL_FUNC( pf_toggle ),
-                        (gpointer)(i_angle + 1) );
-
-        gtk_menu_append( GTK_MENU( p_angle_menu ), p_item );
-    }
-
-    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_angle ), p_angle_menu );
-
-    if( p_item_active != NULL )
-    {
-        gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_active ),
-                                        TRUE );
-    }
-
-    /* be sure that menu is sensitive if non empty */
-    if( p_intf->p_input->stream.p_selected_area->i_angle_nb > 1 )
-    {
-        gtk_widget_set_sensitive( p_angle, TRUE );
-    }
-
-    return TRUE;
-}
-
-/*****************************************************************************
- * GnomeChapterMenu: generate chapter menu for current title
- *****************************************************************************/
-static gint GnomeChapterMenu( gpointer p_data, GtkWidget * p_chapter,
-                        void(*pf_toggle )( GtkCheckMenuItem *, gpointer ) )
-{
-    intf_thread_t *     p_intf;
-    char                psz_name[ GNOME_MENU_LABEL_SIZE ];
-    GtkWidget *         p_chapter_menu;
-    GtkWidget *         p_chapter_submenu;
-    GtkWidget *         p_menu_item;
-    GtkWidget *         p_item;
-    GtkWidget *         p_item_selected;
-    GSList *            p_chapter_group;
-    gint                i_title;
-    gint                i_chapter;
-    gint                i_nb;
-
-    /* Cast */
-    p_intf = (intf_thread_t*)p_data;
-
-    /* Removes previous menu */
-    gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_chapter ) );
-    gtk_widget_set_sensitive( p_chapter, FALSE );
-
-    p_chapter_submenu = NULL;
-    p_chapter_group = NULL;
-    p_item_selected = NULL;
-    p_menu_item = NULL;
-
-    i_title = p_intf->p_input->stream.p_selected_area->i_id;
-    p_chapter_menu = gtk_menu_new();
-    i_nb = p_intf->p_input->stream.pp_areas[i_title]->i_part_nb;
-
-    for( i_chapter = 0 ; i_chapter < i_nb ; i_chapter++ )
-    {
-        /* we group chapters in packets of ten for small screens */
-        if( ( i_chapter % 10 == 0 ) && ( i_nb > 20 ) )
-        {
-            if( i_chapter != 0 )
-            {
-                gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_menu_item ),
-                                           p_chapter_submenu );
-                gtk_menu_append( GTK_MENU( p_chapter_menu ), p_menu_item );
-            }
-
-            snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
-                      "%d - %d", i_chapter + 1, i_chapter + 10);
-            psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
-            p_menu_item = gtk_menu_item_new_with_label( psz_name );
-            gtk_widget_show( p_menu_item );
-            p_chapter_submenu = gtk_menu_new();
-        }
-
-        snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
-                  "Chapter %d", i_chapter + 1 );
-        psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
-
-        p_item = gtk_radio_menu_item_new_with_label( p_chapter_group,
-                                                     psz_name );
-        p_chapter_group =
-            gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_item ) );
-
-        if( p_intf->p_input->stream.pp_areas[i_title]->i_part
-                     == i_chapter + 1 )
-        {
-            p_item_selected = p_item;
-        }
-        
-        gtk_widget_show( p_item );
-
-        /* setup signal hanling */
-        gtk_signal_connect( GTK_OBJECT( p_item ),
-                        "toggled",
-                        GTK_SIGNAL_FUNC( pf_toggle ),
-                        (gpointer)(i_chapter + 1) );
-
-        if( i_nb > 20 )
-        {
-            gtk_menu_append( GTK_MENU( p_chapter_submenu ), p_item );
-        }
-        else
-        {
-            gtk_menu_append( GTK_MENU( p_chapter_menu ), p_item );
-        }
-    }
-
-    if( i_nb > 20 )
-    {
-        gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_menu_item ),
-                                   p_chapter_submenu );
-        gtk_menu_append( GTK_MENU( p_chapter_menu ), p_menu_item );
-    }
-
-    /* link the new menu to the title menu item */
-    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_chapter ),
-                               p_chapter_menu );
-
-    /* toggle currently selected chapter */
-    if( p_item_selected != NULL )
-    {
-        gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_selected ),
-                                        TRUE );
-    }
-
-    /* be sure that chapter menu is sensitive, if there are several items */
-    if( p_intf->p_input->stream.pp_areas[i_title]->i_part_nb > 1 )
-    {
-        gtk_widget_set_sensitive( p_chapter, TRUE );
-    }
-
-    return TRUE;
-}
-
+#if 1
 /*****************************************************************************
  * GnomeTitleMenu: sets menus for titles and chapters selection
  *****************************************************************************
@@ -761,6 +658,11 @@ static gint GnomeTitleMenu( gpointer       p_data,
     /* cast */
     p_intf = (intf_thread_t*)p_data;
 
+    /* temporary hack to avoid blank menu when an open menu is removed */
+    if( GTK_MENU_ITEM(p_navigation)->submenu != NULL )
+    {
+        gtk_menu_popdown( GTK_MENU( GTK_MENU_ITEM(p_navigation)->submenu ) );
+    }
     /* removes previous menu */
     gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_navigation ) );
     gtk_widget_set_sensitive( p_navigation, FALSE );
@@ -799,7 +701,7 @@ static gint GnomeTitleMenu( gpointer       p_data,
         snprintf( psz_name, GNOME_MENU_LABEL_SIZE, "Title %d (%d)", i_title,
                   p_intf->p_input->stream.pp_areas[i_title]->i_part_nb );
         psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
-
+#if 0
         if( pf_toggle == on_menubar_title_toggle )
         {
             p_title_item = gtk_radio_menu_item_new_with_label( p_title_group,
@@ -826,9 +728,11 @@ static gint GnomeTitleMenu( gpointer       p_data,
             }
         }
         else
+#endif
         {
-    
             p_title_item = gtk_menu_item_new_with_label( psz_name );
+
+#if 1    
             p_chapter_menu = gtk_menu_new();
             i_chapter_nb =
                     p_intf->p_input->stream.pp_areas[i_title]->i_part_nb;
@@ -907,6 +811,15 @@ static gint GnomeTitleMenu( gpointer       p_data,
                 /* be sure that menu is sensitive */
                 gtk_widget_set_sensitive( p_navigation, TRUE );
             }
+#else
+        GnomeRadioMenu( p_intf, p_title_item, p_chapter_group, "Chapter",
+                        p_intf->p_input->stream.pp_areas[i_title]->i_part_nb,
+                        i_title * 100,
+                        p_intf->p_input->stream.p_selected_area->i_part +
+                            p_intf->p_input->stream.p_selected_area->i_id *100,
+                        pf_toggle );
+
+#endif
         }
         gtk_widget_show( p_title_item );
 
@@ -938,10 +851,17 @@ static gint GnomeTitleMenu( gpointer       p_data,
         gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_active ),
                                         TRUE );
     }
+#if 0
+    if( p_intf->p_input->stream.i_area_nb > 1 )
+    {
+        /* be sure that menu is sensitive */
+        gtk_widget_set_sensitive( p_navigation, TRUE );
+    }
+#endif
 
     return TRUE;
 }
-
+#endif
 /*****************************************************************************
  * GnomeSetupMenu: function that generates title/chapter/audio/subpic
  * menus with help from preceding functions
@@ -965,7 +885,10 @@ static gint GnomeSetupMenu( intf_thread_t * p_intf )
 
         p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
                             p_intf->p_sys->p_window ), "menubar_title" ) );
-        GnomeTitleMenu( p_intf, p_menubar_menu, on_menubar_title_toggle );
+        GnomeRadioMenu( p_intf, p_menubar_menu, NULL, "Title",
+                        p_intf->p_input->stream.i_area_nb - 1,
+                        p_intf->p_input->stream.p_selected_area->i_id,
+                        on_menubar_title_toggle );
 
         snprintf( psz_title, 4, "%d",
                   p_intf->p_input->stream.p_selected_area->i_id );
@@ -982,10 +905,20 @@ static gint GnomeSetupMenu( intf_thread_t * p_intf )
         p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
                              p_intf->p_sys->p_popup ), "popup_navigation" ) );
         GnomeTitleMenu( p_intf, p_popup_menu, on_popup_navigation_toggle );
-     
+#if 0
+        GnomeRadioMenu( p_intf, p_menubar_menu, NULL, "Title",
+                        p_intf->p_input->stream.i_area_nb - 1,
+                        p_intf->p_input->stream.p_selected_area->i_id,
+                        on_menubar_chapter_toggle );
+#endif
+
         p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
                              p_intf->p_sys->p_window ), "menubar_chapter" ) );
-        GnomeChapterMenu( p_intf, p_menubar_menu, on_menubar_chapter_toggle );
+        GnomeRadioMenu( p_intf, p_menubar_menu, NULL, "Chapter",
+                        p_intf->p_input->stream.p_selected_area->i_part_nb,
+                        p_intf->p_input->stream.p_selected_area->i_part,
+                        on_menubar_chapter_toggle );
+
 
         snprintf( psz_chapter, 4, "%d", 
                   p_intf->p_input->stream.p_selected_area->i_part );
@@ -1002,11 +935,17 @@ static gint GnomeSetupMenu( intf_thread_t * p_intf )
     {
         p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
                              p_intf->p_sys->p_window ), "menubar_angle" ) );
-        GnomeAngleMenu( p_intf, p_menubar_menu, on_menubar_angle_toggle );
+        GnomeRadioMenu( p_intf, p_menubar_menu, NULL, "Angle",
+                        p_intf->p_input->stream.p_selected_area->i_angle_nb,
+                        p_intf->p_input->stream.p_selected_area->i_angle,
+                        on_menubar_angle_toggle );
 
         p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
                              p_intf->p_sys->p_popup ), "popup_angle" ) );
-        GnomeAngleMenu( p_intf, p_popup_menu, on_popup_angle_toggle );
+        GnomeRadioMenu( p_intf, p_popup_menu, NULL, "Angle",
+                        p_intf->p_input->stream.p_selected_area->i_angle_nb,
+                        p_intf->p_input->stream.p_selected_area->i_angle,
+                        on_popup_angle_toggle );
 
         p_intf->p_sys->b_angle_update = 0;
     }
@@ -1064,6 +1003,22 @@ static gint GnomeSetupMenu( intf_thread_t * p_intf )
         p_intf->p_sys->b_spu_update = 0;
     }
 
+    /* handle fullscreen check items */
+    if( p_vout_bank->i_count )
+    {
+        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
+                          p_intf->p_sys->p_window ), "menubar_fullscreen" ) );
+    
+        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                     p_intf->p_sys->p_popup ), "popup_fullscreen" ) );
+
+        gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_menubar_menu ),
+                                        p_vout_bank->pp_vout[0]->b_fullscreen );
+        gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_popup_menu ),
+                                        p_vout_bank->pp_vout[0]->b_fullscreen );
+
+    }
+
     return TRUE;
 }
 
@@ -1086,7 +1041,7 @@ void GnomeDisplayDate( GtkAdjustment *p_adj )
 
         vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
 
-        gtk_label_set_text( p_intf->p_sys->p_label_date,
+        gtk_frame_set_label( GTK_FRAME( p_intf->p_sys->p_slider_frame ),
                             input_OffsetToTime( p_intf->p_input, psz_time,
                                    ( p_area->i_size * p_adj->value ) / 100 ) );
 
@@ -1097,14 +1052,20 @@ void GnomeDisplayDate( GtkAdjustment *p_adj )
 
 
 /*****************************************************************************
- * GnomeDiscModeManage
+ * GnomeModeManage
  *****************************************************************************/
-static gint GnomeDiscModeManage( intf_thread_t * p_intf )
+static gint GnomeModeManage( intf_thread_t * p_intf )
 {
     GtkWidget *     p_dvd_box;
     GtkWidget *     p_file_box;
     GtkWidget *     p_network_box;
+    GtkWidget *     p_slider;
+    GtkWidget *     p_label;
+    boolean_t       b_control;
 
+#define GETWIDGET( ptr, name ) GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( \
+                           p_intf->p_sys->ptr ) , ( name ) ) )
+    /* hide all boxes */
     p_file_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
                  p_intf->p_sys->p_window ), "file_box" ) );
     gtk_widget_hide( GTK_WIDGET( p_file_box ) );
@@ -1113,78 +1074,78 @@ static gint GnomeDiscModeManage( intf_thread_t * p_intf )
                  p_intf->p_sys->p_window ), "network_box" ) );
     gtk_widget_hide( GTK_WIDGET( p_network_box ) );
 
-    p_dvd_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                 p_intf->p_sys->p_window ), "dvd_box" ) );
-    gtk_widget_show( GTK_WIDGET( p_dvd_box ) );
-
-    gtk_label_set_text( p_intf->p_sys->p_label_status,
-                        "Status: playing DVD" );
-
-    return TRUE;
-}
-
-/*****************************************************************************
- * GnomeFileModeManage
- *****************************************************************************/
-static gint GnomeFileModeManage( intf_thread_t * p_intf )
-{
-    GtkWidget *     p_dvd_box;
-    GtkWidget *     p_file_box;
-    GtkWidget *     p_network_box;
-    char *          psz_name;
-
-    p_network_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                 p_intf->p_sys->p_window ), "network_box" ) );
-    gtk_widget_hide( GTK_WIDGET( p_network_box ) );
-
-    p_dvd_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                 p_intf->p_sys->p_window ), "dvd_box" ) );
-    gtk_widget_hide( GTK_WIDGET( p_dvd_box ) );
-
-    p_file_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                 p_intf->p_sys->p_window ), "file_box" ) );
-    gtk_widget_show( GTK_WIDGET( p_file_box ) );
-
-#if 1
-//    psz_name = malloc( 16 + strlen( p_intf->p_input->p_source ) );
-//    sprintf( psz_name, "Status: playing %s", p_intf->p_input->p_source );
-
-    psz_name = strdup( p_intf->p_input->p_source );
-
-    gtk_label_set_text( p_intf->p_sys->p_label_status, psz_name );
-
-    free( psz_name );
-#else
-    gtk_label_set_text( p_intf->p_sys->p_label_status,
-                        "Status: foo" );
-#endif
-
-    return TRUE;
-}
-
-/*****************************************************************************
- * GnomeNetworkModeManage
- *****************************************************************************/
-static gint GnomeNetworkModeManage( intf_thread_t * p_intf )
-{
-    GtkWidget *     p_dvd_box;
-    GtkWidget *     p_file_box;
-    GtkWidget *     p_network_box;
-
     p_dvd_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
                  p_intf->p_sys->p_window ), "dvd_box" ) );
     gtk_widget_hide( GTK_WIDGET( p_dvd_box ) );
 
-    p_file_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                 p_intf->p_sys->p_window ), "file_box" ) );
-    gtk_widget_hide( GTK_WIDGET( p_file_box ) );
+    /* show the box related to current input mode */
+    switch( p_intf->p_input->stream.i_method & 0xf0 )
+    {
+        case INPUT_METHOD_FILE:
+            gtk_widget_show( GTK_WIDGET( p_file_box ) );
+            p_label = gtk_object_get_data( GTK_OBJECT(
+                        p_intf->p_sys->p_window ),
+                        "label_status" );
+            gtk_label_set_text( GTK_LABEL( p_label ),
+                                p_intf->p_input->p_source );
+            break;
+        case INPUT_METHOD_DISC:
+            gtk_widget_show( GTK_WIDGET( p_dvd_box ) );
+            break;
+        case INPUT_METHOD_NETWORK:
+            gtk_widget_show( GTK_WIDGET( p_network_box ) );
+            p_label = gtk_object_get_data( GTK_OBJECT(
+                        p_intf->p_sys->p_window ),
+                        "network_address_label" );
+            gtk_label_set_text( GTK_LABEL( p_label ),
+                                p_intf->p_input->p_source );
+            break;
+        default:
+            intf_ErrMsg( "intf error: can't determine input method" );
+            break;
+    }
 
-    p_network_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                 p_intf->p_sys->p_window ), "network_box" ) );
-    gtk_widget_show( GTK_WIDGET( p_network_box ) );
+    p_slider = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
+                           p_intf->p_sys->p_window ), "slider_handlebox" ) );
 
-    gtk_label_set_text( p_intf->p_sys->p_label_status,
-                        "Status: waiting for stream" );
+    /* slider for seekable streams */
+    if( p_intf->p_input->stream.b_seekable )
+    {
+        gtk_widget_show( GTK_WIDGET( p_slider ) );
+    }
+    else
+    {
+        gtk_widget_hide( GTK_WIDGET( p_slider ) );
+    }
 
+    /* control buttons for free pace streams */
+    b_control = p_intf->p_input->stream.b_pace_control;
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_back"), FALSE );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_stop"), FALSE );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_play"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_pause"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_slow"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_fast"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_back"), FALSE );
+    gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_stop"), FALSE );
+    gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_play"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_pause"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_slow"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_fast"), b_control );
+
+    /* get ready for menu regeneration */
+    p_intf->p_sys->b_title_update = 1;
+    p_intf->p_sys->b_chapter_update = 1;
+    p_intf->p_sys->b_angle_update = 1;
+    p_intf->p_sys->b_audio_update = 1;
+    p_intf->p_sys->b_spu_update = 1;
+    p_intf->p_sys->i_part = 0;
+
+    p_intf->p_input->stream.b_changed = 0;
+    p_intf->p_sys->b_mode_changed = 0;
+    intf_WarnMsg( 2, 
+                  "intf info: menus refreshed as stream has changed" );
+
+#undef GETWIDGET
     return TRUE;
 }
index a1fab17ebb0638d69bc1396a62d7e7c4e67eba6f..3f50231940f9d9ea450946fbf0ff3bd33b5cf3df 100644 (file)
@@ -40,7 +40,7 @@
   <modal>False</modal>
   <allow_shrink>False</allow_shrink>
   <allow_grow>True</allow_grow>
-  <auto_shrink>False</auto_shrink>
+  <auto_shrink>True</auto_shrink>
   <enable_layout_config>True</enable_layout_config>
 
   <widget>
@@ -72,6 +72,9 @@
       <widget>
        <class>GtkMenuBar</class>
        <name>menubar</name>
+       <border_width>2</border_width>
+       <width>500</width>
+       <height>32</height>
        <shadow_type>GTK_SHADOW_NONE</shadow_type>
 
        <widget>
            <class>GtkMenu</class>
            <name>menubar_view_menu</name>
 
+           <widget>
+             <class>GtkCheckMenuItem</class>
+             <name>menubar_fullscreen</name>
+             <signal>
+               <name>activate</name>
+               <handler>on_menubar_fullscreen_activate</handler>
+               <last_modification_time>Wed, 02 May 2001 23:35:36 GMT</last_modification_time>
+             </signal>
+             <label>_Fullscreen</label>
+             <active>False</active>
+             <always_show_toggle>True</always_show_toggle>
+           </widget>
+
+           <widget>
+             <class>GtkMenuItem</class>
+             <name>separator9</name>
+             <right_justify>False</right_justify>
+           </widget>
+
            <widget>
              <class>GtkMenuItem</class>
              <name>menubar_title</name>
            <widget>
              <class>GtkPixmapMenuItem</class>
              <name>menubar_playlist</name>
-             <sensitive>False</sensitive>
              <tooltip>Open the playlist window</tooltip>
              <signal>
                <name>activate</name>
            <widget>
              <class>GtkPixmapMenuItem</class>
              <name>menubar_preferences</name>
-             <sensitive>False</sensitive>
              <signal>
                <name>activate</name>
                <handler>on_menubar_preferences_activate</handler>
     <widget>
       <class>GnomeDockItem</class>
       <name>dockitem_toolbar</name>
+      <border_width>2</border_width>
       <placement>GNOME_DOCK_TOP</placement>
       <band>1</band>
       <position>0</position>
            <handler>on_toolbar_open_clicked</handler>
            <last_modification_time>Sun, 04 Mar 2001 21:01:24 GMT</last_modification_time>
          </signal>
-         <label>Open</label>
+         <label>File</label>
          <stock_pixmap>GNOME_STOCK_PIXMAP_OPEN</stock_pixmap>
        </widget>
 
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_play</name>
+         <sensitive>False</sensitive>
          <tooltip>Play Stream</tooltip>
          <signal>
            <name>clicked</name>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_pause</name>
+         <sensitive>False</sensitive>
          <tooltip>Pause Stream</tooltip>
          <signal>
            <name>clicked</name>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_slow</name>
+         <sensitive>False</sensitive>
          <tooltip>Play Slower</tooltip>
          <signal>
            <name>clicked</name>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_fast</name>
+         <sensitive>False</sensitive>
          <tooltip>Play Faster</tooltip>
          <signal>
            <name>clicked</name>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_playlist</name>
-         <sensitive>False</sensitive>
          <tooltip>Open Playlist</tooltip>
          <signal>
            <name>clicked</name>
     <widget>
       <class>GtkVBox</class>
       <child_name>GnomeDock:contents</child_name>
-      <name>vbox2</name>
+      <name>vbox8</name>
       <homogeneous>False</homogeneous>
       <spacing>0</spacing>
 
       <widget>
-       <class>GtkHBox</class>
-       <name>hbox4</name>
-       <width>650</width>
-       <homogeneous>True</homogeneous>
-       <spacing>0</spacing>
+       <class>GtkHandleBox</class>
+       <name>slider_handlebox</name>
+       <visible>False</visible>
+       <shadow_type>GTK_SHADOW_OUT</shadow_type>
+       <handle_position>GTK_POS_LEFT</handle_position>
+       <snap_edge>GTK_POS_TOP</snap_edge>
        <child>
          <padding>0</padding>
          <expand>True</expand>
        </child>
 
        <widget>
-         <class>GtkLabel</class>
-         <name>label_date</name>
+         <class>GtkFrame</class>
+         <name>slider_frame</name>
          <label>-:--:--</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
-
-       <widget>
-         <class>GtkLabel</class>
-         <name>label_status</name>
-         <width>350</width>
-         <label>Status: foo</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
-       </widget>
+         <label_xalign>0.05</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
 
-       <widget>
-         <class>GtkLabel</class>
-         <name>label_bar</name>
-         <label>Bar: baz</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-         <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>False</fill>
-         </child>
+         <widget>
+           <class>GtkHScale</class>
+           <name>slider</name>
+           <width>500</width>
+           <height>15</height>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>button_press_event</name>
+             <handler>on_slider_button_press_event</handler>
+             <last_modification_time>Wed, 14 Mar 2001 13:46:55 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>button_release_event</name>
+             <handler>on_slider_button_release_event</handler>
+             <last_modification_time>Wed, 14 Mar 2001 13:46:59 GMT</last_modification_time>
+           </signal>
+           <draw_value>False</draw_value>
+           <value_pos>GTK_POS_TOP</value_pos>
+           <digits>3</digits>
+           <policy>GTK_UPDATE_CONTINUOUS</policy>
+           <value>0</value>
+           <lower>0</lower>
+           <upper>100</upper>
+           <step>1</step>
+           <page>6.25</page>
+           <page_size>0</page_size>
+         </widget>
        </widget>
       </widget>
 
-      <widget>
-       <class>GtkHScale</class>
-       <name>slider</name>
-       <can_focus>True</can_focus>
-       <signal>
-         <name>button_press_event</name>
-         <handler>on_slider_button_press_event</handler>
-         <last_modification_time>Wed, 14 Mar 2001 13:46:55 GMT</last_modification_time>
-       </signal>
-       <signal>
-         <name>button_release_event</name>
-         <handler>on_slider_button_release_event</handler>
-         <last_modification_time>Wed, 14 Mar 2001 13:46:59 GMT</last_modification_time>
-       </signal>
-       <draw_value>False</draw_value>
-       <value_pos>GTK_POS_TOP</value_pos>
-       <digits>3</digits>
-       <policy>GTK_UPDATE_CONTINUOUS</policy>
-       <value>0</value>
-       <lower>0</lower>
-       <upper>100</upper>
-       <step>1</step>
-       <page>6.25</page>
-       <page_size>0</page_size>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
-      </widget>
-
       <widget>
        <class>GtkHBox</class>
        <name>file_box</name>
+       <width>500</width>
+       <height>24</height>
        <homogeneous>False</homogeneous>
        <spacing>0</spacing>
        <child>
 
        <widget>
          <class>GtkLabel</class>
-         <name>label_file</name>
-         <height>24</height>
-         <label>Vlc File Mode</label>
+         <name>label_status</name>
+         <label>Playlist empty</label>
          <justify>GTK_JUSTIFY_CENTER</justify>
          <wrap>False</wrap>
          <xalign>0.5</xalign>
       <widget>
        <class>GtkHBox</class>
        <name>dvd_box</name>
+       <width>500</width>
        <height>24</height>
        <visible>False</visible>
        <homogeneous>False</homogeneous>
          <fill>True</fill>
        </child>
 
+       <widget>
+         <class>GtkLabel</class>
+         <name>label21</name>
+         <label>DVD  </label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+         <child>
+           <padding>0</padding>
+           <expand>True</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+
        <widget>
          <class>GtkHBox</class>
          <name>title_chapter_box</name>
          </widget>
        </widget>
 
+       <widget>
+         <class>GtkVSeparator</class>
+         <name>vseparator1</name>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+
        <widget>
          <class>GtkHBox</class>
          <name>dvd_chapter_box</name>
          <widget>
            <class>GtkLabel</class>
            <name>label_chapter</name>
-           <label>--</label>
+           <label>---</label>
            <justify>GTK_JUSTIFY_CENTER</justify>
            <wrap>False</wrap>
            <xalign>0.5</xalign>
       <widget>
        <class>GtkHBox</class>
        <name>network_box</name>
+       <width>500</width>
+       <height>24</height>
        <visible>False</visible>
        <homogeneous>True</homogeneous>
        <spacing>0</spacing>
        <child>
          <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
+         <expand>False</expand>
+         <fill>False</fill>
        </child>
 
        <widget>
-         <class>Placeholder</class>
-       </widget>
-
-       <widget>
-         <class>Placeholder</class>
+         <class>GtkLabel</class>
+         <name>network_address_label</name>
+         <label>No server</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
        </widget>
 
        <widget>
          <class>GtkHBox</class>
          <name>network_channel_box</name>
+         <visible>False</visible>
          <homogeneous>False</homogeneous>
          <spacing>0</spacing>
          <child>
            <padding>0</padding>
-           <expand>True</expand>
-           <fill>True</fill>
+           <expand>False</expand>
+           <fill>False</fill>
          </child>
 
          <widget>
            <xpad>0</xpad>
            <ypad>0</ypad>
            <child>
-             <padding>0</padding>
+             <padding>5</padding>
              <expand>True</expand>
              <fill>False</fill>
            </child>
            <page>10</page>
            <page_size>10</page_size>
            <child>
-             <padding>0</padding>
+             <padding>5</padding>
              <expand>False</expand>
              <fill>True</fill>
            </child>
     <class>GnomeAppBar</class>
     <child_name>GnomeApp:appbar</child_name>
     <name>appbar</name>
-    <has_progress>True</has_progress>
+    <width>500</width>
+    <has_progress>False</has_progress>
     <has_status>True</has_status>
     <child>
       <padding>0</padding>
       <handler>on_popup_play_activate</handler>
       <last_modification_time>Sun, 11 Feb 2001 16:52:11 GMT</last_modification_time>
     </signal>
-    <label>_Play</label>
+    <label>Play</label>
     <right_justify>False</right_justify>
     <stock_icon>GNOME_STOCK_MENU_FORWARD</stock_icon>
   </widget>
     <stock_icon>GNOME_STOCK_MENU_BOTTOM</stock_icon>
   </widget>
 
+  <widget>
+    <class>GtkPixmapMenuItem</class>
+    <name>popup_stop</name>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_stop_activate</handler>
+      <last_modification_time>Tue, 01 May 2001 22:18:09 GMT</last_modification_time>
+    </signal>
+    <label>Stop</label>
+    <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_STOP</stock_icon>
+  </widget>
+
+  <widget>
+    <class>GtkPixmapMenuItem</class>
+    <name>popup_back</name>
+    <sensitive>False</sensitive>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_back_activate</handler>
+      <last_modification_time>Sun, 06 May 2001 15:33:13 GMT</last_modification_time>
+    </signal>
+    <label>Back</label>
+    <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_BACK</stock_icon>
+  </widget>
+
   <widget>
     <class>GtkPixmapMenuItem</class>
     <name>popup_slow</name>
     <right_justify>False</right_justify>
   </widget>
 
+  <widget>
+    <class>GtkCheckMenuItem</class>
+    <name>popup_fullscreen</name>
+    <tooltip>Toggle fullscreen mode</tooltip>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_fullscreen_activate</handler>
+      <last_modification_time>Wed, 02 May 2001 23:36:07 GMT</last_modification_time>
+    </signal>
+    <label>_Fullscreen</label>
+    <active>False</active>
+    <always_show_toggle>True</always_show_toggle>
+  </widget>
+
   <widget>
     <class>GtkMenuItem</class>
+    <name>separator8</name>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkPixmapMenuItem</class>
+    <name>popup_jump</name>
+    <tooltip>Got directly so specified point</tooltip>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_jump_activate</handler>
+      <last_modification_time>Tue, 01 May 2001 22:22:49 GMT</last_modification_time>
+    </signal>
+    <label>_Jump</label>
+    <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_JUMP_TO</stock_icon>
+  </widget>
+
+  <widget>
+    <class>GtkPixmapMenuItem</class>
     <name>popup_navigation</name>
     <sensitive>False</sensitive>
     <tooltip>Navigate through titles and chapters</tooltip>
     <label>_Navigation</label>
     <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_SEARCH</stock_icon>
   </widget>
 
   <widget>
   </widget>
 
   <widget>
-    <class>GtkMenuItem</class>
+    <class>GtkPixmapMenuItem</class>
     <name>popup_audio</name>
     <sensitive>False</sensitive>
     <tooltip>Select audio channel</tooltip>
     <label>_Audio</label>
     <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_VOLUME</stock_icon>
   </widget>
 
   <widget>
-    <class>GtkMenuItem</class>
+    <class>GtkPixmapMenuItem</class>
     <name>popup_subtitle</name>
     <sensitive>False</sensitive>
     <tooltip>Select subtitle channel</tooltip>
     <label>_Subtitles</label>
     <right_justify>False</right_justify>
+    <stock_icon>GNOME_STOCK_MENU_FONT</stock_icon>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>separator13</name>
+    <right_justify>False</right_justify>
   </widget>
 
   <widget>
     </widget>
   </widget>
 
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_playlist</name>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_playlist_activate</handler>
+      <last_modification_time>Wed, 02 May 2001 14:16:23 GMT</last_modification_time>
+    </signal>
+    <label>Playlist...</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkPixmapMenuItem</class>
+    <name>popup_preferences</name>
+    <signal>
+      <name>activate</name>
+      <handler>on_popup_preferences_activate</handler>
+      <last_modification_time>Tue, 01 May 2001 22:17:08 GMT</last_modification_time>
+    </signal>
+    <stock_item>GNOMEUIINFO_MENU_PREFERENCES_ITEM</stock_item>
+  </widget>
+
   <widget>
     <class>GtkMenuItem</class>
     <name>separator2</name>
@@ -1265,18 +1378,13 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
 
 <widget>
   <class>GnomeDialog</class>
-  <name>intf_playlist</name>
-  <signal>
-    <name>destroy</name>
-    <handler>on_intf_playlist_destroy</handler>
-    <last_modification_time>Tue, 13 Feb 2001 09:18:45 GMT</last_modification_time>
-  </signal>
-  <title>Playlist</title>
+  <name>intf_disc</name>
+  <title>Open Disc</title>
   <type>GTK_WINDOW_TOPLEVEL</type>
   <position>GTK_WIN_POS_NONE</position>
-  <modal>False</modal>
+  <modal>True</modal>
   <allow_shrink>False</allow_shrink>
-  <allow_grow>True</allow_grow>
+  <allow_grow>False</allow_grow>
   <auto_shrink>False</auto_shrink>
   <auto_close>False</auto_close>
   <hide_on_close>False</hide_on_close>
@@ -1284,7 +1392,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
   <widget>
     <class>GtkVBox</class>
     <child_name>GnomeDialog:vbox</child_name>
-    <name>dialog-vbox2</name>
+    <name>dialog-vbox4</name>
     <homogeneous>False</homogeneous>
     <spacing>8</spacing>
     <child>
@@ -1296,7 +1404,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
     <widget>
       <class>GtkHButtonBox</class>
       <child_name>GnomeDialog:action_area</child_name>
-      <name>dialog-action_area2</name>
+      <name>dialog-action_area4</name>
       <layout_style>GTK_BUTTONBOX_END</layout_style>
       <spacing>8</spacing>
       <child_min_width>85</child_min_width>
@@ -1312,175 +1420,36 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
 
       <widget>
        <class>GtkButton</class>
-       <name>playlist_ok</name>
+       <name>disc_ok</name>
        <can_default>True</can_default>
        <can_focus>True</can_focus>
        <signal>
          <name>clicked</name>
-         <handler>on_playlist_ok_clicked</handler>
-         <last_modification_time>Tue, 13 Feb 2001 09:20:38 GMT</last_modification_time>
+         <handler>on_disc_ok_clicked</handler>
+         <last_modification_time>Sun, 04 Mar 2001 01:33:55 GMT</last_modification_time>
        </signal>
        <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
       </widget>
-    </widget>
 
-    <widget>
-      <class>GtkLabel</class>
-      <name>label11</name>
-      <label>Sorry, the playlist isn't functional yet. Please retry in a later version.</label>
-      <justify>GTK_JUSTIFY_CENTER</justify>
-      <wrap>False</wrap>
-      <xalign>0.5</xalign>
-      <yalign>0.5</yalign>
-      <xpad>0</xpad>
-      <ypad>0</ypad>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
-      </child>
+      <widget>
+       <class>GtkButton</class>
+       <name>disc_cancel</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_disc_cancel_clicked</handler>
+         <last_modification_time>Sun, 04 Mar 2001 01:33:50 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+      </widget>
     </widget>
 
     <widget>
-      <class>GtkScrolledWindow</class>
-      <name>scrolledwindow3</name>
-      <hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
-      <vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
-      <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
-      <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
-      <child>
-       <padding>0</padding>
-       <expand>True</expand>
-       <fill>True</fill>
-      </child>
-
-      <widget>
-       <class>GtkCList</class>
-       <name>clist2</name>
-       <can_focus>True</can_focus>
-       <columns>3</columns>
-       <column_widths>211,49,35</column_widths>
-       <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
-       <show_titles>False</show_titles>
-       <shadow_type>GTK_SHADOW_IN</shadow_type>
-
-       <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label8</name>
-         <label>Name</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-       </widget>
-
-       <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label9</name>
-         <label>Type</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-       </widget>
-
-       <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label10</name>
-         <label>Length</label>
-         <justify>GTK_JUSTIFY_CENTER</justify>
-         <wrap>False</wrap>
-         <xalign>0.5</xalign>
-         <yalign>0.5</yalign>
-         <xpad>0</xpad>
-         <ypad>0</ypad>
-       </widget>
-      </widget>
-    </widget>
-  </widget>
-</widget>
-
-<widget>
-  <class>GnomeDialog</class>
-  <name>intf_disc</name>
-  <title>Open Disc</title>
-  <type>GTK_WINDOW_TOPLEVEL</type>
-  <position>GTK_WIN_POS_NONE</position>
-  <modal>True</modal>
-  <allow_shrink>False</allow_shrink>
-  <allow_grow>False</allow_grow>
-  <auto_shrink>False</auto_shrink>
-  <auto_close>False</auto_close>
-  <hide_on_close>False</hide_on_close>
-
-  <widget>
-    <class>GtkVBox</class>
-    <child_name>GnomeDialog:vbox</child_name>
-    <name>dialog-vbox4</name>
-    <homogeneous>False</homogeneous>
-    <spacing>8</spacing>
-    <child>
-      <padding>4</padding>
-      <expand>True</expand>
-      <fill>True</fill>
-    </child>
-
-    <widget>
-      <class>GtkHButtonBox</class>
-      <child_name>GnomeDialog:action_area</child_name>
-      <name>dialog-action_area4</name>
-      <layout_style>GTK_BUTTONBOX_END</layout_style>
-      <spacing>8</spacing>
-      <child_min_width>85</child_min_width>
-      <child_min_height>27</child_min_height>
-      <child_ipad_x>7</child_ipad_x>
-      <child_ipad_y>0</child_ipad_y>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>True</fill>
-       <pack>GTK_PACK_END</pack>
-      </child>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>disc_ok</name>
-       <can_default>True</can_default>
-       <can_focus>True</can_focus>
-       <signal>
-         <name>clicked</name>
-         <handler>on_disc_ok_clicked</handler>
-         <last_modification_time>Sun, 04 Mar 2001 01:33:55 GMT</last_modification_time>
-       </signal>
-       <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
-      </widget>
-
-      <widget>
-       <class>GtkButton</class>
-       <name>disc_cancel</name>
-       <can_default>True</can_default>
-       <can_focus>True</can_focus>
-       <signal>
-         <name>clicked</name>
-         <handler>on_disc_cancel_clicked</handler>
-         <last_modification_time>Sun, 04 Mar 2001 01:33:50 GMT</last_modification_time>
-       </signal>
-       <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
-      </widget>
-    </widget>
-
-    <widget>
-      <class>GtkHBox</class>
-      <name>hbox2</name>
-      <homogeneous>False</homogeneous>
-      <spacing>5</spacing>
+      <class>GtkHBox</class>
+      <name>hbox2</name>
+      <homogeneous>False</homogeneous>
+      <spacing>5</spacing>
       <child>
        <padding>0</padding>
        <expand>True</expand>
@@ -1898,7 +1867,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
          <class>GtkTable</class>
          <name>table2</name>
          <border_width>5</border_width>
-         <rows>2</rows>
+         <rows>3</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
          <row_spacing>5</row_spacing>
@@ -1959,6 +1928,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
          <widget>
            <class>GtkSpinButton</class>
            <name>network_port</name>
+           <tooltip>Port of the stream server</tooltip>
            <can_focus>True</can_focus>
            <climb_rate>1</climb_rate>
            <digits>0</digits>
@@ -1989,13 +1959,69 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
          </widget>
 
          <widget>
-           <class>GtkEntry</class>
-           <name>network_server</name>
+           <class>GtkCheckButton</class>
+           <name>broadcast_check</name>
            <can_focus>True</can_focus>
-           <editable>True</editable>
-           <text_visible>True</text_visible>
-           <text_max_length>0</text_max_length>
-           <text>vls</text>
+           <signal>
+             <name>toggled</name>
+             <handler>on_broadcast_check_toggled</handler>
+             <last_modification_time>Wed, 02 May 2001 00:28:21 GMT</last_modification_time>
+           </signal>
+           <label>Broadcast</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>network_broadcast_combo</name>
+           <max_saved>10</max_saved>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>network_broadcast</name>
+             <sensitive>False</sensitive>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>network_server_combo</name>
+           <max_saved>10</max_saved>
            <child>
              <left_attach>1</left_attach>
              <right_attach>2</right_attach>
@@ -2010,6 +2036,17 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
              <xfill>True</xfill>
              <yfill>False</yfill>
            </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>network_server</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text>vls</text>
+           </widget>
          </widget>
        </widget>
       </widget>
@@ -2017,4 +2054,2099 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
   </widget>
 </widget>
 
+<widget>
+  <class>GnomeDialog</class>
+  <name>intf_playlist</name>
+  <title>Playlist</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <default_width>400</default_width>
+  <default_height>300</default_height>
+  <allow_shrink>True</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+  <auto_close>False</auto_close>
+  <hide_on_close>False</hide_on_close>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>GnomeDialog:vbox</child_name>
+    <name>playlist_vbox</name>
+    <homogeneous>False</homogeneous>
+    <spacing>8</spacing>
+    <child>
+      <padding>4</padding>
+      <expand>True</expand>
+      <fill>True</fill>
+    </child>
+
+    <widget>
+      <class>GtkHButtonBox</class>
+      <child_name>GnomeDialog:action_area</child_name>
+      <name>playlist_action</name>
+      <layout_style>GTK_BUTTONBOX_END</layout_style>
+      <spacing>8</spacing>
+      <child_min_width>100</child_min_width>
+      <child_min_height>38</child_min_height>
+      <child_ipad_x>7</child_ipad_x>
+      <child_ipad_y>0</child_ipad_y>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>playlist_ok</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_playlist_ok_clicked</handler>
+         <last_modification_time>Sun, 06 May 2001 04:14:54 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>playlist_cancel</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_playlist_cancel_clicked</handler>
+         <last_modification_time>Sun, 06 May 2001 03:41:33 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkScrolledWindow</class>
+      <name>playlist_scrolledwindow</name>
+      <hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy>
+      <vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy>
+      <hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
+      <vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkViewport</class>
+       <name>playlist_viewport</name>
+       <shadow_type>GTK_SHADOW_IN</shadow_type>
+
+       <widget>
+         <class>GtkFrame</class>
+         <name>playlist_frame</name>
+         <label>Playlist</label>
+         <label_xalign>0.05</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+
+         <widget>
+           <class>GtkCList</class>
+           <name>playlist_clist</name>
+           <can_focus>True</can_focus>
+           <signal>
+             <name>event</name>
+             <handler>on_playlist_clist_event</handler>
+             <last_modification_time>Tue, 01 May 2001 22:13:12 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>drag_data_received</name>
+             <handler>on_playlist_clist_drag_data_received</handler>
+             <last_modification_time>Tue, 01 May 2001 22:13:32 GMT</last_modification_time>
+           </signal>
+           <signal>
+             <name>drag_motion</name>
+             <handler>on_playlist_clist_drag_motion</handler>
+             <last_modification_time>Tue, 01 May 2001 22:13:52 GMT</last_modification_time>
+           </signal>
+           <columns>2</columns>
+           <column_widths>287,70</column_widths>
+           <selection_mode>GTK_SELECTION_SINGLE</selection_mode>
+           <show_titles>True</show_titles>
+           <shadow_type>GTK_SHADOW_IN</shadow_type>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>playlist_label_url</name>
+             <label>Url</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <child_name>CList:title</child_name>
+             <name>playlist_label_duration</name>
+             <label>Duration</label>
+             <justify>GTK_JUSTIFY_CENTER</justify>
+             <wrap>False</wrap>
+             <xalign>0.5</xalign>
+             <yalign>0.5</yalign>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+           </widget>
+         </widget>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkMenuBar</class>
+      <name>playlist_menubar</name>
+      <shadow_type>GTK_SHADOW_OUT</shadow_type>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>False</fill>
+      </child>
+
+      <widget>
+       <class>GtkMenuItem</class>
+       <name>playlist_add</name>
+       <label>Add</label>
+       <right_justify>False</right_justify>
+
+       <widget>
+         <class>GtkMenu</class>
+         <name>playlist_add_menu</name>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_add_disc</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_disc_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time>
+           </signal>
+           <label>Disc</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_add_file</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_file_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time>
+           </signal>
+           <label>File</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_add_network</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_network_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time>
+           </signal>
+           <label>Network</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_add_url</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_url_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time>
+           </signal>
+           <label>Url</label>
+           <right_justify>False</right_justify>
+         </widget>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkMenuItem</class>
+       <name>playlist_delete</name>
+       <label>Delete</label>
+       <right_justify>False</right_justify>
+
+       <widget>
+         <class>GtkMenu</class>
+         <name>playlist_delete_menu</name>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_delete_all</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_delete_all_activate</handler>
+             <last_modification_time>Sun, 06 May 2001 01:51:40 GMT</last_modification_time>
+           </signal>
+           <label>All</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playmist_delete_item</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_delete_item_activate</handler>
+             <last_modification_time>Sun, 06 May 2001 01:51:28 GMT</last_modification_time>
+           </signal>
+           <label>Item</label>
+           <right_justify>False</right_justify>
+         </widget>
+       </widget>
+      </widget>
+
+      <widget>
+       <class>GtkMenuItem</class>
+       <name>playlist_selection</name>
+       <label>Selection</label>
+       <right_justify>False</right_justify>
+
+       <widget>
+         <class>GtkMenu</class>
+         <name>playlist_selection_menu</name>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_selection_crop</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_crop_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 18:47:42 GMT</last_modification_time>
+           </signal>
+           <label>Crop</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_selection_invert</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_invert_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 18:47:42 GMT</last_modification_time>
+           </signal>
+           <label>Invert</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_selection_select</name>
+           <signal>
+             <name>activate</name>
+             <handler>on_playlist_select_activate</handler>
+             <last_modification_time>Tue, 01 May 2001 18:47:42 GMT</last_modification_time>
+           </signal>
+           <label>Select</label>
+           <right_justify>False</right_justify>
+         </widget>
+       </widget>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
+<widget>
+  <class>GnomeDialog</class>
+  <name>intf_jump</name>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>False</allow_shrink>
+  <allow_grow>False</allow_grow>
+  <auto_shrink>False</auto_shrink>
+  <auto_close>False</auto_close>
+  <hide_on_close>False</hide_on_close>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>GnomeDialog:vbox</child_name>
+    <name>jump_vbox</name>
+    <homogeneous>False</homogeneous>
+    <spacing>8</spacing>
+    <child>
+      <padding>4</padding>
+      <expand>True</expand>
+      <fill>True</fill>
+    </child>
+
+    <widget>
+      <class>GtkHButtonBox</class>
+      <child_name>GnomeDialog:action_area</child_name>
+      <name>jump_action</name>
+      <layout_style>GTK_BUTTONBOX_END</layout_style>
+      <spacing>8</spacing>
+      <child_min_width>85</child_min_width>
+      <child_min_height>27</child_min_height>
+      <child_ipad_x>7</child_ipad_x>
+      <child_ipad_y>0</child_ipad_y>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>jump_ok</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_jump_ok_clicked</handler>
+         <last_modification_time>Wed, 02 May 2001 02:20:21 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>jump_cancel</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_jump_cancel_clicked</handler>
+         <last_modification_time>Wed, 02 May 2001 02:20:54 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkFrame</class>
+      <name>jump_frame</name>
+      <label>Jump to:</label>
+      <label_xalign>0.05</label_xalign>
+      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>False</fill>
+      </child>
+
+      <widget>
+       <class>GtkHBox</class>
+       <name>jump_box</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+
+       <widget>
+         <class>GtkSpinButton</class>
+         <name>jump_second_spinbutton</name>
+         <can_focus>True</can_focus>
+         <climb_rate>1</climb_rate>
+         <digits>0</digits>
+         <numeric>False</numeric>
+         <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+         <snap>False</snap>
+         <wrap>False</wrap>
+         <value>0</value>
+         <lower>0</lower>
+         <upper>100</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>jump_label1</name>
+         <label>:</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkSpinButton</class>
+         <name>jump_minute_spinbutton</name>
+         <can_focus>True</can_focus>
+         <climb_rate>1</climb_rate>
+         <digits>0</digits>
+         <numeric>False</numeric>
+         <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+         <snap>False</snap>
+         <wrap>False</wrap>
+         <value>0</value>
+         <lower>0</lower>
+         <upper>59</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>jump_label2</name>
+         <label>:</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkSpinButton</class>
+         <name>jump_hour_spinbutton</name>
+         <can_focus>True</can_focus>
+         <climb_rate>1</climb_rate>
+         <digits>0</digits>
+         <numeric>False</numeric>
+         <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+         <snap>False</snap>
+         <wrap>False</wrap>
+         <value>0</value>
+         <lower>0</lower>
+         <upper>10</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
+<widget>
+  <class>GnomeDialog</class>
+  <name>intf_preferences</name>
+  <title>Preferences</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <default_width>450</default_width>
+  <default_height>350</default_height>
+  <allow_shrink>True</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+  <auto_close>False</auto_close>
+  <hide_on_close>False</hide_on_close>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>GnomeDialog:vbox</child_name>
+    <name>preferences_vbox</name>
+    <homogeneous>False</homogeneous>
+    <spacing>8</spacing>
+    <child>
+      <padding>4</padding>
+      <expand>True</expand>
+      <fill>True</fill>
+    </child>
+
+    <widget>
+      <class>GtkHButtonBox</class>
+      <child_name>GnomeDialog:action_area</child_name>
+      <name>preferences_dialog</name>
+      <layout_style>GTK_BUTTONBOX_END</layout_style>
+      <spacing>8</spacing>
+      <child_min_width>85</child_min_width>
+      <child_min_height>27</child_min_height>
+      <child_ipad_x>7</child_ipad_x>
+      <child_ipad_y>0</child_ipad_y>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>preferences_ok</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_preferences_ok_clicked</handler>
+         <last_modification_time>Wed, 02 May 2001 17:04:42 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>preferences_apply</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_preferences_apply_clicked</handler>
+         <last_modification_time>Wed, 02 May 2001 17:04:50 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>preferences_cancel</name>
+       <can_default>True</can_default>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>on_preferences_cancel_clicked</handler>
+         <last_modification_time>Wed, 02 May 2001 17:05:00 GMT</last_modification_time>
+       </signal>
+       <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkFrame</class>
+      <name>preferences_frame</name>
+      <label>Preferences</label>
+      <label_xalign>0.05</label_xalign>
+      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkNotebook</class>
+       <name>preferences_notebook</name>
+       <can_focus>True</can_focus>
+       <show_tabs>True</show_tabs>
+       <show_border>True</show_border>
+       <tab_pos>GTK_POS_TOP</tab_pos>
+       <scrollable>False</scrollable>
+       <tab_hborder>2</tab_hborder>
+       <tab_vborder>2</tab_vborder>
+       <popup_enable>False</popup_enable>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preferences_file_table</name>
+         <rows>1</rows>
+         <columns>2</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GnomeFileEntry</class>
+           <name>preferences_file_combo</name>
+           <max_saved>10</max_saved>
+           <directory>False</directory>
+           <modal>False</modal>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_file_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_file_path_label</name>
+           <label>Default path: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_file</name>
+         <label>File</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preferences_disc_table</name>
+         <rows>2</rows>
+         <columns>2</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GnomeFileEntry</class>
+           <name>preferences_disc_dvd_combo</name>
+           <max_saved>10</max_saved>
+           <directory>False</directory>
+           <modal>False</modal>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_disc_dvd_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GnomeFileEntry</class>
+           <name>preferences_file_vcd_combo</name>
+           <max_saved>10</max_saved>
+           <directory>False</directory>
+           <modal>False</modal>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_disc_vcd_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_disc_dvd_label</name>
+           <label>Default DVD path: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_disc_vcd_label</name>
+           <label>Default VCD path: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_disc</name>
+         <label>Disc</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preferences_network_table</name>
+         <rows>7</rows>
+         <columns>2</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_network_server_label</name>
+           <label>Default server: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>preferences_network_port_spinbutton</name>
+           <can_focus>True</can_focus>
+           <climb_rate>1</climb_rate>
+           <digits>0</digits>
+           <numeric>False</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>False</snap>
+           <wrap>False</wrap>
+           <value>1234</value>
+           <lower>0</lower>
+           <upper>65535</upper>
+           <step>1</step>
+           <page>10</page>
+           <page_size>10</page_size>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_network_broadcast_label</name>
+           <label>Broadcast address: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_network_port_label</name>
+           <label>Default port: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>preferences_network_server_combo</name>
+           <max_saved>10</max_saved>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_network_server_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text>vls</text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>preferences_network_broadcast_combo</name>
+           <max_saved>10</max_saved>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_network_broadcast_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>preferences_network_broadcast_check_button</name>
+           <can_focus>True</can_focus>
+           <label>Broadcast mode</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>3</top_attach>
+             <bottom_attach>4</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkRadioButton</class>
+           <name>preferences_network_ts_radiobutton</name>
+           <can_focus>True</can_focus>
+           <label>TS</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <group>preferences_network_protocol_group</group>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>4</top_attach>
+             <bottom_attach>5</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>True</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkRadioButton</class>
+           <name>preferences_network_rtp_radiobutton</name>
+           <can_focus>True</can_focus>
+           <label>RTP</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <group>preferences_network_protocol_group</group>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>5</top_attach>
+             <bottom_attach>6</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>True</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkRadioButton</class>
+           <name>preferences_network_http_radiobutton</name>
+           <can_focus>True</can_focus>
+           <label>HTTP</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <group>preferences_network_protocol_group</group>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>6</top_attach>
+             <bottom_attach>7</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>True</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_network_protocol_label</name>
+           <label>Default protocol: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>4</top_attach>
+             <bottom_attach>7</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>True</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_network</name>
+         <label>Network</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preferences_network_interface_table</name>
+         <rows>1</rows>
+         <columns>2</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_interface_label</name>
+           <label>Default interface: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>preferences_network_interface_combo</name>
+           <max_saved>10</max_saved>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_network_interface_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_interface</name>
+         <label>Interface</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preferences_video_table</name>
+         <rows>7</rows>
+         <columns>2</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_video_output_label</name>
+           <label>Default output: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_video_height</name>
+           <label>Default height: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>preferences_video_height_spinbutton</name>
+           <can_focus>True</can_focus>
+           <climb_rate>1</climb_rate>
+           <digits>0</digits>
+           <numeric>False</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>False</snap>
+           <wrap>False</wrap>
+           <value>576</value>
+           <lower>0</lower>
+           <upper>1600</upper>
+           <step>1</step>
+           <page>10</page>
+           <page_size>10</page_size>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>preferences_video_width_spinbutton</name>
+           <can_focus>True</can_focus>
+           <climb_rate>1</climb_rate>
+           <digits>0</digits>
+           <numeric>False</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>False</snap>
+           <wrap>False</wrap>
+           <value>720</value>
+           <lower>100</lower>
+           <upper>1600</upper>
+           <step>1</step>
+           <page>10</page>
+           <page_size>10</page_size>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_video_width_label</name>
+           <label>Default width: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>preferences_video_output_combo</name>
+           <max_saved>10</max_saved>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_video_output_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_video_depth</name>
+           <label>Default depth:</label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>3</top_attach>
+             <bottom_attach>4</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkOptionMenu</class>
+           <name>preferences_video_depth_optionmenu</name>
+           <can_focus>True</can_focus>
+           <items>15 bits
+16 bits
+32 bits
+</items>
+           <initial_choice>1</initial_choice>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>3</top_attach>
+             <bottom_attach>4</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_video_fullscreen_depth</name>
+           <label>Fullscreen depth:</label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>4</top_attach>
+             <bottom_attach>5</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkOptionMenu</class>
+           <name>preferences_video_fullscreen_depth_optionmenu</name>
+           <can_focus>True</can_focus>
+           <items>15 bits
+16 bits
+32 bits
+</items>
+           <initial_choice>2</initial_choice>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>4</top_attach>
+             <bottom_attach>5</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>True</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>preferences_video_fullscreen_checkbutton</name>
+           <can_focus>True</can_focus>
+           <label>Fullscreen on play</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>6</top_attach>
+             <bottom_attach>7</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>preferences_video_grayscale_checkbutton</name>
+           <can_focus>True</can_focus>
+           <label>Grayscale</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>6</top_attach>
+             <bottom_attach>7</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_video_gamma_label</name>
+           <label>Gamma:</label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>5</top_attach>
+             <bottom_attach>6</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkSpinButton</class>
+           <name>spinbutton4</name>
+           <can_focus>True</can_focus>
+           <climb_rate>1</climb_rate>
+           <digits>1</digits>
+           <numeric>False</numeric>
+           <update_policy>GTK_UPDATE_ALWAYS</update_policy>
+           <snap>False</snap>
+           <wrap>False</wrap>
+           <value>0</value>
+           <lower>0</lower>
+           <upper>5</upper>
+           <step>0.1</step>
+           <page>10</page>
+           <page_size>10</page_size>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>5</top_attach>
+             <bottom_attach>6</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_video</name>
+         <label>Video</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preference_audio_table</name>
+         <rows>5</rows>
+         <columns>2</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>preferences_audio_spdif_checkbutton</name>
+           <can_focus>True</can_focus>
+           <label>Spdif output</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>4</top_attach>
+             <bottom_attach>5</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_audio_output_label</name>
+           <label>Default output: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GnomeEntry</class>
+           <name>preferences_audio_output_combo</name>
+           <max_saved>10</max_saved>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+
+           <widget>
+             <class>GtkEntry</class>
+             <child_name>GnomeEntry:entry</child_name>
+             <name>preferences_audio_output_entry</name>
+             <can_focus>True</can_focus>
+             <editable>True</editable>
+             <text_visible>True</text_visible>
+             <text_max_length>0</text_max_length>
+             <text></text>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_audio_frequency_label</name>
+           <label>Frequency: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkOptionMenu</class>
+           <name>preferences_audio_frequency_optionmenu</name>
+           <can_focus>True</can_focus>
+           <items>48000 Hz
+44100 Hz
+32000 Hz
+22050 Hz
+</items>
+           <initial_choice>0</initial_choice>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_audio_quality_label</name>
+           <label>Quality: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkOptionMenu</class>
+           <name>preferences_audio_quality_optionmenu</name>
+           <can_focus>True</can_focus>
+           <items>16 bits
+8 bits
+</items>
+           <initial_choice>0</initial_choice>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkLabel</class>
+           <name>preferences_audio_channels_label</name>
+           <label>Channels: </label>
+           <justify>GTK_JUSTIFY_CENTER</justify>
+           <wrap>False</wrap>
+           <xalign>0</xalign>
+           <yalign>0.5</yalign>
+           <xpad>0</xpad>
+           <ypad>0</ypad>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>3</top_attach>
+             <bottom_attach>4</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkOptionMenu</class>
+           <name>preferences_audio_channels_optionmenu</name>
+           <can_focus>True</can_focus>
+           <items>Mono
+Stereo
+</items>
+           <initial_choice>1</initial_choice>
+           <child>
+             <left_attach>1</left_attach>
+             <right_attach>2</right_attach>
+             <top_attach>3</top_attach>
+             <bottom_attach>4</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>False</xexpand>
+             <yexpand>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_audio</name>
+         <label>Audio</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preference_playlist_table</name>
+         <rows>3</rows>
+         <columns>1</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>preferences_playlist_launch_on_startup_checkbutton</name>
+           <can_focus>True</can_focus>
+           <label>Launch on startup</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>preferences_playlist_loop_checkbutton</name>
+           <can_focus>True</can_focus>
+           <label>Loop on playlist end</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>2</top_attach>
+             <bottom_attach>3</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+
+         <widget>
+           <class>GtkCheckButton</class>
+           <name>playlist_enqueue_as default_checkbutton</name>
+           <can_focus>True</can_focus>
+           <label>Enqueue as default</label>
+           <active>False</active>
+           <draw_indicator>True</draw_indicator>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>1</top_attach>
+             <bottom_attach>2</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>False</yfill>
+           </child>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_playlist</name>
+         <label>Playlist</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+
+       <widget>
+         <class>GtkTable</class>
+         <name>preferences_misc_table</name>
+         <rows>1</rows>
+         <columns>1</columns>
+         <homogeneous>False</homogeneous>
+         <row_spacing>0</row_spacing>
+         <column_spacing>0</column_spacing>
+
+         <widget>
+           <class>GtkFrame</class>
+           <name>preferences_misc_associated_filesframe</name>
+           <sensitive>False</sensitive>
+           <label>Files associated with vlc</label>
+           <label_xalign>0.05</label_xalign>
+           <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+           <child>
+             <left_attach>0</left_attach>
+             <right_attach>1</right_attach>
+             <top_attach>0</top_attach>
+             <bottom_attach>1</bottom_attach>
+             <xpad>0</xpad>
+             <ypad>0</ypad>
+             <xexpand>True</xexpand>
+             <yexpand>True</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>True</xfill>
+             <yfill>True</yfill>
+           </child>
+
+           <widget>
+             <class>GtkVBox</class>
+             <name>preferences_misc_associated_files_vbox</name>
+             <homogeneous>False</homogeneous>
+             <spacing>0</spacing>
+
+             <widget>
+               <class>GtkCheckButton</class>
+               <name>preferences_misc_mpeg_checkbutton</name>
+               <can_focus>True</can_focus>
+               <label>mpeg</label>
+               <active>False</active>
+               <draw_indicator>True</draw_indicator>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+             </widget>
+
+             <widget>
+               <class>GtkCheckButton</class>
+               <name>preferences_misc_mp2_checkbutton</name>
+               <can_focus>True</can_focus>
+               <label>mp2</label>
+               <active>False</active>
+               <draw_indicator>True</draw_indicator>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+             </widget>
+
+             <widget>
+               <class>GtkCheckButton</class>
+               <name>preferences_misc_vob_checkbutton</name>
+               <can_focus>True</can_focus>
+               <label>vob</label>
+               <active>False</active>
+               <draw_indicator>True</draw_indicator>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+             </widget>
+
+             <widget>
+               <class>GtkCheckButton</class>
+               <name>preferences_misc_ts_checkbutton</name>
+               <can_focus>True</can_focus>
+               <label>ts</label>
+               <active>False</active>
+               <draw_indicator>True</draw_indicator>
+               <child>
+                 <padding>0</padding>
+                 <expand>False</expand>
+                 <fill>False</fill>
+               </child>
+             </widget>
+           </widget>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>Notebook:tab</child_name>
+         <name>preferences_misc</name>
+         <label>Misc</label>
+         <justify>GTK_JUSTIFY_CENTER</justify>
+         <wrap>False</wrap>
+         <xalign>0.5</xalign>
+         <yalign>0.5</yalign>
+         <xpad>0</xpad>
+         <ypad>0</ypad>
+       </widget>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
 </GTK-Interface>
index 861374253d1a11368a1de9d58bae636003fbebae..12257e870aa902a685ec184f9ec6abc04b2f8877 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gnome.h: private Gnome interface description
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gnome.h,v 1.9 2001/05/01 15:12:22 sam Exp $
+ * $Id: intf_gnome.h,v 1.10 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
  *****************************************************************************/
 #define GNOME_MENU_LABEL_SIZE 64
 
+/*****************************************************************************
+ * Inline function to retrieve the interface structure
+ *****************************************************************************/
+static __inline__ intf_thread_t * GetIntf( GtkWidget *item, char * psz_parent )
+{
+    return( gtk_object_get_data( GTK_OBJECT( lookup_widget(item, psz_parent) ),
+                                 "p_intf" ) );
+}
+
+
+
+
 /*****************************************************************************
  * intf_sys_t: description and status of Gnome interface
  *****************************************************************************/
@@ -66,26 +78,30 @@ typedef struct intf_sys_s
     GtkWidget *         p_fileopen;                      /* file open window */
     GtkWidget *         p_disc;                     /* disc selection window */
     GtkWidget *         p_network;                  /* network stream window */
+    GtkWidget *         p_preferences;                 /* preferences window */
+    GtkWidget *         p_jump;                               /* jump window */
 
     /* The slider */
+    GtkFrame *          p_slider_frame;
     GtkAdjustment *     p_adj;                   /* slider adjustment object */
     float               f_adj_oldvalue;                    /* previous value */
 
     /* The window labels */
-    GtkLabel *          p_label_date;
-    GtkLabel *          p_label_status;
     GtkLabel *          p_label_title;
     GtkLabel *          p_label_chapter;
 
+    /* Playlist management */
+    int                 i_list_timeout;
+    int                 i_playing;                 /* playlist selected item */
+
     /* input mode management */
     boolean_t           b_mode_changed;
     gint                i_intf_mode;      /* interface mode: file, net, disc */
 
-    gint                i_part;                  /* current chapter */
+    gint                i_part;                           /* current chapter */
 
     /* XXX: Ugly kludge, see intf_gnome.c */
     void             ( *pf_gtk_callback ) ( void );
     void             ( *pf_gdk_callback ) ( void );
 
 } intf_sys_t;
-
index e32e8340a2e82e47734eae59cb896ca767585df7..42d12dce74c188d49a783e9d5b057556c70b4bda 100644 (file)
@@ -2,7 +2,7 @@
  * gtk_callbacks.c : Callbacks for the Gtk+ plugin.
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: gtk_callbacks.c,v 1.15 2001/04/28 03:36:25 sam Exp $
+ * $Id: gtk_callbacks.c,v 1.16 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -914,3 +914,19 @@ on_slider_button_press_event           (GtkWidget       *widget,
     return FALSE;
 }
 
+
+void
+on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+
+}
+
+
+void
+on_menubar_angle_activate              (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+
+}
+
index 461f80ffdcfdb60ae0a0738150df5567b598c403..4c200c82eed7e9956242e2627a45905d52e8a26b 100644 (file)
@@ -308,3 +308,11 @@ gboolean
 on_slider_button_press_event           (GtkWidget       *widget,
                                         GdkEventButton  *event,
                                         gpointer         user_data);
+
+void
+on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_menubar_angle_activate              (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
index 21df84806af3c9cdbf7c615e0101275da9d43d9b..d3b30322deeed1a533baa673d3fe390e64cbc140 100644 (file)
@@ -37,8 +37,11 @@ create_intf_window (void)
   GtkWidget *menubar_view;
   GtkWidget *menubar_view_menu;
   GtkAccelGroup *menubar_view_menu_accels;
+  GtkWidget *menubar_fullscreen;
+  GtkWidget *separator13;
   GtkWidget *menubar_title;
   GtkWidget *menubar_chapter;
+  GtkWidget *menubar_angle;
   GtkWidget *separator11;
   GtkWidget *menubar_playlist;
   GtkWidget *menubar_modules;
@@ -68,10 +71,7 @@ create_intf_window (void)
   GtkWidget *toolbar_playlist;
   GtkWidget *toolbar_prev;
   GtkWidget *toolbar_next;
-  GtkWidget *hbox7;
-  GtkWidget *label_date;
-  GtkWidget *label_status;
-  GtkWidget *label_bar;
+  GtkWidget *slider_frame;
   GtkWidget *slider;
   GtkWidget *intf_statusbar;
   GtkAccelGroup *accel_group;
@@ -110,7 +110,7 @@ create_intf_window (void)
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_file)->child),
                                    _("_File"));
   gtk_widget_add_accelerator (menubar_file, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
+                              tmp_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
   gtk_widget_ref (menubar_file);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_file", menubar_file,
                             (GtkDestroyNotify) gtk_widget_unref);
@@ -196,7 +196,7 @@ create_intf_window (void)
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_view)->child),
                                    _("_View"));
   gtk_widget_add_accelerator (menubar_view, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
+                              tmp_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
   gtk_widget_ref (menubar_view);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_view", menubar_view,
                             (GtkDestroyNotify) gtk_widget_unref);
@@ -210,6 +210,26 @@ create_intf_window (void)
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (menubar_view), menubar_view_menu);
   menubar_view_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (menubar_view_menu));
 
+  menubar_fullscreen = gtk_check_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_fullscreen)->child),
+                                   _("_Fullscreen"));
+  gtk_widget_add_accelerator (menubar_fullscreen, "activate_item", menubar_view_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (menubar_fullscreen);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_fullscreen", menubar_fullscreen,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (menubar_fullscreen);
+  gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_fullscreen);
+  gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menubar_fullscreen), TRUE);
+
+  separator13 = gtk_menu_item_new ();
+  gtk_widget_ref (separator13);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator13", separator13,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (separator13);
+  gtk_container_add (GTK_CONTAINER (menubar_view_menu), separator13);
+  gtk_widget_set_sensitive (separator13, FALSE);
+
   menubar_title = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_title)->child),
                                    _("_Title"));
@@ -235,6 +255,17 @@ create_intf_window (void)
   gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_chapter);
   gtk_widget_set_sensitive (menubar_chapter, FALSE);
 
+  menubar_angle = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_angle)->child),
+                                   _("An_gle"));
+  gtk_widget_add_accelerator (menubar_angle, "activate_item", menubar_view_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (menubar_angle);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_angle", menubar_angle,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (menubar_angle);
+  gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_angle);
+
   separator11 = gtk_menu_item_new ();
   gtk_widget_ref (separator11);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator11", separator11,
@@ -272,7 +303,7 @@ create_intf_window (void)
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_settings)->child),
                                    _("_Settings"));
   gtk_widget_add_accelerator (menubar_settings, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
+                              tmp_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
   gtk_widget_ref (menubar_settings);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_settings", menubar_settings,
                             (GtkDestroyNotify) gtk_widget_unref);
@@ -345,7 +376,7 @@ create_intf_window (void)
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_help)->child),
                                    _("_Help"));
   gtk_widget_add_accelerator (menubar_help, "activate_item", accel_group,
-                              tmp_key, GDK_MOD1_MASK, 0);
+                              tmp_key, GDK_MOD1_MASK, (GtkAccelFlags) 0);
   gtk_widget_ref (menubar_help);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_help", menubar_help,
                             (GtkDestroyNotify) gtk_widget_unref);
@@ -392,7 +423,7 @@ create_intf_window (void)
   toolbar_open = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                 GTK_TOOLBAR_CHILD_BUTTON,
                                 NULL,
-                                _("Open"),
+                                _("File"),
                                 _("Open a File"), NULL,
                                 NULL, NULL, NULL);
   gtk_widget_ref (toolbar_open);
@@ -527,40 +558,20 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar_next);
 
-  hbox7 = gtk_hbox_new (TRUE, 0);
-  gtk_widget_ref (hbox7);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "hbox7", hbox7,
+  slider_frame = gtk_frame_new (_("-:--:--"));
+  gtk_widget_ref (slider_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider_frame", slider_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (hbox7);
-  gtk_box_pack_start (GTK_BOX (vbox2), hbox7, TRUE, TRUE, 0);
-
-  label_date = gtk_label_new (_("-:--:--"));
-  gtk_widget_ref (label_date);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_date", label_date,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_date);
-  gtk_box_pack_start (GTK_BOX (hbox7), label_date, FALSE, FALSE, 0);
-
-  label_status = gtk_label_new (_("Status: foo"));
-  gtk_widget_ref (label_status);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_status", label_status,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_status);
-  gtk_box_pack_start (GTK_BOX (hbox7), label_status, FALSE, FALSE, 0);
-
-  label_bar = gtk_label_new (_("Bar: baz"));
-  gtk_widget_ref (label_bar);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_bar", label_bar,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label_bar);
-  gtk_box_pack_start (GTK_BOX (hbox7), label_bar, FALSE, FALSE, 0);
+  gtk_widget_show (slider_frame);
+  gtk_box_pack_start (GTK_BOX (vbox2), slider_frame, TRUE, TRUE, 0);
+  gtk_frame_set_label_align (GTK_FRAME (slider_frame), 0.05, 0.5);
 
   slider = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 6.25, 0)));
   gtk_widget_ref (slider);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider", slider,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (slider);
-  gtk_box_pack_start (GTK_BOX (vbox2), slider, TRUE, TRUE, 0);
+  gtk_container_add (GTK_CONTAINER (slider_frame), slider);
   gtk_scale_set_draw_value (GTK_SCALE (slider), FALSE);
   gtk_scale_set_digits (GTK_SCALE (slider), 3);
 
@@ -589,6 +600,12 @@ create_intf_window (void)
   gtk_signal_connect (GTK_OBJECT (menubar_exit), "activate",
                       GTK_SIGNAL_FUNC (on_menubar_exit_activate),
                       NULL);
+  gtk_signal_connect (GTK_OBJECT (menubar_fullscreen), "activate",
+                      GTK_SIGNAL_FUNC (on_menubar_fullscreen_activate),
+                      NULL);
+  gtk_signal_connect (GTK_OBJECT (menubar_angle), "activate",
+                      GTK_SIGNAL_FUNC (on_menubar_angle_activate),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (menubar_playlist), "activate",
                       GTK_SIGNAL_FUNC (on_menubar_playlist_activate),
                       NULL);
index 040b8aefe37b2b8e227c5bfcbe34c5738c8a5118..022e85942f0e3fea6a3f3516a4ab5f8eaea4469b 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gtk.c: Gtk+ interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gtk.c,v 1.15 2001/05/01 15:12:22 sam Exp $
+ * $Id: intf_gtk.c,v 1.16 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -225,11 +225,8 @@ static void intf_Run( intf_thread_t *p_intf )
                        1, GDK_ACTION_COPY );
 
     /* Get the interface labels */
-    #define P_LABEL( name ) GTK_LABEL( gtk_object_get_data( \
-                         GTK_OBJECT( p_intf->p_sys->p_window ), name ) )
-    p_intf->p_sys->p_label_date = P_LABEL( "label_date" );
-    p_intf->p_sys->p_label_status = P_LABEL( "label_status" );
-    #undef P_LABEL
+    p_intf->p_sys->p_slider_frame = GTK_FRAME( gtk_object_get_data(
+        GTK_OBJECT(p_intf->p_sys->p_window ), "slider_frame" ) ); 
 
     /* Connect the date display to the slider */
     #define P_SLIDER GTK_RANGE( gtk_object_get_data( \
@@ -303,7 +300,7 @@ static gint GtkManage( gpointer p_data )
 {
 #define p_intf ((intf_thread_t *)p_data)
 
-    GtkPlayListManage( p_data ); 
+    GtkPlayListManage( p_data );
 
     vlc_mutex_lock( &p_intf->change_lock );
     
@@ -758,7 +755,7 @@ void GtkDisplayDate( GtkAdjustment *p_adj )
 
         vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
 
-        gtk_label_set_text( p_intf->p_sys->p_label_date,
+        gtk_frame_set_label( p_intf->p_sys->p_slider_frame,
                             input_OffsetToTime( p_intf->p_input, psz_time,
                                    ( p_area->i_size * p_adj->value ) / 100 ) );
 
index 633424dc80db0345c4629c675a5116f2774fa9f4..10458f513b4258fd661c5bb4c36723ad501e1fb8 100644 (file)
            <class>GtkMenu</class>
            <name>menubar_view_menu</name>
 
+           <widget>
+             <class>GtkCheckMenuItem</class>
+             <name>menubar_fullscreen</name>
+             <signal>
+               <name>activate</name>
+               <handler>on_menubar_fullscreen_activate</handler>
+               <last_modification_time>Tue, 01 May 2001 04:08:56 GMT</last_modification_time>
+             </signal>
+             <label>_Fullscreen</label>
+             <active>False</active>
+             <always_show_toggle>True</always_show_toggle>
+           </widget>
+
+           <widget>
+             <class>GtkMenuItem</class>
+             <name>separator13</name>
+             <right_justify>False</right_justify>
+           </widget>
+
            <widget>
              <class>GtkMenuItem</class>
              <name>menubar_title</name>
              <right_justify>False</right_justify>
            </widget>
 
+           <widget>
+             <class>GtkMenuItem</class>
+             <name>menubar_angle</name>
+             <signal>
+               <name>activate</name>
+               <handler>on_menubar_angle_activate</handler>
+               <last_modification_time>Tue, 01 May 2001 04:10:28 GMT</last_modification_time>
+             </signal>
+             <label>An_gle</label>
+             <right_justify>False</right_justify>
+           </widget>
+
            <widget>
              <class>GtkMenuItem</class>
              <name>separator11</name>
            <handler>on_toolbar_open_clicked</handler>
            <last_modification_time>Sun, 04 Mar 2001 21:01:03 GMT</last_modification_time>
          </signal>
-         <label>Open</label>
+         <label>File</label>
        </widget>
 
        <widget>
     </widget>
 
     <widget>
-      <class>GtkHBox</class>
-      <name>hbox7</name>
-      <homogeneous>True</homogeneous>
-      <spacing>0</spacing>
+      <class>GtkHandleBox</class>
+      <name>handlebox3</name>
+      <shadow_type>GTK_SHADOW_OUT</shadow_type>
+      <handle_position>GTK_POS_LEFT</handle_position>
+      <snap_edge>GTK_POS_TOP</snap_edge>
       <child>
        <padding>0</padding>
        <expand>True</expand>
       </child>
 
       <widget>
-       <class>GtkLabel</class>
-       <name>label_date</name>
+       <class>GtkFrame</class>
+       <name>slider_frame</name>
+       <visible>False</visible>
        <label>-:--:--</label>
-       <justify>GTK_JUSTIFY_CENTER</justify>
-       <wrap>False</wrap>
-       <xalign>0.5</xalign>
-       <yalign>0.5</yalign>
-       <xpad>0</xpad>
-       <ypad>0</ypad>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-      </widget>
+       <label_xalign>0.05</label_xalign>
+       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
 
-      <widget>
-       <class>GtkLabel</class>
-       <name>label_status</name>
-       <label>Status: foo</label>
-       <justify>GTK_JUSTIFY_CENTER</justify>
-       <wrap>False</wrap>
-       <xalign>0.5</xalign>
-       <yalign>0.5</yalign>
-       <xpad>0</xpad>
-       <ypad>0</ypad>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
+       <widget>
+         <class>GtkHScale</class>
+         <name>slider</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>button_release_event</name>
+           <handler>on_slider_button_release_event</handler>
+           <last_modification_time>Wed, 14 Mar 2001 15:58:36 GMT</last_modification_time>
+         </signal>
+         <signal>
+           <name>button_press_event</name>
+           <handler>on_slider_button_press_event</handler>
+           <last_modification_time>Wed, 14 Mar 2001 15:58:42 GMT</last_modification_time>
+         </signal>
+         <draw_value>False</draw_value>
+         <value_pos>GTK_POS_TOP</value_pos>
+         <digits>3</digits>
+         <policy>GTK_UPDATE_CONTINUOUS</policy>
+         <value>0</value>
+         <lower>0</lower>
+         <upper>100</upper>
+         <step>1</step>
+         <page>6.25</page>
+         <page_size>0</page_size>
+       </widget>
       </widget>
+    </widget>
 
-      <widget>
-       <class>GtkLabel</class>
-       <name>label_bar</name>
-       <label>Bar: baz</label>
-       <justify>GTK_JUSTIFY_CENTER</justify>
-       <wrap>False</wrap>
-       <xalign>0.5</xalign>
-       <yalign>0.5</yalign>
-       <xpad>0</xpad>
-       <ypad>0</ypad>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>False</fill>
-       </child>
-      </widget>
+    <widget>
+      <class>Placeholder</class>
     </widget>
 
     <widget>
-      <class>GtkHScale</class>
-      <name>slider</name>
-      <can_focus>True</can_focus>
-      <signal>
-       <name>button_release_event</name>
-       <handler>on_slider_button_release_event</handler>
-       <last_modification_time>Wed, 14 Mar 2001 15:58:36 GMT</last_modification_time>
-      </signal>
-      <signal>
-       <name>button_press_event</name>
-       <handler>on_slider_button_press_event</handler>
-       <last_modification_time>Wed, 14 Mar 2001 15:58:42 GMT</last_modification_time>
-      </signal>
-      <draw_value>False</draw_value>
-      <value_pos>GTK_POS_TOP</value_pos>
-      <digits>3</digits>
-      <policy>GTK_UPDATE_CONTINUOUS</policy>
-      <value>0</value>
-      <lower>0</lower>
-      <upper>100</upper>
-      <step>1</step>
-      <page>6.25</page>
-      <page_size>0</page_size>
-      <child>
-       <padding>0</padding>
-       <expand>True</expand>
-       <fill>True</fill>
-      </child>
+      <class>Placeholder</class>
+    </widget>
+
+    <widget>
+      <class>Placeholder</class>
     </widget>
 
     <widget>
index 67e07f1c07d3ac8ba07606d04744919c5601cdfb..364785fa1b7bfee27a0ae83c9086874425d56de1 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gtk.h: private Gtk+ interface description
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gtk.h,v 1.2 2001/05/01 15:12:22 sam Exp $
+ * $Id: intf_gtk.h,v 1.3 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -69,13 +69,10 @@ typedef struct intf_sys_s
     GtkWidget *         p_network;                  /* network stream window */
 
     /* The slider */
+    GtkFrame *          p_slider_frame;
     GtkAdjustment *     p_adj;                   /* slider adjustment object */
     float               f_adj_oldvalue;                    /* previous value */
 
-    /* The window labels */
-    GtkLabel *          p_label_date;
-    GtkLabel *          p_label_status;
-
     /* XXX: Ugly kludge, see intf_gnome.c */
     void             ( *pf_gtk_callback ) ( void );
     void             ( *pf_gdk_callback ) ( void );
index 5f5ee9c0a2d2dd31262a45104283f59ac1817e33..f3ff21b6c1ca11a4cafe0b9cf78f654e747489d0 100644 (file)
@@ -2,7 +2,7 @@
  * input_ts.c: TS demux and netlist management
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: input_ts.c,v 1.16 2001/04/28 03:36:25 sam Exp $
+ * $Id: input_ts.c,v 1.17 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Henri Fallon <henri@videolan.org>
  *
@@ -180,6 +180,7 @@ static void TSInit( input_thread_t * p_input )
     /* input method type */
     /* FIXME: should test if you have network or file here */
     p_input->stream.i_method = INPUT_METHOD_NETWORK;
+    p_input->stream.p_selected_area->i_tell = 0;
 
     /* Init */
     p_stream_data = (stream_ts_data_t *)p_input->stream.p_demux_data;
@@ -310,6 +311,8 @@ static int TSRead( input_thread_t * p_input,
                              "0x%.2x, should be 0x47)",
                              pp_packets[i_loop]->p_buffer[0] );
         }
+
+        p_input->stream.p_selected_area->i_tell += i_read;
     }
     return 0;
 }
index e588042c0f299ddc5d6b4dd8b5419accca2d6a92..631c2c88b3871fb5f507b3040a9ee78491b635b1 100644 (file)
@@ -2,7 +2,7 @@
  * vout_sdl.c: SDL video output display method
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: vout_sdl.c,v 1.48 2001/04/28 03:36:25 sam Exp $
+ * $Id: vout_sdl.c,v 1.49 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Pierre Baillet <oct@zoy.org>
@@ -80,7 +80,6 @@ typedef struct vout_sys_s
     SDL_Surface *   p_display;                             /* display device */
     SDL_Overlay *   p_overlay;                             /* overlay device */
 
-    boolean_t   b_fullscreen;
     boolean_t   b_overlay;
     boolean_t   b_cursor;
     boolean_t   b_reopen_display;
@@ -175,7 +174,7 @@ static int vout_Create( vout_thread_t *p_vout )
     p_vout->p_sys->b_cursor_autohidden = 0;
     p_vout->p_sys->i_lastmoved = mdate();
 
-    p_vout->p_sys->b_fullscreen = main_GetIntVariable( VOUT_FULLSCREEN_VAR,
+    p_vout->b_fullscreen = main_GetIntVariable( VOUT_FULLSCREEN_VAR,
                                 VOUT_FULLSCREEN_DEFAULT );
     p_vout->p_sys->b_overlay = main_GetIntVariable( VOUT_OVERLAY_VAR,
                                 VOUT_OVERLAY_DEFAULT );
@@ -455,7 +454,7 @@ static int vout_Manage( vout_thread_t *p_vout )
      */
     if( p_vout->i_changes & VOUT_FULLSCREEN_CHANGE )
     {
-        p_vout->p_sys->b_fullscreen = ! p_vout->p_sys->b_fullscreen;
+        p_vout->b_fullscreen = ! p_vout->b_fullscreen;
 
         SDL_WM_ToggleFullScreen(p_vout->p_sys->p_display);
 
@@ -606,7 +605,7 @@ static int SDLOpenDisplay( vout_thread_t *p_vout )
     /* init flags and cursor */
     flags = SDL_ANYFORMAT | SDL_HWPALETTE;
 
-    if( p_vout->p_sys->b_fullscreen )
+    if( p_vout->b_fullscreen )
     {
         flags |= SDL_FULLSCREEN;
     }
index 47c7c40c112f2e72bff107f9c10227cc0694005f..cc9bcbbbd41422bf3ddff487353636fb7751e55b 100644 (file)
@@ -2,7 +2,7 @@
  * vout_x11.c: X11 video output display method
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: vout_x11.c,v 1.22 2001/04/28 03:36:25 sam Exp $
+ * $Id: vout_x11.c,v 1.23 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -109,9 +109,6 @@ typedef struct vout_sys_s
     /* Mouse pointer properties */
     boolean_t           b_mouse;         /* is the mouse pointer displayed ? */
 
-    /* Displaying fullscreen */
-    boolean_t           b_fullscreen;
-
 } vout_sys_t;
 
 /* Fullscreen needs to be able to hide the wm decorations */
@@ -215,7 +212,7 @@ static int vout_Create( vout_thread_t *p_vout )
     }
     p_vout->p_sys->i_screen = DefaultScreen( p_vout->p_sys->p_display );
 
-    p_vout->p_sys->b_fullscreen
+    p_vout->b_fullscreen
         = main_GetIntVariable( VOUT_FULLSCREEN_VAR, VOUT_FULLSCREEN_DEFAULT );
 
     /* Spawn base window - this window will include the video output window,
@@ -380,7 +377,6 @@ static int vout_Manage( vout_thread_t *p_vout )
 {
     XEvent      xevent;                                         /* X11 event */
     boolean_t   b_resized;                        /* window has been resized */
-    boolean_t   b_gofullscreen;                    /* user wants full-screen */
     char        i_key;                                    /* ISO Latin-1 key */
     KeySym      x_key_symbol;
 
@@ -388,9 +384,8 @@ static int vout_Manage( vout_thread_t *p_vout )
      * output window's size changed, MapNotify and UnmapNotify to know if the
      * window is mapped (and if the display is useful), and ClientMessages
      * to intercept window destruction requests */
-    b_resized = 0;
-    b_gofullscreen = 0;
 
+    b_resized = 0;
     while( XCheckWindowEvent( p_vout->p_sys->p_display, p_vout->p_sys->window,
                               StructureNotifyMask | KeyPressMask |
                               ButtonPressMask | ButtonReleaseMask | 
@@ -456,7 +451,7 @@ static int vout_Manage( vout_thread_t *p_vout )
                             break;
                         case 'f':
                         case 'F':
-                            b_gofullscreen = 1;
+                            p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE;
                             break;
                         case '0':
                             network_ChannelJoin( 0 );
@@ -556,7 +551,7 @@ static int vout_Manage( vout_thread_t *p_vout )
         }
     }
 
-    if ( b_gofullscreen )
+    if ( p_vout->i_changes & VOUT_FULLSCREEN_CHANGE )
     {
         char *psz_display;
         /* Open display, unsing 'vlc_display' or the DISPLAY
@@ -565,7 +560,8 @@ static int vout_Manage( vout_thread_t *p_vout )
 
         intf_DbgMsg( "vout: changing full-screen status" );
 
-        p_vout->p_sys->b_fullscreen = !p_vout->p_sys->b_fullscreen;
+        p_vout->b_fullscreen = !p_vout->b_fullscreen;
+        p_vout->i_changes &= ~VOUT_FULLSCREEN_CHANGE;
 
         /* Get rid of the old window */
         XUnmapWindow( p_vout->p_sys->p_display, p_vout->p_sys->window );
@@ -750,7 +746,7 @@ static int X11CreateWindow( vout_thread_t *p_vout )
     boolean_t               b_map_notify;
 
     /* If we're full screen, we're full screen! */
-    if( p_vout->p_sys->b_fullscreen ) 
+    if( p_vout->b_fullscreen ) 
     {
         p_vout->p_sys->i_width = DisplayWidth( p_vout->p_sys->p_display, 
                                                p_vout->p_sys->i_screen );
@@ -798,7 +794,7 @@ static int X11CreateWindow( vout_thread_t *p_vout )
                        CWBackingStore | CWBackPixel | CWEventMask,
                        &xwindow_attributes );
 
-    if ( p_vout->p_sys->b_fullscreen )
+    if ( p_vout->b_fullscreen )
     {
         prop = XInternAtom(p_vout->p_sys->p_display, "_MOTIF_WM_HINTS", False);
         mwmhints.flags = MWM_HINTS_DECORATIONS;
@@ -889,7 +885,7 @@ static int X11CreateWindow( vout_thread_t *p_vout )
                                  CWColormap, &xwindow_attributes );
     }
 
-    if( p_vout->p_sys->b_fullscreen )
+    if( p_vout->b_fullscreen )
     {
         XSetInputFocus( p_vout->p_sys->p_display, p_vout->p_sys->window,
                         RevertToNone, CurrentTime );
index 6cd0ef1ecd2876017fbb8cfb5cb4092982ec1a73..b36f2067b14428d76a5baced2bdf66833edf3037 100644 (file)
@@ -2,7 +2,7 @@
  * vout_xvideo.c: Xvideo video output display method
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000, 2001 VideoLAN
- * $Id: vout_xvideo.c,v 1.13 2001/05/01 04:18:18 sam Exp $
+ * $Id: vout_xvideo.c,v 1.14 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Shane Harper <shanegh@optusnet.com.au>
  *          Vincent Seguin <seguin@via.ecp.fr>
@@ -128,9 +128,6 @@ typedef struct vout_sys_s
     boolean_t           b_mouse_pointer_visible;
     mtime_t             i_time_mouse_last_moved; /* used to auto-hide pointer*/
 
-    /* Displaying fullscreen */
-    boolean_t           b_fullscreen;
-
 } vout_sys_t;
 
 /* Fullscreen needs to be able to hide the wm decorations */
@@ -241,7 +238,7 @@ static int vout_Create( vout_thread_t *p_vout )
     }
     p_vout->p_sys->i_screen = DefaultScreen( p_vout->p_sys->p_display );
 
-    p_vout->p_sys->b_fullscreen
+    p_vout->b_fullscreen
         = main_GetIntVariable( VOUT_FULLSCREEN_VAR, VOUT_FULLSCREEN_DEFAULT );
     
     if( !XVideoCheckForXv( p_vout->p_sys->p_display ) )
@@ -336,12 +333,9 @@ static void vout_Destroy( vout_thread_t *p_vout )
 static int vout_Manage( vout_thread_t *p_vout )
 {
     XEvent      xevent;                                         /* X11 event */
-    boolean_t   b_toggle_fullscreen;               /* user wants full-screen */
     char        i_key;                                    /* ISO Latin-1 key */
     KeySym      x_key_symbol;
 
-    b_toggle_fullscreen = 0;
-
     /* Handle X11 events: ConfigureNotify events are parsed to know if the
      * output window's size changed, MapNotify and UnmapNotify to know if the
      * window is mapped (and if the display is useful), and ClientMessages
@@ -409,7 +403,7 @@ static int vout_Manage( vout_thread_t *p_vout )
                             break;
                         case 'f':
                         case 'F':
-                            b_toggle_fullscreen = 1;
+                            p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE;
                             break;
                         case '0':
                             network_ChannelJoin( 0 );
@@ -525,11 +519,11 @@ static int vout_Manage( vout_thread_t *p_vout )
         }
     }
 
-    if ( b_toggle_fullscreen )
+    if ( p_vout->i_changes & VOUT_FULLSCREEN_CHANGE )
     {
         intf_DbgMsg( "vout: changing full-screen status" );
 
-        p_vout->p_sys->b_fullscreen = !p_vout->p_sys->b_fullscreen;
+        p_vout->b_fullscreen = !p_vout->b_fullscreen;
 
         /* Get rid of the old window */
         XVideoDestroyWindow( p_vout );
@@ -717,7 +711,7 @@ static int XVideoCreateWindow( vout_thread_t *p_vout )
 
     /* Set main window's size */
     /* If we're full screen, we're full screen! */
-    if( p_vout->p_sys->b_fullscreen )
+    if( p_vout->b_fullscreen )
     {
         p_vout->p_sys->i_window_width = DisplayWidth( p_vout->p_sys->p_display,
                                                       p_vout->p_sys->i_screen );
@@ -761,7 +755,7 @@ static int XVideoCreateWindow( vout_thread_t *p_vout )
                            CWBackPixel | CWEventMask,
                            &xwindow_attributes );
 
-    if ( p_vout->p_sys->b_fullscreen )
+    if ( p_vout->b_fullscreen )
     {
         prop = XInternAtom(p_vout->p_sys->p_display, "_MOTIF_WM_HINTS", False);
         mwmhints.flags = MWM_HINTS_DECORATIONS;
@@ -837,7 +831,7 @@ static int XVideoCreateWindow( vout_thread_t *p_vout )
                   ButtonPressMask | ButtonReleaseMask | 
                   PointerMotionMask );
 
-    if( p_vout->p_sys->b_fullscreen )
+    if( p_vout->b_fullscreen )
     {
         XSetInputFocus( p_vout->p_sys->p_display, p_vout->p_sys->window,
                         RevertToNone, CurrentTime );
index adb54f27eb146a8afb66a67cbab6c7633f8ff635..b9f6b9cf2030445341266bef66ae55cf026d99a7 100644 (file)
@@ -2,7 +2,7 @@
  * ac3_iec958.c: ac3 to spdif converter
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: ac3_iec958.c,v 1.3 2001/05/06 04:32:02 sam Exp $
+ * $Id: ac3_iec958.c,v 1.4 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Stéphane Borel <stef@via.ecp.fr>
  *          Juha Yrjola <jyrjola@cc.hut.fi>
@@ -105,7 +105,7 @@ static const frame_size_t p_frame_size_code[64] =
  ****************************************************************************/
 void ac3_iec958_build_burst( ac3_spdif_thread_t *p_spdif )
 {
-    const u8 p_sync[4] = { 0x72, 0xF8, 0x1F, 0x4E };
+    const u8 p_sync[6] = { 0x72, 0xF8, 0x1F, 0x4E, 0x01, 0x00 };
     int      i_length  = p_spdif->ac3_info.i_frame_size;
 #ifndef HAVE_SWAB
     /* Skip the first byte if i_length is odd */
@@ -114,9 +114,7 @@ void ac3_iec958_build_burst( ac3_spdif_thread_t *p_spdif )
 #endif
 
     /* Add the spdif headers */
-    memcpy( p_spdif->p_iec, p_sync, 4 );
-    p_spdif->p_iec[4] = i_length ? 0x01 : 0x00;
-    p_spdif->p_iec[5] = 0x00;
+    memcpy( p_spdif->p_iec, p_sync, 6 );
     p_spdif->p_iec[6] = ( i_length * 8 ) & 0xFF;
     p_spdif->p_iec[7] = ( ( i_length * 8 ) >> 8 ) & 0xFF;
 
index 2666090085cceb5cb80ee7723333d7f4131f178b..173f18a104ceb7259c33e7044117aeb93fedeedc 100644 (file)
@@ -2,7 +2,7 @@
  * ac3_spdif.c: ac3 pass-through to external decoder with enabled soundcard
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: ac3_spdif.c,v 1.3 2001/05/06 04:32:02 sam Exp $
+ * $Id: ac3_spdif.c,v 1.4 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Stéphane Borel <stef@via.ecp.fr>
  *          Juha Yrjola <jyrjola@cc.hut.fi>
@@ -134,7 +134,8 @@ static int InitThread( ac3_spdif_thread_t * p_spdif )
         return -1;
     }
 
-    intf_WarnMsg( 1, "spdif: aout fifo created" );
+    intf_WarnMsg( 1, "spdif: aout fifo #%d created",
+                     p_spdif->p_aout_fifo->i_fifo );
 
     /* Check stream properties */
     if( ac3_iec958_parse_syncinfo( p_spdif ) < 0 )
@@ -156,8 +157,6 @@ static int InitThread( ac3_spdif_thread_t * p_spdif )
 
     GetChunk( &p_spdif->bit_stream, p_spdif->p_ac3 + sizeof(sync_frame_t),
         p_spdif->ac3_info.i_frame_size - sizeof(sync_frame_t) );
-    
-    vlc_cond_signal( &p_spdif->p_aout_fifo->data_wait );
 
     return 0;
 }
@@ -197,13 +196,11 @@ static void RunThread( ac3_spdif_thread_t * p_spdif )
         ac3_iec958_build_burst( p_spdif );
 
         vlc_mutex_lock (&p_spdif->p_aout_fifo->data_lock);
-
         p_spdif->p_aout_fifo->l_end_frame = 
                 (p_spdif->p_aout_fifo->l_end_frame + 1 ) & AOUT_FIFO_SIZE;
-
         vlc_mutex_unlock (&p_spdif->p_aout_fifo->data_lock);
 
-        /* Find syncword */
+        /* Find syncword again in case of stream discontinuity */
         while( ShowBits( &p_spdif->bit_stream, 16 ) != 0xb77 ) 
         {
             RemoveBits( &p_spdif->bit_stream, 8 );
index 9f9fdd278f3293a7c2dd03f7cc3b96be5b6b9c80..9cf87ff06ad0505c4d529319e9525a1031bca539 100644 (file)
@@ -2,7 +2,7 @@
  * ac3_spdif.h: header for ac3 pass-through
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: ac3_spdif.h,v 1.2 2001/05/01 04:18:18 sam Exp $
+ * $Id: ac3_spdif.h,v 1.3 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Stéphane Borel <stef@via.ecp.fr>
  *
@@ -21,8 +21,6 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  ****************************************************************************/
 
-#define SPDIF_FRAME_SIZE 6144
-
 typedef struct ac3_info_s
 {
     int i_bit_rate;
index 0be3fadc2561760e55616907049d9b838e551567..5db1fa9d77e7abab441151ba4e224b034cb93841 100644 (file)
@@ -2,7 +2,7 @@
  * aout_ext-dec.c : exported fifo management functions
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: aout_ext-dec.c,v 1.2 2001/05/06 04:32:02 sam Exp $
+ * $Id: aout_ext-dec.c,v 1.3 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *
@@ -119,6 +119,7 @@ aout_fifo_t * aout_CreateFifo( int i_type, int i_channels, long l_rate,
 
         case AOUT_ADEC_MONO_FIFO:
         case AOUT_ADEC_STEREO_FIFO:
+        case AOUT_ADEC_SPDIF_FIFO:
             p_aout->fifo[i_fifo].b_die = 0;
 
             p_aout->fifo[i_fifo].i_channels = i_channels;
@@ -221,6 +222,7 @@ void aout_FreeFifo( aout_fifo_t * p_fifo )
 
         case AOUT_ADEC_MONO_FIFO:
         case AOUT_ADEC_STEREO_FIFO:
+        case AOUT_ADEC_SPDIF_FIFO:
 
             free( p_fifo->buffer );
             free( p_fifo->date );
index c370444c63234f0b32b08bca0edec2d1d8cb15fe..fcb5f64d54cab0dcee47023ea84b6d792871af34 100644 (file)
@@ -2,7 +2,7 @@
  * aout_spdif: ac3 passthrough output
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: aout_spdif.c,v 1.2 2001/05/06 04:32:02 sam Exp $
+ * $Id: aout_spdif.c,v 1.3 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *          Stéphane Borel <stef@via.ecp.fr>
 #include "audio_output.h"
 #include "aout_common.h"
 
-/* temporary blank until I've found how to build
- * a real blank iec958 data frame */
-static u8 pi_spdif_blank [] =
-{
-    0x72, 0xf8, 0x1f, 0x4e, 0x01, 0x00, 0x00, 0x30, 
-    0x77, 0x0b, 0x07, 0x04, 0x40, 0x1c, 0xfc, 0xe1, 
-    0xcb, 0x01, 0x7d, 0x80, 0xb2, 0xfe, 0x40, 0xe8, 
-    0x06, 0x75, 0x84, 0x07, 0x14, 0x04, 0x0e, 0x14, 
-    0x84, 0x83, 0x56, 0xd5, 0xbe, 0x52, 0xad, 0x5b, 
-    0x27, 0xf4, 0x9f, 0xcf, 0xdf, 0x3f, 0x95, 0x6a, 
-    0x86, 0x3d, 0xba, 0xa6, 0xb0, 0x67, 0xbe, 0xa1, 
-    0xfd, 0x52, 0x9a, 0xd2, 0xb5, 0xcf, 0x7d, 0x5a, 
-    0xf2, 0x4d, 0x4f, 0x5a, 0xf6, 0xbd, 0xfa, 0x95, 
-    0xe9, 0x57, 0x3e, 0x95, 0xe9, 0x54, 0x77, 0x4d, 
-    0x9e, 0x4a, 0x54, 0xd7, 0x15, 0xf6, 0xb0, 0x77, 
-    0x3e, 0xdd, 0xab, 0x4c, 0xcf, 0xde, 0xc2, 0x6b, 
-    0x96, 0x86, 0xf5, 0x93, 0xa1, 0x35, 0xad, 0x56, 
-    0xeb, 0x5d, 0x4f, 0xea, 0xa6, 0x9d, 0xfa, 0x4a, 
-    0xa7, 0x13, 0x7f, 0xe8, 0xfd, 0xb8, 0xf2, 0xf3, 
-    0x9e, 0x2f, 0x73, 0xd7, 0xeb, 0x4d, 0xce, 0xf7, 
-    0xa2, 0xa9, 0x0d, 0x49, 0xe7, 0x53, 0x9e, 0xcf, 
-    0x7b, 0xd7, 0xfb, 0x5f, 0xab, 0x95, 0x54, 0x43, 
-    0xbb, 0xf6, 0xd5, 0x9a, 0x3e, 0xdf, 0x5e, 0x73, 
-    0xa7, 0x92, 0x9e, 0xca, 0x86, 0xd6, 0x33, 0xf9, 
-    0x2f, 0xa7, 0xef, 0xfe, 0x28, 0xef, 0xfc, 0x3f, 
-    0xf3, 0xf9, 0xcf, 0xe7, 0x20, 0x9f, 0xa8, 0x07, 
-    0x00, 0x63, 0xb6, 0xd6, 0x6d, 0x0d, 0xe7, 0xa0, 
-    0xd0, 0xc1, 0x1a, 0xb1, 0x35, 0xd8, 0x23, 0x47, 
-    0xa5, 0x62, 0x96, 0x41, 0xd7, 0x9c, 0xe3, 0x59, 
-    0x60, 0x9b, 0x15, 0xdb, 0xab, 0x03, 0x6a, 0x73, 
-    0xc5, 0xd6, 0x5b, 0x8d, 0xe6, 0x5a, 0xed, 0xc0, 
-    0x6c, 0x23, 0x2a, 0xb9, 0x65, 0xa7, 0xd6, 0x54, 
-    0xb6, 0xb1, 0x15, 0x6c, 0x31, 0x55, 0x6d, 0xad, 
-    0x07, 0x97, 0xb3, 0x11, 0x81, 0xb6, 0x14, 0x71, 
-    0xd4, 0xe6, 0xda, 0xb6, 0xa8, 0x35, 0x09, 0x36, 
-    0xe2, 0x85, 0x11, 0x45, 0x83, 0xad, 0x6a, 0x32, 
-    0x67, 0xe1, 0xad, 0x35, 0x1b, 0xc9, 0x5a, 0x9b, 
-    0x60, 0x06, 0x00, 0xf8, 0x05, 0x00, 0x00, 0x3c, 
-    0x26, 0x12, 0x72, 0x05, 0xad, 0x94, 0x14, 0x8e, 
-    0x07, 0x5e, 0xfb, 0x13, 0x91, 0x53, 0x83, 0x71, 
-    0xad, 0x52, 0x0a, 0x87, 0xba, 0x3a, 0xf7, 0x38, 
-    0x1a, 0xef, 0xa4, 0x65, 0x2e, 0x4b, 0x75, 0xeb, 
-    0x52, 0x32, 0xc4, 0xaa, 0xe8, 0x83, 0xf8, 0x85, 
-    0x51, 0x1d, 0x6f, 0x59, 0xea, 0xe3, 0x85, 0x07, 
-    0x19, 0xb1, 0x9f, 0x6e, 0x36, 0x6a, 0x1a, 0x71, 
-    0xa7, 0xec, 0x56, 0xed, 0xc8, 0x1b, 0xb6, 0xc3, 
-    0xfd, 0xd0, 0x98, 0xd2, 0xa3, 0xf3, 0x5a, 0xfc, 
-    0x1c, 0x5d, 0x60, 0x21, 0xc7, 0xf0, 0x08, 0x1e, 
-    0x03, 0x90, 0xb1, 0xd4, 0x31, 0x18, 0xbc, 0x27, 
-    0xb1, 0x6c, 0x8a, 0xf3, 0xe5, 0x68, 0x7a, 0x18, 
-    0x29, 0xf0, 0xeb, 0x78, 0xdf, 0xe1, 0x3f, 0xf3, 
-    0x67, 0x1b, 0xd4, 0x67, 0x20, 0x80, 0x0b, 0xb5, 
-    0x6e, 0xef, 0x45, 0xbd, 0xac, 0x48, 0xe0, 0x5e, 
-    0x3c, 0x6b, 0x3d, 0x7a, 0x7f, 0x38, 0xbd, 0xf1, 
-    0xd3, 0x8f, 0xbf, 0xa1, 0x98, 0x50, 0xa0, 0x6a, 
-    0x33, 0x5a, 0xc6, 0x2e, 0xfc, 0x8f, 0x8f, 0xcc, 
-    0x58, 0xcf, 0x57, 0x22, 0xa6, 0xf7, 0x82, 0x14, 
-    0x47, 0xea, 0x70, 0x81, 0x89, 0x86, 0x29, 0xb8, 
-    0x83, 0xae, 0xd8, 0x5a, 0x4d, 0xb7, 0x0a, 0x24, 
-    0xb5, 0xd6, 0x63, 0x4d, 0x46, 0x58, 0x79, 0xc5, 
-    0x5b, 0x66, 0x2a, 0x68, 0x5b, 0x6b, 0xb9, 0x63, 
-    0x6d, 0xad, 0x64, 0x92, 0xb1, 0xdb, 0xb3, 0xad, 
-    0x46, 0x58, 0xcd, 0xb6, 0x48, 0x73, 0x35, 0xd6, 
-    0x85, 0xc8, 0xf7, 0x68, 0xed, 0x88, 0x1a, 0x8b, 
-    0x35, 0xd6, 0x23, 0xad, 0x06, 0x9b, 0x80, 0x91, 
-    0x14, 0x23, 0x5a, 0x1c, 0xa9, 0x46, 0x4d, 0xb9, 
-    0x8e, 0x6c, 0xa3, 0xc3, 0x5a, 0x0b, 0x5d, 0xa6, 
-    0x6b, 0xad, 0xdb, 0x60, 0x26, 0x24, 0x8a, 0xb4, 
-    0x20, 0x69, 0xb0, 0xd6, 0x1b, 0x2c, 0xa2, 0x60, 
-    0x80, 0x0f, 0x00, 0x00, 0xe0, 0x53, 0xb4, 0x09, 
-    0x0a, 0x78, 0xe4, 0xff, 0x13, 0x71, 0x56, 0xfd, 
-    0x41, 0x08, 0xd7, 0x97, 0xb1, 0x43, 0x76, 0xe5, 
-    0x02, 0x29, 0x40, 0xdc, 0xb2, 0xbe, 0x24, 0x72, 
-    0x7e, 0xca, 0x30, 0x9d, 0x25, 0x92, 0x51, 0x73, 
-    0x24, 0xfc, 0x96, 0xca, 0x5a, 0xee, 0xed, 0xf8, 
-    0x65, 0x8e, 0x83, 0x94, 0xc2, 0xc2, 0x27, 0xd3, 
-    0x50, 0xb1, 0xe7, 0xca, 0xcd, 0x1f, 0xd0, 0x51, 
-    0x96, 0x34, 0xd0, 0x9d, 0x6a, 0xf5, 0x17, 0x45, 
-    0x66, 0x48, 0x51, 0xdd, 0x69, 0x53, 0xac, 0xdc, 
-    0xb1, 0xfc, 0x38, 0x79, 0x1b, 0x2a, 0xc1, 0xc8, 
-    0x66, 0x01, 0xb5, 0xa1, 0x10, 0x89, 0x83, 0x59, 
-    0xd6, 0xa6, 0x99, 0x66, 0x97, 0x60, 0xa4, 0x5e, 
-    0x90, 0xdc, 0xf3, 0xb7, 0xa0, 0xc0, 0x54, 0xc8, 
-    0xc5, 0x72, 0xf4, 0x65, 0x3c, 0xb9, 0x82, 0xa6, 
-    0xa4, 0x99, 0x4b, 0xa0, 0x3b, 0xfa, 0x3f, 0x29, 
-    0xfe, 0x00, 0x29, 0x77, 0xcc, 0xd3, 0x7a, 0x20, 
-    0xc2, 0x38, 0xbe, 0xba, 0xdf, 0x35, 0x03, 0xbc, 
-    0x01, 0xd1, 0x99, 0x5a, 0x65, 0x10, 0x2b, 0xac, 
-    0xca, 0xf9, 0x0a, 0x87, 0x6e, 0x73, 0xe2, 0x20, 
-    0x2e, 0x83, 0xe2, 0x4f, 0x32, 0x43, 0x6d, 0xb3, 
-    0xb5, 0x36, 0x6b, 0xa5, 0xd6, 0x5a, 0xaa, 0xdd, 
-    0x48, 0x6b, 0xb4, 0x76, 0x70, 0xea, 0x02, 0x63, 
-    0xb6, 0x69, 0x06, 0xdb, 0x83, 0xb8, 0x6c, 0x60, 
-    0x91, 0xa6, 0xa1, 0x47, 0x5a, 0x6b, 0x39, 0xdb, 
-    0x69, 0xad, 0xd6, 0x18, 0x4a, 0xa9, 0x6c, 0x23, 
-    0x88, 0x84, 0x36, 0xef, 0xe5, 0xda, 0xca, 0xba, 
-    0x42, 0x70, 0xb1, 0xd6, 0x69, 0x8d, 0xc8, 0xda, 
-    0x99, 0x29, 0x2e, 0xb7, 0x5c, 0x2e, 0xdd, 0xc6, 
-    0x22, 0x99, 0x28, 0x5e, 0x4a, 0x41, 0x88, 0x6a, 
-    0xa8, 0xe6, 0x7a, 0x90, 0x6a, 0x78, 0xd6, 0x9a, 
-    0x84, 0x35, 0x86, 0x83, 0x36, 0x76, 0x40, 0x04, 
-    0x00, 0xf8, 0x05, 0x00, 0x00, 0x40, 0x92, 0xee, 
-    0x7b, 0xa1, 0xc8, 0xcf, 0x0b, 0x55, 0x6b, 0x30, 
-    0xb5, 0x7b, 0x55, 0x72, 0x58, 0x74, 0x69, 0xf9, 
-    0xd6, 0x9f, 0x89, 0x21, 0x0d, 0x5b, 0x90, 0x48, 
-    0xde, 0x08, 0x65, 0xd4, 0x2b, 0x08, 0xe1, 0x22, 
-    0xd0, 0xbd, 0xe9, 0x93, 0xb1, 0x80, 0x59, 0x83, 
-    0xaa, 0xb7, 0x13, 0x57, 0x9f, 0xbf, 0xf8, 0x6c, 
-    0x6d, 0xf9, 0xe6, 0x22, 0xf5, 0xc7, 0xc0, 0xdc, 
-    0x17, 0x84, 0x63, 0xf8, 0xb3, 0x94, 0xb1, 0xd5, 
-    0xa9, 0x56, 0x87, 0xd4, 0xd8, 0x2a, 0xc8, 0x56, 
-    0x23, 0x70, 0x52, 0xb8, 0x66, 0x8b, 0x06, 0x5f, 
-    0x84, 0xd5, 0xc6, 0xa6, 0x5a, 0xb1, 0x6f, 0xef, 
-    0xcd, 0x7f, 0xe2, 0x9a, 0xb9, 0x9f, 0xff, 0x08, 
-    0xff, 0x73, 0xa7, 0x99, 0x7f, 0x57, 0xb7, 0xa8, 
-    0x19, 0xad, 0x11, 0x9c, 0xad, 0xd5, 0x97, 0xd3, 
-    0x1a, 0x2e, 0x25, 0xa9, 0x42, 0x1d, 0x9e, 0x82, 
-    0x05, 0xfa, 0xe0, 0xbf, 0x40, 0x2b, 0xce, 0xba, 
-    0xd7, 0x0d, 0x44, 0xdb, 0xa7, 0x00, 0x27, 0x7d, 
-    0x91, 0x66, 0x51, 0xfe, 0x75, 0xa0, 0xa4, 0xc4, 
-    0x33, 0x0b, 0x04, 0x2c, 0xa8, 0x07, 0x4c, 0x94, 
-    0xba, 0xf4, 0x60, 0x61, 0x41, 0x34, 0xb6, 0xc6, 
-    0x6b, 0xad, 0xc3, 0x18, 0xa4, 0x91, 0x5a, 0x6b, 
-    0xc1, 0xa6, 0x69, 0xa4, 0xda, 0x5a, 0xd7, 0xb2, 
-    0x93, 0x68, 0x36, 0xad, 0x19, 0x73, 0x4a, 0x1b, 
-    0x63, 0x6e, 0x3b, 0x4e, 0xb5, 0x66, 0x5c, 0xa9, 
-    0x36, 0x6c, 0x89, 0xb4, 0x54, 0x73, 0x36, 0xd5, 
-    0xa6, 0xc6, 0xf6, 0x31, 0x44, 0x8d, 0x5a, 0x53, 
-    0x58, 0xdb, 0x9b, 0x6a, 0xe2, 0x62, 0xcd, 0x36, 
-    0xa3, 0x22, 0x1b, 0x63, 0xc5, 0x35, 0xad, 0xb0, 
-    0x75, 0xb0, 0xa3, 0xa5, 0x5a, 0x73, 0x35, 0xa7, 
-    0x69, 0xad, 0x0b, 0x0f, 0xd5, 0xc0, 0xcd, 0x36, 
-    0x5a, 0x6b, 0x39, 0xa6, 0x2b, 0xab, 0xf4, 0x5b, 
-    0x80, 0x0f, 0x00, 0x00, 0xe0, 0x53, 0x6e, 0x14, 
-    0xd2, 0xf1, 0xc9, 0x82, 0x52, 0xf6, 0xdc, 0xc4, 
-    0x5a, 0xe1, 0x6e, 0x28, 0xfe, 0x30, 0xa3, 0xbb, 
-    0x56, 0x83, 0x82, 0x4c, 0x37, 0xf6, 0x12, 0x29, 
-    0xd7, 0x87, 0x38, 0x1f, 0xec, 0x55, 0xfa, 0x1c, 
-    0xcc, 0x1e, 0x5e, 0x30, 0x2d, 0x00, 0x4a, 0x67, 
-    0x45, 0x38, 0xe4, 0xcf, 0xeb, 0x44, 0x32, 0x78, 
-    0x34, 0xa4, 0x1b, 0x0e, 0x35, 0x34, 0x63, 0xdf, 
-    0xa6, 0xb2, 0x92, 0xba, 0xfc, 0x7d, 0x4d, 0xad, 
-    0xad, 0x53, 0xba, 0xe5, 0x30, 0x52, 0xbf, 0x31, 
-    0x39, 0x57, 0x42, 0x9f, 0xc0, 0x80, 0x89, 0x1c, 
-    0x39, 0xed, 0x7b, 0xb7, 0x1c, 0x5a, 0xfc, 0x9d, 
-    0xbe, 0xe5, 0x14, 0x7e, 0xd5, 0xad, 0xc8, 0x65, 
-    0xb7, 0x70, 0x3e, 0x83, 0x1a, 0x6c, 0x3c, 0xc4, 
-    0x35, 0x9e, 0xc8, 0x36, 0xdc, 0xa4, 0x09, 0xc9, 
-    0x07, 0x1e, 0xe3, 0x68, 0x0b, 0x88, 0x5e, 0x24, 
-    0x9e, 0x00, 0x7e, 0x09, 0xd6, 0xc5, 0x2b, 0x06, 
-    0x89, 0xb5, 0x8a, 0x48, 0x0d, 0xae, 0x81, 0x9e, 
-    0x18, 0xad, 0x36, 0xf6, 0xa1, 0xf0, 0x70, 0x7d, 
-    0x1d, 0x57, 0x53, 0x02, 0xe1, 0xbd, 0xc7, 0xf2, 
-    0x85, 0x43, 0xf1, 0xdc, 0xdf, 0x06, 0x18, 0xb3, 
-    0x2a, 0xc7, 0x2b, 0x0d, 0xd6, 0x18, 0xad, 0xbd, 
-    0x9a, 0x82, 0x35, 0x5b, 0x73, 0xad, 0xcc, 0x5a, 
-    0xb6, 0xb5, 0x1b, 0xd5, 0x70, 0xb5, 0x94, 0xb2, 
-    0xd8, 0x46, 0x15, 0xf9, 0x5a, 0x8c, 0xd9, 0xd6, 
-    0x25, 0xad, 0xf4, 0x9a, 0xad, 0xa9, 0x48, 0x6b, 
-    0xd6, 0x8b, 0xc4, 0xca, 0x02, 0xdd, 0xc4, 0x3a, 
-    0x1a, 0x81, 0x92, 0xc6, 0x1b, 0xcd, 0xe7, 0x5a, 
-    0xb6, 0x31, 0xad, 0x31, 0x32, 0xb4, 0x9d, 0xd6, 
-    0x10, 0x07, 0xa4, 0x91, 0xad, 0xd9, 0x9a, 0x62, 
-    0xb5, 0xd6, 0x82, 0xad, 0x83, 0x4d, 0x62, 0x49, 
-    0xad, 0x29, 0x9a, 0x6d, 0x29, 0xa7, 0x60, 0xbd, 
-    0x00, 0xf8, 0x05, 0x00, 0x00, 0x3a, 0xec, 0x5b, 
-    0x6c, 0xeb, 0x2f, 0x28, 0xed, 0x61, 0x82, 0x7e, 
-    0xee, 0x10, 0x49, 0x40, 0xd0, 0xda, 0xe3, 0x4a, 
-    0xf7, 0x9f, 0xac, 0x7f, 0xbf, 0x3c, 0x08, 0xbe, 
-    0x86, 0x93, 0x57, 0xe7, 0xb2, 0x84, 0xf7, 0xda, 
-    0xa1, 0xf0, 0x4a, 0x76, 0xb0, 0xb7, 0xae, 0x9e, 
-    0x40, 0xb6, 0x84, 0x2f, 0xb4, 0xd0, 0x2d, 0x08, 
-    0x6a, 0xe5, 0x06, 0x0e, 0xc0, 0xd2, 0x74, 0x1c, 
-    0x1a, 0x7b, 0xd3, 0x16, 0xd7, 0xbc, 0x83, 0xd8, 
-    0x53, 0x78, 0xe4, 0x46, 0xf2, 0x8f, 0x59, 0x3d, 
-    0x14, 0xde, 0x3e, 0x9f, 0x16, 0x49, 0xf8, 0x49, 
-    0x5d, 0xad, 0xe3, 0x1c, 0x44, 0xeb, 0x5e, 0xfd, 
-    0x2d, 0xe1, 0xcc, 0xc4, 0x79, 0x73, 0x8d, 0x58, 
-    0x87, 0x7e, 0x00, 0x94, 0xb6, 0xe4, 0x85, 0x5c, 
-    0x67, 0x84, 0x7a, 0x8d, 0xfb, 0x3f, 0x43, 0x06, 
-    0xd0, 0xf3, 0x3d, 0xac, 0x46, 0x80, 0xcb, 0x5a, 
-    0xc1, 0xc9, 0x49, 0xf5, 0x9d, 0xaa, 0x18, 0x57, 
-    0x38, 0x07, 0x9b, 0x65, 0xf8, 0xbd, 0x2f, 0xfa, 
-    0x3a, 0xad, 0x34, 0xfc, 0x5c, 0xb7, 0x0f, 0x47, 
-    0xc2, 0xba, 0x19, 0xba, 0xca, 0x99, 0xb5, 0x3a, 
-    0xd2, 0x2e, 0x26, 0x89, 0xcd, 0xb5, 0x54, 0x8b, 
-    0x35, 0x43, 0x6b, 0xca, 0x1b, 0x4e, 0x8d, 0x58, 
-    0x5b, 0x53, 0x05, 0x36, 0xb9, 0xa2, 0x69, 0x1a, 
-    0x6b, 0x4d, 0x42, 0x5c, 0xa7, 0xaa, 0x4f, 0x39, 
-    0xd7, 0x7a, 0x6a, 0x29, 0x61, 0x6b, 0x36, 0x0b, 
-    0xb3, 0x0d, 0x62, 0x5b, 0xab, 0xd9, 0x91, 0x3c, 
-    0x6d, 0x44, 0x63, 0x84, 0xc6, 0x48, 0x75, 0xb2, 
-    0x48, 0x6d, 0xd9, 0xd6, 0x64, 0xcd, 0x82, 0x1c, 
-    0xa2, 0xa8, 0xca, 0x29, 0x16, 0x4a, 0xd2, 0x8d, 
-    0x6b, 0x29, 0xc7, 0x1a, 0xcd, 0x35, 0x5a, 0x74, 
-    0x54, 0xa7, 0x29, 0x42, 0x6b, 0xb6, 0xa8, 0x9a, 
-    0xa1, 0x31, 0x03, 0x81, 0x00, 0x96, 0x2a, 0x60, 
-};
+#define BLANK_FRAME_MAX 1000
 
 /*****************************************************************************
  * aout_SpdifThread: audio output thread that sends raw spdif data
  *                   to an external decoder
  *****************************************************************************
- * This output thread is quite specific as it can only handle one fifo.
- * Now fifo #0 is hardcoded, but when the output is launched by the decoder,
- * we'll be able to associate the related fifo to this output.
+ * This output thread is quite specific as it can only handle one fifo now.
  *
- * Note: all this is wrong: spdif can demux up to 8 ac3 streams, and can
- * even take care of time stamps (cf ac3 spec).
+ * Note: spdif can demux up to 8 ac3 streams, and can even take
+ * care of time stamps (cf ac3 spec).
  *****************************************************************************/
 void aout_SpdifThread( aout_thread_t * p_aout )
 {
-    u8 *        pi_blank;
-    boolean_t   b_have_data;
-    mtime_t     date;
+    u8          pi_spdif_blank [9] =
+                    { 0x72, 0xf8, 0x1f, 0x4e, 0x01, 0x00, 0x08, 0x00, 0x77 };
+    u8          pi_blank[SPDIF_FRAME_SIZE];
+    int         i_fifo;
+    int         i_frame;
+    int         i_blank;
 
-    /* when the output is launched from the decoder,
-     * we won't have to use a hardcoded value for frame size */
-    pi_blank = malloc( 6144/*p_aout->fifo[0].l_frame_size*/ );
+    /* get a blank frame ready */
     memset( pi_blank, 0, sizeof(pi_blank) );
     memcpy( pi_blank, pi_spdif_blank, sizeof(pi_spdif_blank) );
+   
+    intf_WarnMsg( 1, "aout info: starting spdif output loop" );
+
+    /* variable used to compute the nnumber of blank frames since the
+     * last significant frame */
+    i_blank = 0;
 
-    /* the thread wait until there is some data is aout fifo */
-    vlc_mutex_lock( &p_aout->fifo[0].data_lock);
-    vlc_cond_wait( &p_aout->fifo[0].data_wait,
-                   &p_aout->fifo[0].data_lock);
-    vlc_mutex_unlock (&p_aout->fifo[0].data_lock);
-        
-    date = mdate();
     while( !p_aout->b_die )
     {
-        /* we leave some time for aout fifo to fill */
-        msleep( 20000 );
+        /* we leave some time for aout fifo to fill and not to stress
+         * the external decoder too much */
+        msleep( 10000 );
 
-        vlc_mutex_lock( &p_aout->fifo[0].data_lock );
-        b_have_data = !AOUT_FIFO_ISEMPTY( p_aout->fifo[0] );
-        vlc_mutex_unlock (&p_aout->fifo[0].data_lock);
+        /* variable to check that we send data to the decoder
+         * once per loop at least */
+        i_frame = 0;
 
-        if( b_have_data )
+        /* FIXME: find a way to hnadle the locks here */
+        for( i_fifo = 0 ; i_fifo < AOUT_MAX_FIFOS ; i_fifo++ )
         {
-            /* play spdif frame to the external decoder */
-            date = mdate();
-            p_aout->pf_play( p_aout,
-                             p_aout->fifo[0].buffer +
-                             p_aout->fifo[0].l_frame_size *
-                                        p_aout->fifo[0].l_start_frame,
-                             p_aout->fifo[0].l_frame_size );
-
-            vlc_mutex_lock( &p_aout->fifo[0].data_lock);
-            p_aout->fifo[0].l_start_frame = 
-                (p_aout->fifo[0].l_start_frame + 1 ) & AOUT_FIFO_SIZE;
-            vlc_mutex_unlock (&p_aout->fifo[0].data_lock);
+            /* the loop read each fifo so that we can change the stream
+             * on the fly but mulitplexing is not handled yet so
+             * the sound will be broken is more than one fifo has data */ 
+            /* TODO: write the muliplexer :) */
+            if( p_aout->fifo[i_fifo].i_type == AOUT_ADEC_SPDIF_FIFO )
+            {
+//                vlc_mutex_lock( &p_aout->fifo[i_fifo].data_lock );
+                if( p_aout->fifo[i_fifo].b_die )
+                {
+//                    vlc_mutex_unlock( &p_aout->fifo[i_fifo].data_lock );
+                    aout_FreeFifo( &p_aout->fifo[i_fifo] );
+                }
+                else if( !AOUT_FIFO_ISEMPTY( p_aout->fifo[i_fifo] ) )
+                {
+                    vlc_mutex_unlock( &p_aout->fifo[i_fifo].data_lock );
+                    /* play spdif frame to the external decoder */
+                    p_aout->pf_play( p_aout,
+                                     p_aout->fifo[i_fifo].buffer +
+                                        p_aout->fifo[i_fifo].l_start_frame*
+                                        SPDIF_FRAME_SIZE,
+                                     p_aout->fifo[i_fifo].l_frame_size );
+        
+//                    vlc_mutex_lock( &p_aout->fifo[i_fifo].data_lock );
+                    p_aout->fifo[i_fifo].l_start_frame = 
+                        (p_aout->fifo[i_fifo].l_start_frame + 1 )
+                        & AOUT_FIFO_SIZE;
+//                    vlc_mutex_unlock( &p_aout->fifo[i_fifo].data_lock );
+                    
+                    i_frame++;
+                    i_blank = 0;
+                }
+            }
         }
-        else
+        if( !i_frame )
         {
-            intf_WarnMsg( 2, "spdif warning: waiting (%lld)",
-                p_aout->fifo[0].date[p_aout->fifo[0].l_start_frame-1] - date );
-
-            date = mdate();
             /* insert blank frame for stream continuity to
              * the external decoder */
-            p_aout->pf_play( p_aout, pi_blank, p_aout->fifo[0].l_frame_size );
+            p_aout->pf_play( p_aout, pi_blank, SPDIF_FRAME_SIZE );
+
+            /* we kill the output if we don't have any stream */
+            if( ++i_blank > BLANK_FRAME_MAX )
+            {
+                p_aout->b_die = 1;
+            }
         }
     }
+    
+    intf_WarnMsg( 2, "aout info: exiting spdif loop" );
 
     return;
 }
index 6bfc84efaa1bd6c0ecb33b9eb0ebbd2d38ac9020..77c60cc5801acc2a66be82138ad89601117a636a 100644 (file)
@@ -4,7 +4,7 @@
  * decoders.
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: input.c,v 1.105 2001/05/01 12:22:18 sam Exp $
+ * $Id: input.c,v 1.106 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -541,13 +541,10 @@ void input_FileClose( input_thread_t * p_input )
 void input_NetworkOpen( input_thread_t * p_input )
 {
     char                *psz_server = NULL;
+    char                *psz_broadcast = NULL;
     int                 i_port = 0;
     int                 i_opt;
     struct sockaddr_in  sock;
-    char *              psz_broadcast;
-    
-    /* Are we broadcasting ? */
-    psz_broadcast = main_GetPszVariable( INPUT_BROADCAST_VAR, NULL );
     
     /* Get the remote server */
     if( p_input->p_source != NULL )
@@ -584,7 +581,31 @@ void input_NetworkOpen( input_thread_t * p_input )
                 *psz_port = '\0';
                 psz_port++;
 
-                i_port = atoi( psz_port );
+                psz_broadcast = psz_port;
+                while( *psz_broadcast && *psz_broadcast != ':' )
+                {
+                    psz_broadcast++;
+                }
+
+                if( *psz_broadcast )
+                {
+                    *psz_broadcast = '\0';
+                    psz_broadcast++;
+                    while( *psz_broadcast && *psz_broadcast == ':' )
+                    {
+                        psz_broadcast++;
+                    }
+                }
+                else
+                {
+                    psz_broadcast = NULL;
+                }
+
+                /* port before broadcast address */
+                if( *psz_port != ':' )
+                {
+                    i_port = atoi( psz_port );
+                }
             }
         }
         else
@@ -605,7 +626,16 @@ void input_NetworkOpen( input_thread_t * p_input )
     {
         i_port = main_GetIntVariable( INPUT_PORT_VAR, INPUT_PORT_DEFAULT );
     }
-    
+
+    if( psz_broadcast == NULL )
+    {
+        /* Are we broadcasting ? */
+        psz_broadcast = main_GetPszVariable( INPUT_BROADCAST_VAR, NULL );
+    }
+
+    intf_WarnMsg( 2, "input: server: %s port: %d broadcast: %s",
+                     psz_server, i_port, psz_broadcast );
+
     /* Open a SOCK_DGRAM (UDP) socket, in the AF_INET domain, automatic (0)
      * protocol */
     p_input->i_handle = socket( AF_INET, SOCK_DGRAM, 0 );
index 9e2f42d7e00799b907340d9a8b7b7a1428359416..a157fe2647b03d97c595dd9ad29ae75fc1ce5763 100644 (file)
@@ -5,7 +5,7 @@
  * thread, and destroy a previously oppened video output thread.
  *****************************************************************************
  * Copyright (C) 2000 VideoLAN
- * $Id: video_output.c,v 1.123 2001/05/06 04:32:02 sam Exp $
+ * $Id: video_output.c,v 1.124 2001/05/06 18:32:30 stef Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -178,9 +178,11 @@ vout_thread_t * vout_CreateThread   ( int *pi_status )
     p_vout->i_height              = main_GetIntVariable( VOUT_HEIGHT_VAR,
                                                          VOUT_HEIGHT_DEFAULT );
     p_vout->i_bytes_per_line      = p_vout->i_width * 2;
-    p_vout->i_screen_depth        = 15;
+    p_vout->i_screen_depth        = main_GetIntVariable( VOUT_DEPTH_VAR,
+                                                         VOUT_DEPTH_DEFAULT );
     p_vout->i_bytes_per_pixel     = 2;
-    p_vout->f_gamma               = VOUT_GAMMA;
+    p_vout->f_gamma               = VOUT_GAMMA_DEFAULT; // FIXME: replace with 
+                                                        // variable
     p_vout->b_need_render         = 1;
     p_vout->b_YCbr                = 0;
     
@@ -189,6 +191,8 @@ vout_thread_t * vout_CreateThread   ( int *pi_status )
     p_vout->b_info                = 0;
     p_vout->b_interface           = 0;
     p_vout->b_scale               = 1;
+    p_vout->b_fullscreen          = main_GetIntVariable( VOUT_FULLSCREEN_VAR,
+                                                     VOUT_FULLSCREEN_DEFAULT );
 
     intf_WarnMsg( 1, "wished configuration: %dx%d, %d/%d bpp (%d Bpl)",
                   p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,