]> git.sesse.net Git - vlc/commitdiff
*initialization bugfixes in input_dvd
authorStéphane Borel <stef@videolan.org>
Tue, 15 May 2001 01:01:44 +0000 (01:01 +0000)
committerStéphane Borel <stef@videolan.org>
Tue, 15 May 2001 01:01:44 +0000 (01:01 +0000)
*added a b_stopped flag to interface playlist to have a stop function in
interface plugins. As a consequence, the playlist no longer loops on end
but wait for the user to press 'play' or to add another item (gtk/gnome
interface). I think that other plugins are broken but it shouldn't be
difficult to repair: just add a 'p_main->p_playlist->b_stopped = 0' in
play functions and 'p_main->p_playlist->b_stopped = 1' when you have to
stop.

*Updated gtk interface so that it has the same features as gnome. I
think I will merge the code so that we don't have to copy and paste each
change. Only the .glade file would be different.

31 files changed:
include/intf_playlist.h
plugins/dvd/input_dvd.c
plugins/gnome/gnome_callbacks.c
plugins/gnome/gnome_callbacks.h
plugins/gnome/gnome_interface.c
plugins/gnome/gnome_playlist.c
plugins/gnome/intf_gnome.c
plugins/gnome/intf_gnome.glade
plugins/gtk/Makefile
plugins/gtk/gtk_callbacks.c
plugins/gtk/gtk_callbacks.h
plugins/gtk/gtk_control.c [new file with mode: 0644]
plugins/gtk/gtk_control.h [new file with mode: 0644]
plugins/gtk/gtk_interface.c
plugins/gtk/gtk_interface.h
plugins/gtk/gtk_menu.c [new file with mode: 0644]
plugins/gtk/gtk_menu.h [new file with mode: 0644]
plugins/gtk/gtk_modules.c [new file with mode: 0644]
plugins/gtk/gtk_modules.h [new file with mode: 0644]
plugins/gtk/gtk_open.c [new file with mode: 0644]
plugins/gtk/gtk_open.h [new file with mode: 0644]
plugins/gtk/gtk_playlist.c
plugins/gtk/gtk_playlist.h
plugins/gtk/gtk_preferences.c [new file with mode: 0644]
plugins/gtk/gtk_preferences.h [new file with mode: 0644]
plugins/gtk/intf_gtk.c
plugins/gtk/intf_gtk.glade
plugins/gtk/intf_gtk.h
src/audio_output/aout_spdif.c
src/interface/interface.c
src/interface/intf_playlist.c

index 5f6b1c9ae1bc7e1fdb0e992396e97366109c423b..56a6764681554cf995dc2528e956be2104b09932 100644 (file)
@@ -2,7 +2,7 @@
  * intf_playlist.h : Playlist functions
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_playlist.h,v 1.2 2001/03/21 13:42:33 sam Exp $
+ * $Id: intf_playlist.h,v 1.3 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -45,6 +45,7 @@ typedef struct playlist_s
 
     int                   i_mode;  /* parse mode (random, forward, backward) */
     int                   i_seed;               /* seed used for random mode */
+    boolean_t             b_stopped;
 
     vlc_mutex_t           change_lock;
 
index 69eba23e0163b725eeeac019a806ce5a87e56f50..ae5656113dc7335544e7d18c1e5db762b9a2ffcf 100644 (file)
@@ -10,7 +10,7 @@
  *  -dvd_udf to find files
  *****************************************************************************
  * Copyright (C) 1998-2001 VideoLAN
- * $Id: input_dvd.c,v 1.57 2001/05/07 04:42:42 sam Exp $
+ * $Id: input_dvd.c,v 1.58 2001/05/15 01:01:44 stef Exp $
  *
  * Author: Stéphane Borel <stef@via.ecp.fr>
  *
@@ -562,6 +562,9 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
 
     vlc_mutex_lock( &p_input->stream.stream_lock );
 
+    /* we can't use the interface slider until initilization is complete */
+    p_input->stream.b_seekable = 0;
+
     if( p_area != p_input->stream.p_selected_area )
     {
 
@@ -581,7 +584,7 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
 
         /* uodate title environnement variable so that we don't
          * loop on the same title forever */
-        main_PutIntVariable( INPUT_TITLE_VAR, p_dvd->i_title + 1 );
+//        main_PutIntVariable( INPUT_TITLE_VAR, p_dvd->i_title + 1 );
 
         /* ifo vts */
         if( IfoTitleSet( p_dvd->p_ifo ) < 0 )
@@ -947,7 +950,9 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
     }
 
     /* warn interface that something has changed */
+    p_input->stream.b_seekable = 1;
     p_input->stream.b_changed = 1;
+intf_WarnMsg( 3, "Pos: %lld Size: %lld", p_input->stream.p_selected_area->i_tell,p_input->stream.p_selected_area->i_size );
 
     vlc_mutex_unlock( &p_input->stream.stream_lock );
 
@@ -1153,6 +1158,7 @@ static int DVDRead( input_thread_t * p_input,
 
     if( b_eot )
     {
+        intf_WarnMsg( 3, "dvd info: new title" );
         p_dvd->i_title++;
         DVDSetArea( p_input, p_area );
         return 0;
index 1d61cb49c116a2592ae4eceb57cca996eeb17725..7b7c20241e2faa1c41879595cccdb0e4c10a8afb 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.28 2001/05/10 06:47:31 sam Exp $
+ * $Id: gnome_callbacks.c,v 1.29 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -113,47 +113,6 @@ 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 );
-
-    switch( info )
-    {
-    case DROP_ACCEPT_TEXT_PLAIN: /* FIXME: handle multiple files */
-
-        if( i_len < 1 )
-        {
-            return;
-        }
-
-        /* get rid of ' ' at the end */
-        *( psz_text + i_len - 1 ) = 0;
-
-        intf_WarnMsg( 3, "intf: dropped text/uri-list data `%s'", psz_text );
-        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_text );
-
-        break;
-
-    case DROP_ACCEPT_TEXT_URI_LIST: /* FIXME: handle multiple files */
-
-        if( i_len < 2 )
-        {
-            return;
-        }
-
-        /* get rid of \r\n at the end */
-        *( psz_text + i_len - 2 ) = 0;
-
-        intf_WarnMsg( 3, "intf: dropped text/uri-list data `%s'", psz_text );
-        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_text );
-        break;
-
-    default:
-
-        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;
 
@@ -166,8 +125,7 @@ on_intf_window_drag_data_received      (GtkWidget       *widget,
      }
      
     intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
-
-#endif
+    p_main->p_playlist->b_stopped = 0;
 }
 
 
@@ -741,10 +699,10 @@ on_toolbar_stop_clicked                (GtkButton       *button,
 
     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;
+        p_intf->p_input->b_eof = 1;
+        p_main->p_playlist->i_index--;
     }
+    p_main->p_playlist->b_stopped = 1;
 }
 
 
@@ -758,6 +716,20 @@ on_toolbar_play_clicked                (GtkButton       *button,
     {
         input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
     }
+    else if( p_main->p_playlist->b_stopped )
+    {
+        if( p_main->p_playlist->i_size )
+        {
+            intf_PlaylistJumpto( p_main->p_playlist,
+                                 p_main->p_playlist->i_index );
+            p_main->p_playlist->b_stopped = 0;
+        }
+        else
+        {
+            on_toolbar_open_clicked( button, user_data );
+        }
+    }
+
 }
 
 
@@ -879,6 +851,7 @@ on_popup_play_activate                 (GtkMenuItem     *menuitem,
     if( p_intf->p_input != NULL )
     {
         input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
+        p_main->p_playlist->b_stopped = 0;
     }
 }
 
@@ -1210,6 +1183,7 @@ on_fileopen_ok_clicked                 (GtkButton       *button,
     }
 
     intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
 }
 
 
@@ -1356,6 +1330,7 @@ on_disc_ok_clicked                     (GtkButton       *button,
     }
 
     intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
 }
 
 
@@ -1468,6 +1443,7 @@ on_network_ok_clicked                  (GtkButton       *button,
     }
 
     intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
 }
 
 
@@ -1545,6 +1521,7 @@ on_jump_apply_clicked                  (GtkButton       *button,
     {
         input_Seek( p_intf->p_input, i_seek );
     }
+    p_main->p_playlist->b_stopped = 0;
 #endif
 }
 
@@ -1687,4 +1664,3 @@ on_preferences_cancel_clicked          (GtkButton       *button,
 {
     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
 }
-
index 4b88c2414d88614841d30910a375958ae5717bb3..c4b88e068b438f4bc5273c66831d806afb6ecebe 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.16 2001/05/06 18:32:30 stef Exp $
+ * $Id: gnome_callbacks.h,v 1.17 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *      
@@ -426,3 +426,7 @@ on_playlist_cancel_clicked             (GtkButton       *button,
 void
 on_popup_back_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
+
+void
+on_playlist_destroy                    (GtkObject       *object,
+                                        gpointer         user_data);
index 817f82f4334365d93dc735e482d6137527694eab..ad659fae00de5abd0ee5dacd4be4038f016973ca 100644 (file)
@@ -500,7 +500,6 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (slider);
   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);
 
@@ -510,7 +509,6 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (file_box);
   gtk_box_pack_start (GTK_BOX (vbox8), file_box, TRUE, TRUE, 0);
-  gtk_widget_set_usize (file_box, 500, 24);
 
   label_status = gtk_label_new ("");
   gtk_widget_ref (label_status);
@@ -524,7 +522,6 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "dvd_box", dvd_box,
                             (GtkDestroyNotify) gtk_widget_unref);
   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);
@@ -622,7 +619,6 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "network_box", network_box,
                             (GtkDestroyNotify) gtk_widget_unref);
   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);
@@ -810,7 +806,7 @@ static GnomeUIInfo intf_popup_uiinfo[] =
   },
   GNOMEUIINFO_SEPARATOR,
   {
-    GNOME_APP_UI_ITEM, N_("_Jump"),
+    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,
@@ -988,7 +984,6 @@ create_intf_popup (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_preferences",
                             intf_popup_uiinfo[17].widget,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_set_sensitive (intf_popup_uiinfo[17].widget, FALSE);
 
   gtk_widget_ref (intf_popup_uiinfo[18].widget);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator2",
@@ -1699,6 +1694,7 @@ create_intf_playlist (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (playlist_frame);
   gtk_container_add (GTK_CONTAINER (playlist_viewport), playlist_frame);
+  gtk_container_set_border_width (GTK_CONTAINER (playlist_frame), 4);
   gtk_frame_set_label_align (GTK_FRAME (playlist_frame), 0.05, 0.5);
 
   playlist_clist = gtk_clist_new (2);
@@ -1817,6 +1813,9 @@ create_intf_playlist (void)
   gtk_widget_show (playlist_cancel);
   GTK_WIDGET_SET_FLAGS (playlist_cancel, GTK_CAN_DEFAULT);
 
+  gtk_signal_connect (GTK_OBJECT (intf_playlist), "destroy",
+                      GTK_SIGNAL_FUNC (on_playlist_destroy),
+                      NULL);
   gtk_signal_connect (GTK_OBJECT (playlist_clist), "event",
                       GTK_SIGNAL_FUNC (on_playlist_clist_event),
                       NULL);
@@ -1870,6 +1869,7 @@ create_intf_jump (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (jump_frame);
   gtk_box_pack_start (GTK_BOX (jump_vbox), jump_frame, FALSE, FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (jump_frame), 5);
   gtk_frame_set_label_align (GTK_FRAME (jump_frame), 0.05, 0.5);
 
   jump_box = gtk_hbox_new (FALSE, 0);
@@ -1878,6 +1878,7 @@ create_intf_jump (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (jump_box);
   gtk_container_add (GTK_CONTAINER (jump_frame), jump_box);
+  gtk_container_set_border_width (GTK_CONTAINER (jump_box), 5);
 
   jump_label3 = gtk_label_new (_("s."));
   gtk_widget_ref (jump_label3);
@@ -2045,17 +2046,17 @@ create_intf_preferences (void)
   GtkWidget *preferences_playlist_enqueue_as_default_checkbutton;
   GtkWidget *preferences_playlist;
   GtkWidget *preferences_misc_table;
+  GtkWidget *preferences_misc_associated_files_frame;
+  GtkWidget *preferences_misc_associated_table;
+  GtkWidget *preferences_misc_ts_checkbutton;
+  GtkWidget *preferences_misc_vob_checkbutton;
+  GtkWidget *preferences_misc_mp2_checkbutton;
+  GtkWidget *preferences_misc_mpeg_checkbutton;
   GtkWidget *preferences_misc_message_frame;
   GtkWidget *preferences_misc_message_table;
   GtkWidget *preferences_misc_messages_label;
   GtkObject *preferences_misc_messages_spinbutton_adj;
   GtkWidget *preferences_misc_messages_spinbutton;
-  GtkWidget *preferences_misc_associated_files_frame;
-  GtkWidget *preferences_misc_associated_table;
-  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;
@@ -2070,6 +2071,7 @@ create_intf_preferences (void)
   preferences_vbox = GNOME_DIALOG (intf_preferences)->vbox;
   gtk_object_set_data (GTK_OBJECT (intf_preferences), "preferences_vbox", preferences_vbox);
   gtk_widget_show (preferences_vbox);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_vbox), 5);
 
   preferences_frame = gtk_frame_new (_("Preferences"));
   gtk_widget_ref (preferences_frame);
@@ -2092,6 +2094,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preferences_file_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_file_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_file_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_file_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_file_table), 5);
 
   preferences_file_combo = gnome_file_entry_new (NULL, NULL);
   gtk_widget_ref (preferences_file_combo);
@@ -2131,6 +2136,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preferences_disc_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_disc_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_disc_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_disc_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_disc_table), 5);
 
   preferences_disc_dvd_combo = gnome_file_entry_new (NULL, NULL);
   gtk_widget_ref (preferences_disc_dvd_combo);
@@ -2195,6 +2203,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preferences_network_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_network_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_network_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_network_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_network_table), 5);
 
   preferences_network_server_label = gtk_label_new (_("Default server: "));
   gtk_widget_ref (preferences_network_server_label);
@@ -2329,6 +2340,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preferences_network_interface_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_network_interface_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_network_interface_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_network_interface_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_network_interface_table), 5);
 
   preferences_interface_label = gtk_label_new (_("Default interface: "));
   gtk_widget_ref (preferences_interface_label);
@@ -2368,6 +2382,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preferences_video_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_video_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_video_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_video_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_video_table), 5);
 
   preferences_video_output_label = gtk_label_new (_("Default output: "));
   gtk_widget_ref (preferences_video_output_label);
@@ -2547,6 +2564,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preference_audio_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preference_audio_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preference_audio_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preference_audio_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preference_audio_table), 5);
 
   preferences_audio_spdif_checkbutton = gtk_check_button_new_with_label (_("Spdif output"));
   gtk_widget_ref (preferences_audio_spdif_checkbutton);
@@ -2708,6 +2728,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preference_playlist_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preference_playlist_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preference_playlist_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preference_playlist_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preference_playlist_table), 5);
 
   preferences_playlist_launch_on_startup_checkbutton = gtk_check_button_new_with_label (_("Launch on startup"));
   gtk_widget_ref (preferences_playlist_launch_on_startup_checkbutton);
@@ -2749,42 +2772,9 @@ create_intf_preferences (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (preferences_misc_table);
   gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_misc_table);
-
-  preferences_misc_message_frame = gtk_frame_new (_("Messages"));
-  gtk_widget_ref (preferences_misc_message_frame);
-  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_message_frame", preferences_misc_message_frame,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (preferences_misc_message_frame);
-  gtk_table_attach (GTK_TABLE (preferences_misc_table), preferences_misc_message_frame, 1, 2, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND),
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
-  gtk_frame_set_label_align (GTK_FRAME (preferences_misc_message_frame), 0.05, 0.5);
-
-  preferences_misc_message_table = gtk_table_new (1, 2, FALSE);
-  gtk_widget_ref (preferences_misc_message_table);
-  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_message_table", preferences_misc_message_table,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (preferences_misc_message_table);
-  gtk_container_add (GTK_CONTAINER (preferences_misc_message_frame), preferences_misc_message_table);
-
-  preferences_misc_messages_label = gtk_label_new (_("Warning level: "));
-  gtk_widget_ref (preferences_misc_messages_label);
-  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_label", preferences_misc_messages_label,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (preferences_misc_messages_label);
-  gtk_table_attach (GTK_TABLE (preferences_misc_message_table), preferences_misc_messages_label, 0, 1, 0, 1,
-                    (GtkAttachOptions) (GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
-
-  preferences_misc_messages_spinbutton_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
-  preferences_misc_messages_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_misc_messages_spinbutton_adj), 1, 0);
-  gtk_widget_ref (preferences_misc_messages_spinbutton);
-  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_spinbutton", preferences_misc_messages_spinbutton,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (preferences_misc_messages_spinbutton);
-  gtk_table_attach (GTK_TABLE (preferences_misc_message_table), preferences_misc_messages_spinbutton, 1, 2, 0, 1,
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                    (GtkAttachOptions) (0), 0, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_misc_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_misc_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_misc_table), 5);
 
   preferences_misc_associated_files_frame = gtk_frame_new (_("Files associated with vlc"));
   gtk_widget_ref (preferences_misc_associated_files_frame);
@@ -2793,7 +2783,7 @@ create_intf_preferences (void)
   gtk_widget_show (preferences_misc_associated_files_frame);
   gtk_table_attach (GTK_TABLE (preferences_misc_table), preferences_misc_associated_files_frame, 0, 1, 0, 1,
                     (GtkAttachOptions) (GTK_EXPAND),
-                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
   gtk_widget_set_sensitive (preferences_misc_associated_files_frame, FALSE);
   gtk_frame_set_label_align (GTK_FRAME (preferences_misc_associated_files_frame), 0.05, 0.5);
 
@@ -2804,12 +2794,21 @@ create_intf_preferences (void)
   gtk_widget_show (preferences_misc_associated_table);
   gtk_container_add (GTK_CONTAINER (preferences_misc_associated_files_frame), preferences_misc_associated_table);
 
-  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,
+  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_mpeg_checkbutton);
-  gtk_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_mpeg_checkbutton, 0, 1, 0, 1,
+  gtk_widget_show (preferences_misc_ts_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_ts_checkbutton, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 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_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_vob_checkbutton, 0, 1, 2, 3,
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
 
@@ -2822,24 +2821,51 @@ create_intf_preferences (void)
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 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,
+  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_vob_checkbutton);
-  gtk_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_vob_checkbutton, 0, 1, 2, 3,
+  gtk_widget_show (preferences_misc_mpeg_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_mpeg_checkbutton, 0, 1, 0, 1,
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 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,
+  preferences_misc_message_frame = gtk_frame_new (_("Messages"));
+  gtk_widget_ref (preferences_misc_message_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_message_frame", preferences_misc_message_frame,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (preferences_misc_ts_checkbutton);
-  gtk_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_ts_checkbutton, 0, 1, 3, 4,
+  gtk_widget_show (preferences_misc_message_frame);
+  gtk_table_attach (GTK_TABLE (preferences_misc_table), preferences_misc_message_frame, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_frame_set_label_align (GTK_FRAME (preferences_misc_message_frame), 0.05, 0.5);
+
+  preferences_misc_message_table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_ref (preferences_misc_message_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_message_table", preferences_misc_message_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_message_table);
+  gtk_container_add (GTK_CONTAINER (preferences_misc_message_frame), preferences_misc_message_table);
+
+  preferences_misc_messages_label = gtk_label_new (_("Warning level: "));
+  gtk_widget_ref (preferences_misc_messages_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_label", preferences_misc_messages_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_messages_label);
+  gtk_table_attach (GTK_TABLE (preferences_misc_message_table), preferences_misc_messages_label, 0, 1, 0, 1,
                     (GtkAttachOptions) (GTK_FILL),
                     (GtkAttachOptions) (0), 0, 0);
 
+  preferences_misc_messages_spinbutton_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
+  preferences_misc_messages_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_misc_messages_spinbutton_adj), 1, 0);
+  gtk_widget_ref (preferences_misc_messages_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_spinbutton", preferences_misc_messages_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_messages_spinbutton);
+  gtk_table_attach (GTK_TABLE (preferences_misc_message_table), preferences_misc_messages_spinbutton, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 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,
index cf9aa59b63118d1d245cbb83191cd13cb300a2a1..febca2d0aa096c1da625b4b9b735fd6fc8c7baae 100644 (file)
@@ -2,7 +2,7 @@
  * gnome_playlist.c : Interface for the playlist dialog
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: gnome_playlist.c,v 1.2 2001/05/07 03:14:09 stef Exp $
+ * $Id: gnome_playlist.c,v 1.3 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Pierre Baillet <oct@zoy.org>
  *      
@@ -68,7 +68,7 @@
  * The following callbacks are related to the playlist.
  *****************************************************************************/
 void
-on_intf_playlist_destroy               (GtkObject       *object,
+on_playlist_destroy               (GtkObject       *object,
                                         gpointer         user_data)
 {
     gtk_widget_hide( GTK_WIDGET(object));
@@ -314,6 +314,7 @@ on_playlist_clist_event                (GtkWidget       *widget,
                 p_intf->p_input->b_eof = 1;
             }
             intf_PlaylistJumpto( p_main->p_playlist, i_row - 1 );
+            p_main->p_playlist->b_stopped = 0;
         }
         return TRUE;
     }
@@ -337,6 +338,7 @@ on_playlist_clist_drag_data_received   (GtkWidget       *widget,
     GtkCList *      p_clist;
     gint            i_row;
     gint            i_col;
+    int             i_end = p_main->p_playlist->i_size;
 
     p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
         p_intf->p_sys->p_playlist ), "playlist_clist" ) );
@@ -351,6 +353,10 @@ on_playlist_clist_drag_data_received   (GtkWidget       *widget,
         /* else, put that at the end of the playlist */
         GnomeDropDataReceived( p_intf, data, info, PLAYLIST_END );
     }
+
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
+
 }
 
 
@@ -506,6 +512,8 @@ void GnomeDropDataReceived( intf_thread_t * p_intf,
         
         /* unlock the interface */
         vlc_mutex_unlock( &p_intf->change_lock );
+
+        p_main->p_playlist->b_stopped = 0;
     }
 }
 
index 401e4aced925067a67d34995d47c9439198d5b24..dc1a972dcb17bb8c3b53952faa726788f75acb84 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gnome.c: Gnome interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gnome.c,v 1.38 2001/05/10 06:47:31 sam Exp $
+ * $Id: intf_gnome.c,v 1.39 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -439,7 +439,7 @@ static gint GnomeRadioMenu( intf_thread_t * p_intf,
             }
 
             snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
-                      "Chapters %d to %d", i_item + 1, i_item + 10);
+                      "%ss %d to %d", psz_item_name, 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 );
@@ -1121,14 +1121,14 @@ static gint GnomeModeManage( intf_thread_t * p_intf )
     /* 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_stop"), b_control );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_play"), TRUE );
     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_play"), TRUE );
     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 );
index cd418324230ac066cf5a018ba949ad7785029098..5c8f5d550769ffeb43c698335ac4b81d34d1c640 100644 (file)
@@ -73,8 +73,6 @@
        <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>
          <widget>
            <class>GtkHScale</class>
            <name>slider</name>
-           <width>500</width>
-           <height>15</height>
            <can_focus>True</can_focus>
            <signal>
              <name>button_press_event</name>
       <widget>
        <class>GtkHBox</class>
        <name>file_box</name>
-       <width>500</width>
-       <height>24</height>
        <homogeneous>False</homogeneous>
        <spacing>0</spacing>
        <child>
       <widget>
        <class>GtkHBox</class>
        <name>dvd_box</name>
-       <width>500</width>
-       <height>24</height>
        <visible>False</visible>
        <homogeneous>False</homogeneous>
        <spacing>0</spacing>
       <widget>
        <class>GtkHBox</class>
        <name>network_box</name>
-       <width>500</width>
-       <height>24</height>
        <visible>False</visible>
        <homogeneous>True</homogeneous>
        <spacing>0</spacing>
       <handler>on_popup_jump_activate</handler>
       <last_modification_time>Tue, 01 May 2001 22:22:49 GMT</last_modification_time>
     </signal>
-    <label>_Jump</label>
+    <label>_Jump...</label>
     <right_justify>False</right_justify>
     <stock_icon>GNOME_STOCK_MENU_JUMP_TO</stock_icon>
   </widget>
   <widget>
     <class>GtkPixmapMenuItem</class>
     <name>popup_preferences</name>
-    <sensitive>False</sensitive>
     <signal>
       <name>activate</name>
       <handler>on_popup_preferences_activate</handler>
@@ -2058,6 +2047,11 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
 <widget>
   <class>GnomeDialog</class>
   <name>intf_playlist</name>
+  <signal>
+    <name>destroy</name>
+    <handler>on_playlist_destroy</handler>
+    <last_modification_time>Tue, 08 May 2001 23:21:39 GMT</last_modification_time>
+  </signal>
   <title>Playlist</title>
   <type>GTK_WINDOW_TOPLEVEL</type>
   <position>GTK_WIN_POS_NONE</position>
@@ -2147,6 +2141,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkFrame</class>
          <name>playlist_frame</name>
+         <border_width>4</border_width>
          <label>Playlist</label>
          <label_xalign>0.05</label_xalign>
          <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
@@ -2382,7 +2377,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
     <homogeneous>False</homogeneous>
     <spacing>8</spacing>
     <child>
-      <padding>4</padding>
+      <padding>0</padding>
       <expand>True</expand>
       <fill>True</fill>
     </child>
@@ -2434,6 +2429,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
     <widget>
       <class>GtkFrame</class>
       <name>jump_frame</name>
+      <border_width>5</border_width>
       <label>Jump to: </label>
       <label_xalign>0.05</label_xalign>
       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
@@ -2446,6 +2442,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
       <widget>
        <class>GtkHBox</class>
        <name>jump_box</name>
+       <border_width>5</border_width>
        <homogeneous>False</homogeneous>
        <spacing>0</spacing>
 
@@ -2598,10 +2595,11 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
     <class>GtkVBox</class>
     <child_name>GnomeDialog:vbox</child_name>
     <name>preferences_vbox</name>
+    <border_width>5</border_width>
     <homogeneous>False</homogeneous>
-    <spacing>8</spacing>
+    <spacing>10</spacing>
     <child>
-      <padding>4</padding>
+      <padding>0</padding>
       <expand>True</expand>
       <fill>True</fill>
     </child>
@@ -2690,11 +2688,12 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkTable</class>
          <name>preferences_file_table</name>
+         <border_width>5</border_width>
          <rows>1</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GnomeFileEntry</class>
@@ -2772,11 +2771,12 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkTable</class>
          <name>preferences_disc_table</name>
+         <border_width>5</border_width>
          <rows>2</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GnomeFileEntry</class>
@@ -2913,11 +2913,12 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkTable</class>
          <name>preferences_network_table</name>
+         <border_width>5</border_width>
          <rows>7</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GtkLabel</class>
@@ -3229,11 +3230,12 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkTable</class>
          <name>preferences_network_interface_table</name>
+         <border_width>5</border_width>
          <rows>1</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GtkLabel</class>
@@ -3309,11 +3311,12 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkTable</class>
          <name>preferences_video_table</name>
+         <border_width>5</border_width>
          <rows>7</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GtkLabel</class>
@@ -3711,11 +3714,12 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
        <widget>
          <class>GtkTable</class>
          <name>preference_audio_table</name>
+         <border_width>5</border_width>
          <rows>6</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GtkCheckButton</class>
@@ -4023,11 +4027,12 @@ Stereo
        <widget>
          <class>GtkTable</class>
          <name>preference_playlist_table</name>
+         <border_width>5</border_width>
          <rows>3</rows>
          <columns>1</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GtkCheckButton</class>
@@ -4115,27 +4120,29 @@ Stereo
        <widget>
          <class>GtkTable</class>
          <name>preferences_misc_table</name>
+         <border_width>5</border_width>
          <rows>1</rows>
          <columns>2</columns>
          <homogeneous>False</homogeneous>
-         <row_spacing>0</row_spacing>
-         <column_spacing>0</column_spacing>
+         <row_spacing>5</row_spacing>
+         <column_spacing>5</column_spacing>
 
          <widget>
            <class>GtkFrame</class>
-           <name>preferences_misc_message_frame</name>
-           <label>Messages</label>
+           <name>preferences_misc_associated_files_frame</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>1</left_attach>
-             <right_attach>2</right_attach>
+             <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>
+             <yexpand>False</yexpand>
              <xshrink>False</xshrink>
              <yshrink>False</yshrink>
              <xfill>False</xfill>
@@ -4144,28 +4151,25 @@ Stereo
 
            <widget>
              <class>GtkTable</class>
-             <name>preferences_misc_message_table</name>
-             <rows>1</rows>
-             <columns>2</columns>
+             <name>preferences_misc_associated_table</name>
+             <rows>4</rows>
+             <columns>1</columns>
              <homogeneous>False</homogeneous>
              <row_spacing>0</row_spacing>
              <column_spacing>0</column_spacing>
 
              <widget>
-               <class>GtkLabel</class>
-               <name>preferences_misc_messages_label</name>
-               <label>Warning level: </label>
-               <justify>GTK_JUSTIFY_CENTER</justify>
-               <wrap>False</wrap>
-               <xalign>0.5</xalign>
-               <yalign>0.5</yalign>
-               <xpad>0</xpad>
-               <ypad>0</ypad>
+               <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>
                  <left_attach>0</left_attach>
                  <right_attach>1</right_attach>
-                 <top_attach>0</top_attach>
-                 <bottom_attach>1</bottom_attach>
+                 <top_attach>3</top_attach>
+                 <bottom_attach>4</bottom_attach>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <xexpand>False</xexpand>
@@ -4178,29 +4182,20 @@ Stereo
              </widget>
 
              <widget>
-               <class>GtkSpinButton</class>
-               <name>preferences_misc_messages_spinbutton</name>
+               <class>GtkCheckButton</class>
+               <name>preferences_misc_vob_checkbutton</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>
+               <label>vob</label>
+               <active>False</active>
+               <draw_indicator>True</draw_indicator>
                <child>
-                 <left_attach>1</left_attach>
-                 <right_attach>2</right_attach>
-                 <top_attach>0</top_attach>
-                 <bottom_attach>1</bottom_attach>
+                 <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>
+                 <xexpand>False</xexpand>
                  <yexpand>False</yexpand>
                  <xshrink>False</xshrink>
                  <yshrink>False</yshrink>
@@ -4208,52 +4203,19 @@ Stereo
                  <yfill>False</yfill>
                </child>
              </widget>
-           </widget>
-         </widget>
-
-         <widget>
-           <class>GtkFrame</class>
-           <name>preferences_misc_associated_files_frame</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>False</xfill>
-             <yfill>True</yfill>
-           </child>
-
-           <widget>
-             <class>GtkTable</class>
-             <name>preferences_misc_associated_table</name>
-             <rows>4</rows>
-             <columns>1</columns>
-             <homogeneous>False</homogeneous>
-             <row_spacing>0</row_spacing>
-             <column_spacing>0</column_spacing>
 
              <widget>
                <class>GtkCheckButton</class>
-               <name>preferences_misc_mpeg_checkbutton</name>
+               <name>preferences_misc_mp2_checkbutton</name>
                <can_focus>True</can_focus>
-               <label>mpeg</label>
+               <label>mp2</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>
+                 <top_attach>1</top_attach>
+                 <bottom_attach>2</bottom_attach>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <xexpand>False</xexpand>
@@ -4267,16 +4229,16 @@ Stereo
 
              <widget>
                <class>GtkCheckButton</class>
-               <name>preferences_misc_mp2_checkbutton</name>
+               <name>preferences_misc_mpeg_checkbutton</name>
                <can_focus>True</can_focus>
-               <label>mp2</label>
+               <label>mpeg</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>
+                 <top_attach>0</top_attach>
+                 <bottom_attach>1</bottom_attach>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <xexpand>False</xexpand>
@@ -4287,19 +4249,54 @@ Stereo
                  <yfill>False</yfill>
                </child>
              </widget>
+           </widget>
+         </widget>
+
+         <widget>
+           <class>GtkFrame</class>
+           <name>preferences_misc_message_frame</name>
+           <label>Messages</label>
+           <label_xalign>0.05</label_xalign>
+           <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+           <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>False</yexpand>
+             <xshrink>False</xshrink>
+             <yshrink>False</yshrink>
+             <xfill>False</xfill>
+             <yfill>True</yfill>
+           </child>
+
+           <widget>
+             <class>GtkTable</class>
+             <name>preferences_misc_message_table</name>
+             <rows>1</rows>
+             <columns>2</columns>
+             <homogeneous>False</homogeneous>
+             <row_spacing>0</row_spacing>
+             <column_spacing>0</column_spacing>
 
              <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>
+               <class>GtkLabel</class>
+               <name>preferences_misc_messages_label</name>
+               <label>Warning level: </label>
+               <justify>GTK_JUSTIFY_CENTER</justify>
+               <wrap>False</wrap>
+               <xalign>0.5</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>
+                 <top_attach>0</top_attach>
+                 <bottom_attach>1</bottom_attach>
                  <xpad>0</xpad>
                  <ypad>0</ypad>
                  <xexpand>False</xexpand>
@@ -4312,20 +4309,29 @@ Stereo
              </widget>
 
              <widget>
-               <class>GtkCheckButton</class>
-               <name>preferences_misc_ts_checkbutton</name>
+               <class>GtkSpinButton</class>
+               <name>preferences_misc_messages_spinbutton</name>
                <can_focus>True</can_focus>
-               <label>ts</label>
-               <active>False</active>
-               <draw_indicator>True</draw_indicator>
+               <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>
-                 <left_attach>0</left_attach>
-                 <right_attach>1</right_attach>
-                 <top_attach>3</top_attach>
-                 <bottom_attach>4</bottom_attach>
+                 <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>False</xexpand>
+                 <xexpand>True</xexpand>
                  <yexpand>False</yexpand>
                  <xshrink>False</xshrink>
                  <yshrink>False</yshrink>
index 8cb6b849226d7ea1cc38d143850ee1988cc89d74..f2ec2f89a816b99c70050949a74ffde46f04bf11 100644 (file)
@@ -7,7 +7,7 @@
 # Objects
 #
 
-PLUGIN_C = gtk.o intf_gtk.o gtk_callbacks.o gtk_interface.o gtk_support.o gtk_playlist.o
+PLUGIN_C = gtk.o intf_gtk.o gtk_callbacks.o gtk_interface.o gtk_support.o gtk_open.o gtk_control.o gtk_menu.o gtk_playlist.o gtk_modules.o gtk_preferences.o
 BUILTIN_C = $(PLUGIN_C:%.o=BUILTIN_%.o)
 
 ALL_OBJ = $(PLUGIN_C) $(BUILTIN_C)
index 42d12dce74c188d49a783e9d5b057556c70b4bda..248369ce15797ad9888c49160357450bfd3d99bc 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.16 2001/05/06 18:32:30 stef Exp $
+ * $Id: gtk_callbacks.c,v 1.17 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -29,7 +29,7 @@
  * Preamble
  *****************************************************************************/
 #include "defs.h"
-#include <sys/types.h>                                              /* off_t */                           
+#include <sys/types.h>                                              /* off_t */
 #include <stdlib.h>
 
 #include <gtk/gtk.h>
 #include "intf_playlist.h"
 #include "intf_msg.h"
 
+#include "video.h"
+#include "video_output.h"
+
 #include "gtk_callbacks.h"
 #include "gtk_interface.h"
 #include "gtk_support.h"
-#include "gtk_playlist.h"
 #include "intf_gtk.h"
 
 #include "main.h"
 /*****************************************************************************
  * Callbacks
  *****************************************************************************/
-void
-on_menubar_open_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( p_intf->p_sys->p_fileopen == NULL)
-    {
-        p_intf->p_sys->p_fileopen = create_intf_fileopen();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
-                             "p_intf", p_intf );
-    }
+/*
+ * Main interface callbacks
+ */
 
-    gtk_widget_show( p_intf->p_sys->p_fileopen );
-    gdk_window_raise( p_intf->p_sys->p_fileopen->window );
-}
-
-
-void
-on_menubar_exit_activate               (GtkMenuItem     *menuitem,
+gboolean
+GtkExit                                (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
 
     vlc_mutex_lock( &p_intf->change_lock );
     p_intf->b_die = 1;
     vlc_mutex_unlock( &p_intf->change_lock );
-}
-
-void
-on_menubar_preferences_activate        (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
 
+    return TRUE;
 }
 
-
-void
-on_menubar_about_activate              (GtkMenuItem     *menuitem,
+gboolean
+GtkWindowDelete                        (GtkWidget       *widget,
+                                        GdkEvent        *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+    GtkExit( GTK_WIDGET( widget ), NULL, user_data );
 
-    if( !GTK_IS_WIDGET( p_intf->p_sys->p_about ) )
-    {
-        p_intf->p_sys->p_about = create_intf_about();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_about ),
-                             "p_intf", p_intf );
-    }
-    gtk_widget_show( p_intf->p_sys->p_about );
-    gdk_window_raise( p_intf->p_sys->p_about->window );
+    return TRUE;
 }
 
 
-void
-on_toolbar_open_clicked                (GtkButton       *button,
+gboolean
+GtkWindowToggle                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+    
+    if( GTK_WIDGET_VISIBLE(p_intf->p_sys->p_window) )
+    {
+        gtk_widget_hide( p_intf->p_sys->p_window);
 
-    /* If we have never used the file selector, open it */
-    if( p_intf->p_sys->p_fileopen == NULL)
+    } 
+    else 
     {
-        p_intf->p_sys->p_fileopen = create_intf_fileopen();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
-                             "p_intf", p_intf  );
+        gtk_widget_show( p_intf->p_sys->p_window );
     }
 
-    gtk_widget_show( p_intf->p_sys->p_fileopen );
-    gdk_window_raise( p_intf->p_sys->p_fileopen->window );
-}
-
-
-void
-on_toolbar_back_clicked                (GtkButton       *button,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-on_toolbar_stop_clicked                (GtkButton       *button,
-                                        gpointer         user_data)
-{
-
+    return TRUE;
 }
 
-
-void
-on_toolbar_play_clicked                (GtkButton       *button,
+gboolean
+GtkFullscreen                          (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
-
-    if( p_intf->p_input != NULL )
+    if( p_vout_bank->i_count )
     {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
+        vlc_mutex_lock( &p_vout_bank->pp_vout[0]->change_lock );
+        if( p_vout_bank->pp_vout[0]->b_fullscreen ==
+                !GTK_CHECK_MENU_ITEM( widget )->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_toolbar_pause_clicked               (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
-
-    if( p_intf->p_input != NULL )
-    {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_PAUSE );
-    }
+    return TRUE;
 }
 
 void
-on_toolbar_prev_clicked                (GtkButton       *button,
+GtkWindowDrag                          (GtkWidget       *widget,
+                                        GdkDragContext  *drag_context,
+                                        gint             x,
+                                        gint             y,
+                                        GtkSelectionData *data,
+                                        guint            info,
+                                        guint            time,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+    intf_thread_t * p_intf =  GetIntf( GTK_WIDGET(widget), "intf_window" );
+    int end = p_main->p_playlist->i_size;
+    GtkDropDataReceived( p_intf, data, info, PLAYLIST_END);
 
     if( p_intf->p_input != NULL )
     {
-        /* FIXME: temporary hack */
-        intf_PlaylistPrev( p_main->p_playlist );
-        intf_PlaylistPrev( p_main->p_playlist );
-        p_intf->p_input->b_eof = 1;
+       /* FIXME: temporary hack */
+       p_intf->p_input->b_eof = 1;
     }
+     
+    intf_PlaylistJumpto( p_main->p_playlist, end-1 );
+    p_main->p_playlist->b_stopped = 0;
 }
 
 
-void
-on_toolbar_next_clicked                (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
-
-    if( p_intf->p_input != NULL )
-    {
-        /* FIXME: temporary hack */
-        p_intf->p_input->b_eof = 1;
-    }
-}
 
-
-void
-on_popup_play_activate                 (GtkMenuItem     *menuitem,
+gboolean
+GtkSliderRelease                       (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
-
-    if( p_intf->p_input != NULL )
-    {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
-    }
-}
-
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
 
-void
-on_popup_pause_activate                (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+    vlc_mutex_lock( &p_intf->change_lock );
+    p_intf->p_sys->b_slider_free = 1;
+    vlc_mutex_unlock( &p_intf->change_lock );
 
-    if( p_intf->p_input != NULL )
-    {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_PAUSE );
-    }
+    return FALSE;
 }
 
 
-void
-on_popup_exit_activate                 (GtkMenuItem     *menuitem,
+gboolean
+GtkSliderPress                         (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
 
     vlc_mutex_lock( &p_intf->change_lock );
-    p_intf->b_die = 1;
+    p_intf->p_sys->b_slider_free = 0;
     vlc_mutex_unlock( &p_intf->change_lock );
-}
-
-void
-on_fileopen_ok_clicked                 (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    GtkCList *playlist_clist;
-    gchar *filename;
-
-    GtkWidget *filesel = gtk_widget_get_toplevel ( GTK_WIDGET (button) );
-    
-    /* retrieve the interface */
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(filesel), "intf_fileopen" );
-    
-    /* hide the widget */
-    gtk_widget_hide (filesel);
-    filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
-    
-    /* catch the GTK CList */
-    playlist_clist = GTK_CLIST( 
-            lookup_widget(p_intf->p_sys->p_playlist,"playlist_clist"));
-    
-    intf_PlaylistAdd( p_main->p_playlist, 
-            PLAYLIST_END, 
-            (char*)filename );
-    
-    /* update the display */
-    rebuildCList( playlist_clist , 
-            p_main->p_playlist );
-   
-}
 
-
-void
-on_fileopen_cancel_clicked             (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+    return FALSE;
 }
 
 
 void
-on_intf_fileopen_destroy               (GtkObject       *object,
+GtkTitlePrev                           (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(object), "intf_fileopen" );
+    intf_thread_t * p_intf;
+    input_area_t *  p_area;
+    int             i_id;
 
-    p_intf->p_sys->p_fileopen = NULL;
-}
+    p_intf = GetIntf( GTK_WIDGET(button), (char*)user_data );
+    i_id = p_intf->p_input->stream.p_selected_area->i_id - 1;
 
+    /* Disallow area 0 since it is used for video_ts.vob */
+    if( i_id > 0 )
+    {
+        p_area = p_intf->p_input->stream.pp_areas[i_id];
+        p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
 
-void
-on_popup_open_activate                 (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
 
-    /* If we have never used the file selector, open it */
-    if( p_intf->p_sys->p_fileopen == NULL)
-    {
-        p_intf->p_sys->p_fileopen = create_intf_fileopen();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
-                             "p_intf", p_intf );
+        p_intf->p_sys->b_title_update = 1;
     }
-
-    gtk_widget_show( p_intf->p_sys->p_fileopen );
-    gdk_window_raise( p_intf->p_sys->p_fileopen->window );
 }
 
 
 void
-on_popup_about_activate                (GtkMenuItem     *menuitem,
+GtkTitleNext                           (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+    intf_thread_t * p_intf;
+    input_area_t *  p_area;
+    int             i_id;
 
-    if( !GTK_IS_WIDGET( p_intf->p_sys->p_about ) )
-    {
-        p_intf->p_sys->p_about = create_intf_about();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_about ),
-                             "p_intf", p_intf );
-    }
-    gtk_widget_show( p_intf->p_sys->p_about );
-    gdk_window_raise( p_intf->p_sys->p_about->window );
-}
-void
-on_popup_slow_activate                 (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+    p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+    i_id = p_intf->p_input->stream.p_selected_area->i_id + 1;
 
-    if( p_intf->p_input != NULL )
+    if( i_id < p_intf->p_input->stream.i_area_nb )
     {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_SLOWER );
-    }
-}
-
+        p_area = p_intf->p_input->stream.pp_areas[i_id];   
+        p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
 
-void
-on_popup_fast_activate                 (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
 
-    if( p_intf->p_input != NULL )
-    {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_FASTER );
+        p_intf->p_sys->b_title_update = 1;
     }
-}
-
 
-void
-on_toolbar_slow_clicked                (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
-
-    if( p_intf->p_input != NULL )
-    {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_SLOWER );
-    }
 }
 
 
 void
-on_toolbar_fast_clicked                (GtkButton       *button,
+GtkChapterPrev                         (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+    intf_thread_t * p_intf;
+    input_area_t *  p_area;
 
-    if( p_intf->p_input != NULL )
-    {
-        input_SetStatus( p_intf->p_input, INPUT_STATUS_FASTER );
-    }
-}
+    p_intf = GetIntf( GTK_WIDGET(button), (char*)user_data );
+    p_area = p_intf->p_input->stream.p_selected_area;
 
+    if( p_area->i_part > 0 )
+    {
+        p_area->i_part--;
+        p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
 
-void
-on_intf_modules_destroy                (GtkObject       *object,
-                                        gpointer         user_data)
-{
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
 
+        p_intf->p_sys->b_chapter_update = 1;
+    }
 }
 
 
 void
-on_modules_ok_clicked                  (GtkButton       *button,
+GtkChapterNext                         (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_modules" );
-
-    gtk_widget_hide( p_intf->p_sys->p_modules );
+    intf_thread_t * p_intf;
+    input_area_t *  p_area;
 
-}
+    p_intf = GetIntf( GTK_WIDGET(button), (char*)user_data );
+    p_area = p_intf->p_input->stream.p_selected_area;
 
+    if( p_area->i_part < p_area->i_part_nb )
+    {
+        p_area->i_part++;
+        p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
 
-void
-on_modules_apply_clicked               (GtkButton       *button,
-                                        gpointer         user_data)
-{
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
 
+        p_intf->p_sys->b_chapter_update = 1;
+    }
 }
 
+/****************************************************************************
+ * About box
+ ****************************************************************************/
 
-void
-on_modules_cancel_clicked              (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_modules" );
-
-    gtk_widget_hide( p_intf->p_sys->p_modules );
-}
-
-void
-on_menubar_modules_activate            (GtkMenuItem     *menuitem,
+gboolean
+GtkAboutShow                           (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
 
-    if( !GTK_IS_WIDGET( p_intf->p_sys->p_modules ) )
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_about ) )
     {
-//        p_intf->p_sys->p_modules = create_intf_modules();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_modules ),
+        p_intf->p_sys->p_about = create_intf_about();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_about ),
                              "p_intf", p_intf );
     }
-    gtk_widget_show( p_intf->p_sys->p_modules );
-    gdk_window_raise( p_intf->p_sys->p_modules->window );
-}
-
-
-void
-on_intf_window_drag_data_received      (GtkWidget       *widget,
-                                        GdkDragContext  *drag_context,
-                                        gint             x,
-                                        gint             y,
-                                        GtkSelectionData *data,
-                                        guint            info,
-                                        guint            time,
-                                        gpointer         user_data)
-{
-    intf_thread_t * p_intf =  GetIntf( GTK_WIDGET(widget), "intf_window" );
-    int end = p_main->p_playlist->i_size;
-    on_generic_drop_data_received( 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, end-1 );
+    gtk_widget_show( p_intf->p_sys->p_about );
+    gdk_window_raise( p_intf->p_sys->p_about->window );
 
+    return TRUE;
 }
 
-
-void
-on_about_ok_clicked                    (GtkButton       *button,
-                                        gpointer         user_data)
+void GtkAboutOk( GtkButton * button, gpointer user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_about" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), (char*)user_data );
 
     gtk_widget_hide( p_intf->p_sys->p_about );
 }
 
 
-void
-on_menubar_disc_activate               (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+/****************************************************************************
+ * Jump box
+ ****************************************************************************/
 
-    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 );
-}
-
-
-void
-on_toolbar_disc_clicked                (GtkButton       *button,
+gboolean
+GtkJumpShow                            (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
 
-    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_jump ) )
     {
-        p_intf->p_sys->p_disc = create_intf_disc();
-        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
+        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 );
     }
-    gtk_widget_show( p_intf->p_sys->p_disc );
-    gdk_window_raise( p_intf->p_sys->p_disc->window );
-}
-
-
-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;
 
-    psz_device = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
-                                         GTK_WIDGET(button), "disc_name" ) ) );
+    gtk_widget_show( p_intf->p_sys->p_jump );
+    gdk_window_raise( p_intf->p_sys->p_jump->window );
 
-    /* "dvd:foo" has size 5 + strlen(foo) */
-    psz_source = malloc( 5 + strlen( psz_device ) );
-    if( psz_source == NULL )
-    {
-        return;
-    }
-
-    /* Check which method was activated */
-    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
-                                          "disc_dvd" ) )->active )
-    {
-        psz_method = "dvd";
-    }
-    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
-                                               "disc_vcd" ) )->active )
-    {
-        psz_method = "vcd";
-    }
-    else
-    {
-        intf_ErrMsg( "intf error: unknown toggle button configuration" );
-        free( psz_source );
-        return;
-    }
-    
-    /* Select title and chapter */
-    main_PutIntVariable( INPUT_TITLE_VAR, gtk_spin_button_get_value_as_int(
-                              GTK_SPIN_BUTTON( lookup_widget(
-                                  GTK_WIDGET(button), "disc_title" ) ) ) );
-
-    main_PutIntVariable( INPUT_CHAPTER_VAR, gtk_spin_button_get_value_as_int(
-                              GTK_SPIN_BUTTON( lookup_widget(
-                                  GTK_WIDGET(button), "disc_chapter" ) ) ) );
-
-    /* Build source name and add it to playlist */
-    sprintf( psz_source, "%s:%s", psz_method, psz_device );
-    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
-    free( psz_source );
-
-    gtk_widget_hide( p_intf->p_sys->p_disc );
+    return FALSE;
 }
 
 
 void
-on_disc_cancel_clicked                 (GtkButton       *button,
+GtkJumpOk                              (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
-
-    gtk_widget_hide( p_intf->p_sys->p_disc );
-}
+    intf_thread_t * p_intf;
+    off_t           i_seek;
+    off_t           i_size;
+    int             i_hours;
+    int             i_minutes;
+    int             i_seconds;
 
+    p_intf = GetIntf( GTK_WIDGET( button ), (char*)user_data );
 
-void
-on_disc_dvd_toggled                    (GtkToggleButton *togglebutton,
-                                        gpointer         user_data)
-{
-    if( togglebutton->active )
-    {
-        gtk_entry_set_text( GTK_ENTRY( lookup_widget(
-            GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/dvd" );
-    }
-}
+#define GET_VALUE( name )                                                   \
+    gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( gtk_object_get_data( \
+        GTK_OBJECT( p_intf->p_sys->p_jump ), name ) ) )
 
+    i_hours   = GET_VALUE( "jump_hour_spinbutton" );
+    i_minutes = GET_VALUE( "jump_minute_spinbutton" );
+    i_seconds = GET_VALUE( "jump_second_spinbutton" );
 
-void
-on_disc_vcd_toggled                    (GtkToggleButton *togglebutton,
-                                        gpointer         user_data)
-{
-    if( togglebutton->active )
-    {
-        gtk_entry_set_text( GTK_ENTRY( lookup_widget(
-            GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/cdrom" );
-    }
-}
+#undef GET_VALUE
 
+    i_seconds += 60 *i_minutes + 3600* i_hours;
 
-void
-on_popup_disc_activate                 (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+    vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
+    i_seek = i_seconds * 50 * p_intf->p_input->stream.i_mux_rate;
+    i_size = p_intf->p_input->stream.p_selected_area->i_size;
+    vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
 
-    if( !GTK_IS_WIDGET( p_intf->p_sys->p_disc ) )
+    if( i_seek < i_size )
     {
-        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 );
+        input_Seek( p_intf->p_input, i_seek );
     }
-    gtk_widget_show( p_intf->p_sys->p_disc );
-    gdk_window_raise( p_intf->p_sys->p_disc->window );
-}
-
-void
-on_popup_audio_activate                (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
-    es_descriptor_t *       p_es;
-
-    p_es = (es_descriptor_t*)user_data;
-
-    input_ChangeES( p_intf->p_input, p_es, 1 );
+    p_main->p_playlist->b_stopped = 0;
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
 }
 
 
 void
-on_popup_subpictures_activate          (GtkMenuItem     *menuitem,
+GtkJumpCancel                          (GtkButton       *button,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
-    es_descriptor_t *       p_es;
-
-    p_es = (es_descriptor_t*)user_data;
-
-    input_ChangeES( p_intf->p_input, p_es, 2 );
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
 }
 
 
 void
-on_menubar_audio_activate              (GtkMenuItem     *menuitem,
+GtkFileOpenActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
-    es_descriptor_t *       p_es;
-
-    p_es = (es_descriptor_t*)user_data;
-
-    input_ChangeES( p_intf->p_input, p_es, 1 );
+    GtkFileOpenShow( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_menubar_subpictures_activate        (GtkMenuItem     *menuitem,
+GtkDiscOpenActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
-    es_descriptor_t *       p_es;
-
-    p_es = (es_descriptor_t*)user_data;
-
-    input_ChangeES( p_intf->p_input, p_es, 2 );
+    GtkDiscOpenShow( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_popup_navigation_activate           (GtkMenuItem     *menuitem,
+GtkNetworkOpenActivate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t * p_intf    = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
-    input_area_t *  p_area;
-    gint            i_title;
-    gint            i_chapter;
+    GtkNetworkOpenShow( GTK_WIDGET( menuitem ), NULL, user_data );
 
-    i_title   = (gint)(user_data) / 100 ;
-    i_chapter = (gint)(user_data) - ( 100 * i_title );
-    p_area    = p_intf->p_input->stream.pp_areas[i_title];
-    p_area->i_part = i_chapter;
-
-    p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
-    input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
 }
 
 
 void
-on_menubar_title_activate              (GtkMenuItem     *menuitem,
+GtkExitActivate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
-
-    p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)user_data );
-    p_intf->p_sys->b_menus_update = 1;
-    input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
+    GtkExit( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_menubar_chapter_activate            (GtkMenuItem     *menuitem,
+GtkWindowToggleActivate                (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    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;
-
-    p_area->i_part = i_chapter;
-
-    p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
-    input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
-}
-
-gboolean
-on_intf_window_destroy                 (GtkWidget       *widget,
-                                        GdkEvent        *event,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget),  "intf_window" );
-
-    vlc_mutex_lock( &p_intf->change_lock );
-    p_intf->b_die = 1;
-    vlc_mutex_unlock( &p_intf->change_lock );
-
-    return TRUE;
+    GtkWindowToggle( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_main_window_toggle                  (GtkMenuItem     *menuitem,
+GtkFullscreenActivate                  (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem),  "intf_popup" );
-    
-    if( GTK_WIDGET_VISIBLE(p_intf->p_sys->p_window) ) {
-        gtk_widget_hide( p_intf->p_sys->p_window);
-
-    } 
-    else 
-    {
-        gtk_widget_show( p_intf->p_sys->p_window );
-    }
-}
-
-
-gboolean
-on_playlist_clist_drag_motion          (GtkWidget       *widget,
-                                        GdkDragContext  *drag_context,
-                                        gint             x,
-                                        gint             y,
-                                        guint            time,
-                                        gpointer         user_data)
-{
-    GtkCList * clist;
-    gint row,col;
-    int dummy;
-    GdkColor color;
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget),  "intf_playlist" );
-   
-    
-    clist = GTK_CLIST(lookup_widget( p_intf->p_sys->p_playlist,"playlist_clist"
-             ));
-
-    if(!GTK_WIDGET_TOPLEVEL(widget))
-    {
-        gdk_window_raise( p_intf->p_sys->p_playlist->window );
-    }
-
-    color.red = 0xffff;
-    color.green = 0xffff;
-    color.blue = 0xffff;
-
-    gtk_clist_freeze( clist );
-    
-    for(dummy=0; dummy<clist->rows; dummy++)
-    {
-       gtk_clist_set_background ( clist, dummy , &color);
-    }
-    color.red = 0xffff;
-    color.green = 0;
-    color.blue = 0;
-    gtk_clist_set_background ( clist, p_main->p_playlist->i_index , &color);
-        
-    if( gtk_clist_get_selection_info( clist,x,y ,&row,&col )== 1)
-    {
-        color.red = 0;
-        color.green = 0x9000;
-        color.blue = 0xf000;
-        gtk_clist_set_background ( clist, row-1  , &color);
-        gtk_clist_set_background ( clist, row  , &color);
-    }
-
-    gtk_clist_thaw( clist );
-    
-    return TRUE;
+    GtkFullscreen( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_intf_network_destroy                (GtkObject       *object,
+GtkPlaylistActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(object), "intf_network" );
-
-    p_intf->p_sys->p_network = NULL;
+    GtkPlaylistShow( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_network_ok_clicked                  (GtkButton       *button,
+GtkModulesActivate                     (GtkMenuItem     *menuitem,
                                         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;
-
-    psz_server = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
-                                 GTK_WIDGET(button), "network_server" ) ) );
-
-    /* Check which protocol was activated */
-    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
-                                          "network_ts" ) )->active )
-    {
-        psz_protocol = "ts";
-    }
-    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
-                                               "network_rtp" ) )->active )
-    {
-        psz_protocol = "rtp";
-    }
-    else
-    {
-        intf_ErrMsg( "intf error: unknown protocol toggle button position" );
-        return;
-    }
-
-    /* Get the port number and make sure it will not overflow 5 characters */
-    i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
-                 lookup_widget( GTK_WIDGET(button), "network_port" ) ) );
-    if( i_port > 65535 )
-    {
-        intf_ErrMsg( "intf error: invalid port %i", i_port );
-    }
 
-    /* Allocate room for "protocol://server:port" */
-    psz_source = malloc( strlen( psz_protocol ) + strlen( psz_server ) + 10 );
-    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 );
-
-    gtk_widget_hide( p_intf->p_sys->p_network );
 }
 
 
 void
-on_network_cancel_clicked              (GtkButton       *button,
+GtkPreferencesActivate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+    GtkPreferencesShow( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
 void
-on_menubar_network_activate            (GtkMenuItem     *menuitem,
+GtkAboutActivate                       (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
-
-    gtk_widget_show( p_intf->p_sys->p_network );
-    gdk_window_raise( p_intf->p_sys->p_network->window );
+    GtkAboutShow( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
-void
-on_popup_network_activate              (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
-
-    gtk_widget_show( p_intf->p_sys->p_network );
-    gdk_window_raise( p_intf->p_sys->p_network->window );
-}
 
 void
-on_toolbar_network_clicked             (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
-
-    gtk_widget_show( p_intf->p_sys->p_network );
-    gdk_window_raise( p_intf->p_sys->p_network->window );
-}
-
-
-gboolean
-on_slider_button_release_event         (GtkWidget       *widget,
-                                        GdkEventButton  *event,
+GtkJumpActivate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
-
-    vlc_mutex_lock( &p_intf->change_lock );
-    p_intf->p_sys->b_slider_free = 1;
-    vlc_mutex_unlock( &p_intf->change_lock );
-
-    return FALSE;
+    GtkJumpShow( GTK_WIDGET( menuitem ), NULL, user_data );
 }
 
 
-gboolean
-on_slider_button_press_event           (GtkWidget       *widget,
-                                        GdkEventButton  *event,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
-
-    vlc_mutex_lock( &p_intf->change_lock );
-    p_intf->p_sys->b_slider_free = 0;
-    vlc_mutex_unlock( &p_intf->change_lock );
-
-    return FALSE;
-}
-
-
-void
-on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-
-}
-
-
-void
-on_menubar_angle_activate              (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
-{
-
-}
 
index 4c200c82eed7e9956242e2627a45905d52e8a26b..513e8b30e57ee265963cd703320a89c3353e93b0 100644 (file)
 #include <gtk/gtk.h>
+#include "gtk_control.h"
+#include "gtk_menu.h"
+#include "gtk_open.h"
+#include "gtk_modules.h"
+#include "gtk_playlist.h"
+#include "gtk_preferences.h"
 
 /* General glade callbacks */
 
-void
-on_intf_window_drag_data_received      (GtkWidget       *widget,
-                                        GdkDragContext  *drag_context,
-                                        gint             x,
-                                        gint             y,
-                                        GtkSelectionData *data,
-                                        guint            info,
-                                        guint            time,
+gboolean
+GtkExit                                (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
-
-void
-on_toolbar_open_clicked                (GtkButton       *button,
+gboolean
+GtkWindowToggle                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
-void
-on_toolbar_back_clicked                (GtkButton       *button,
-                                        gpointer         user_data);
 
-void
-on_toolbar_stop_clicked                (GtkButton       *button,
+gboolean
+GtkSliderRelease                       (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
-void
-on_toolbar_play_clicked                (GtkButton       *button,
+gboolean
+GtkSliderPress                         (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
 void
-on_toolbar_pause_clicked               (GtkButton       *button,
+GtkTitlePrev                           (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-on_toolbar_slow_clicked                (GtkButton       *button,
+GtkTitleNext                           (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-on_toolbar_fast_clicked                (GtkButton       *button,
+GtkChapterPrev                         (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-on_toolbar_playlist_clicked            (GtkButton       *button,
+GtkChapterNext                         (GtkButton       *button,
                                         gpointer         user_data);
 
-void
-on_toolbar_prev_clicked                (GtkButton       *button,
-                                        gpointer         user_data);
 
-void
-on_toolbar_next_clicked                (GtkButton       *button,
+gboolean
+GtkFullscreen                          (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
-
-void
-on_toolbar_network_clicked             (GtkButton       *button,
+gboolean
+GtkAboutShow                           (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
+void GtkAboutOk( GtkButton * button, gpointer user_data);
+
+
 void
-on_intf_fileopen_destroy               (GtkObject       *object,
+GtkWindowDrag                          (GtkWidget       *widget,
+                                        GdkDragContext  *drag_context,
+                                        gint             x,
+                                        gint             y,
+                                        GtkSelectionData *data,
+                                        guint            info,
+                                        guint            time,
                                         gpointer         user_data);
 
-void
-on_fileopen_ok_clicked                 (GtkButton       *button,
+gboolean
+GtkWindowDelete                        (GtkWidget       *widget,
+                                        GdkEvent        *event,
                                         gpointer         user_data);
 
+gboolean
+GtkJumpShow                            (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data);
 void
-on_fileopen_cancel_clicked             (GtkButton       *button,
+GtkJumpOk                              (GtkButton       *button,
                                         gpointer         user_data);
-
 void
-on_intf_modules_destroy                (GtkObject       *object,
+GtkJumpCancel                          (GtkButton       *button,
                                         gpointer         user_data);
 
-void
-on_modules_ok_clicked                  (GtkButton       *button,
+
+gboolean
+GtkDiscOpenShow                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
-void
-on_modules_apply_clicked               (GtkButton       *button,
+gboolean
+GtkFileOpenShow                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
-void
-on_modules_cancel_clicked              (GtkButton       *button,
+gboolean
+GtkNetworkOpenShow                     (GtkWidget       *widget,
+                                        GdkEventButton  *event,
                                         gpointer         user_data);
 
+
+
 void
-on_intf_playlist_destroy               (GtkObject       *object,
+on_menubar_open_activate               (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_playlist_ok_clicked                 (GtkButton       *button,
+on_menubar_open_activate               (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_fast_activate                 (GtkMenuItem     *menuitem,
+on_menubar_disc_activate               (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_open_activate               (GtkMenuItem     *menuitem,
+on_menubar_network_activate            (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
@@ -105,11 +122,11 @@ on_menubar_exit_activate               (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_play_activate                 (GtkMenuItem     *menuitem,
+on_menubar_interface_hide_activate     (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_exit_activate                 (GtkMenuItem     *menuitem,
+on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
@@ -129,190 +146,156 @@ on_menubar_about_activate              (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_pause_activate                (GtkMenuItem     *menuitem,
+on_popup_play_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_slow_activate                 (GtkMenuItem     *menuitem,
+on_popup_pause_activate                (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_open_activate                 (GtkMenuItem     *menuitem,
+on_popup_stop_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_about_activate                (GtkMenuItem     *menuitem,
+on_popup_back_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_about_ok_clicked                    (GtkButton       *button,
-                                        gpointer         user_data);
-
-
-void
-on_disc_dvd_toggled                    (GtkToggleButton *togglebutton,
+on_popup_slow_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_disc_vcd_toggled                    (GtkToggleButton *togglebutton,
+on_popup_fast_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_disc_ok_clicked                     (GtkButton       *button,
+on_popup_interface_toggle_activate     (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_disc_cancel_clicked                 (GtkButton       *button,
+on_popup_fullscreen_activate           (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_disc_activate               (GtkMenuItem     *menuitem,
+on_popup_next_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_toolbar_disc_clicked                (GtkButton       *button,
+on_popup_prev_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_disc_activate                 (GtkMenuItem     *menuitem,
+on_popup_jump_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_audio_activate                (GtkMenuItem     *menuitem,
+on_popup_file_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_subpictures_activate          (GtkMenuItem     *menuitem,
+on_popup_disc_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_audio_activate              (GtkMenuItem     *menuitem,
+on_popup_network_activate              (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_subpictures_activate        (GtkMenuItem     *menuitem,
+on_popup_about_activate                (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_navigation_activate           (GtkMenuItem     *menuitem,
+on_popup_playlist_activate             (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_title_activate              (GtkMenuItem     *menuitem,
+on_popup_preferences_activate          (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_chapter_activate            (GtkMenuItem     *menuitem,
-                                        gpointer         user_data);
-
-gboolean
-on_playlist_clist_event                        (GtkWidget       *widget,
-                                        GdkEvent        *event,
+on_popup_exit_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-gboolean
-on_intf_window_delete                  (GtkWidget       *widget,
-                                        GdkEvent        *event,
-                                        gpointer         user_data);
 
-gboolean
-on_intf_playlist_destroy_event         (GtkWidget       *widget,
-                                        GdkEvent        *event,
-                                        gpointer         user_data);
 
-gboolean
-on_intf_playlist_destroy_event         (GtkWidget       *widget,
-                                        GdkEvent        *event,
+void
+GtkPreferencesOk                       (GtkButton       *button,
                                         gpointer         user_data);
 
 void
-on_intf_playlist_drag_data_received    (GtkWidget       *widget,
-                                        GdkDragContext  *drag_context,
-                                        gint             x,
-                                        gint             y,
-                                        GtkSelectionData *data,
-                                        guint            info,
-                                        guint            time,
+GtkPreferencesApply                    (GtkButton       *button,
                                         gpointer         user_data);
 
-gboolean
-on_playlist_clist_event                        (GtkWidget       *widget,
-                                        GdkEvent        *event,
+void
+GtkPreferencesCancel                   (GtkButton       *button,
                                         gpointer         user_data);
 
-gboolean
-on_intf_playlist_destroy_event         (GtkWidget       *widget,
-                                        GdkEvent        *event,
+void
+GtkFileOpenActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-gboolean
-on_intf_window_destroy                 (GtkWidget       *widget,
-                                        GdkEvent        *event,
+void
+GtkDiscOpenActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-gboolean
-on_intf_window_destroy                 (GtkWidget       *widget,
-                                        GdkEvent        *event,
+void
+GtkNetworkOpenActivate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_main_window_toggle                  (GtkMenuItem     *menuitem,
+GtkExitActivate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_delete_clicked                      (GtkMenuItem     *menuitem,
+GtkWindowToggleActivate                (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_crop_activate                       (GtkMenuItem     *menuitem,
+GtkFullscreenActivate                  (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_invertselection_clicked             (GtkMenuItem     *menuitem,
+GtkPlaylistActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-gboolean
-on_playlist_clist_drag_motion          (GtkWidget       *widget,
-                                        GdkDragContext  *drag_context,
-                                        gint             x,
-                                        gint             y,
-                                        guint            time,
+void
+GtkModulesActivate                     (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_intf_network_destroy                (GtkObject       *object,
+GtkPreferencesActivate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_network_ok_clicked                  (GtkButton       *button,
+GtkAboutActivate                       (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
+
 void
-on_network_cancel_clicked              (GtkButton       *button,
+GtkNextActivate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_network_activate            (GtkMenuItem     *menuitem,
+GtkPrevActivate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_popup_network_activate              (GtkMenuItem     *menuitem,
+GtkJumpActivate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-gboolean
-on_slider_button_release_event         (GtkWidget       *widget,
-                                        GdkEventButton  *event,
+void
+GtkDiscOpenActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
-gboolean
-on_slider_button_press_event           (GtkWidget       *widget,
-                                        GdkEventButton  *event,
+void
+GtkFileOpenActivate                    (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_fullscreen_activate         (GtkMenuItem     *menuitem,
+GtkNetworkOpenActivate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_menubar_angle_activate              (GtkMenuItem     *menuitem,
+GtkPlaylistAddUrl                      (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
diff --git a/plugins/gtk/gtk_control.c b/plugins/gtk/gtk_control.c
new file mode 100644 (file)
index 0000000..424bd28
--- /dev/null
@@ -0,0 +1,236 @@
+/*****************************************************************************
+ * gtk_control.c : functions to handle stream control buttons.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: gtk_control.c,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *      
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#define MODULE_NAME gtk
+#include "modules_inner.h"
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "defs.h"
+#include <sys/types.h>                                              /* off_t */
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+
+#include <string.h>
+
+#include "config.h"
+#include "common.h"
+#include "threads.h"
+#include "mtime.h"
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+#include "intf_msg.h"
+
+#include "gtk_callbacks.h"
+#include "gtk_interface.h"
+#include "gtk_support.h"
+#include "gtk_playlist.h"
+#include "intf_gtk.h"
+
+#include "main.h"
+
+/****************************************************************************
+ * Control functions: this is where the functions are defined
+ ****************************************************************************
+ * These functions are button-items callbacks, and are used
+ * by other callbacks
+ ****************************************************************************/
+gboolean GtkControlBack( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data )
+{
+
+    return FALSE;
+}
+
+
+gboolean GtkControlStop( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( p_intf->p_input != NULL )
+    {
+        /* end playing item */
+        p_intf->p_input->b_eof = 1;
+
+        /* update playlist */
+//        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+        p_main->p_playlist->i_index--;
+        p_main->p_playlist->b_stopped = 1;
+
+//        vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+
+    }
+
+    return TRUE;
+}
+
+
+gboolean GtkControlPlay( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( p_intf->p_input != NULL )
+    {
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
+        p_main->p_playlist->b_stopped = 0;
+    }
+    else
+    {
+//        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+        if( p_main->p_playlist->b_stopped )
+        {
+            if( p_main->p_playlist->i_size )
+            {
+                intf_PlaylistJumpto( p_main->p_playlist,
+                                     p_main->p_playlist->i_index );
+                p_main->p_playlist->b_stopped = 0;
+            }
+            else
+            {
+                GtkFileOpenShow( widget, event, user_data );
+            }
+        }
+
+//        vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+    }
+
+    return TRUE;
+}
+
+
+gboolean GtkControlPause( GtkWidget       *widget,
+                          GdkEventButton  *event,
+                          gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( p_intf->p_input != NULL )
+    {
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PAUSE );
+        p_main->p_playlist->b_stopped = 0;
+    }
+
+    return TRUE;
+}
+
+
+gboolean GtkControlSlow( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( p_intf->p_input != NULL )
+    {
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_SLOWER );
+        p_main->p_playlist->b_stopped = 0;
+    }
+
+    return TRUE;
+}
+
+
+gboolean GtkControlFast( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( p_intf->p_input != NULL )
+    {
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_FASTER );
+        p_main->p_playlist->b_stopped = 0;
+    }
+
+    return TRUE;
+}
+
+
+/****************************************************************************
+ * Control callbacks for menuitems
+ ****************************************************************************
+ * We have different callaback for menuitem since we must use the
+ * activate signal toi popdown the menu automatically
+ ****************************************************************************/
+void GtkPlayActivate( GtkMenuItem * menuitem, gpointer user_data )
+{
+    GtkControlPlay( GTK_WIDGET( menuitem ), NULL, user_data );
+}
+
+
+void GtkPauseActivate( GtkMenuItem * menuitem, gpointer user_data )
+{
+    GtkControlPause( GTK_WIDGET( menuitem ), NULL, user_data );
+
+}
+
+
+void
+GtKStopActivate                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    GtkControlStop( GTK_WIDGET( menuitem ), NULL, user_data );
+
+}
+
+
+void
+GtkBackActivate                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    GtkControlBack( GTK_WIDGET( menuitem ), NULL, user_data );
+
+}
+
+
+void
+GtkSlowActivate                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    GtkControlSlow( GTK_WIDGET( menuitem ), NULL, user_data );
+
+}
+
+
+void
+GtkFastActivate                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+    GtkControlFast( GTK_WIDGET( menuitem ), NULL, user_data );
+}
+
+
diff --git a/plugins/gtk/gtk_control.h b/plugins/gtk/gtk_control.h
new file mode 100644 (file)
index 0000000..b60a964
--- /dev/null
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * gtk_control.h: prototypes for control functions
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: gtk_control.h,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+gboolean GtkControlBack ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkControlStop ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkControlPlay ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkControlPause( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkControlSlow ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkControlFast ( GtkWidget *, GdkEventButton *, gpointer );
+void GtkPlayActivate    ( GtkMenuItem *, gpointer );
+void GtkPauseActivate   ( GtkMenuItem *, gpointer );
+void GtKStopActivate    ( GtkMenuItem *, gpointer );
+void GtkBackActivate    ( GtkMenuItem *, gpointer );
+void GtkSlowActivate    ( GtkMenuItem *, gpointer );
+void GtkFastActivate    ( GtkMenuItem *, gpointer );
+
index d3b30322deeed1a533baa673d3fe390e64cbc140..bb781ecbec8f9624b684285375e1d3e5dcf1b6f1 100644 (file)
@@ -22,9 +22,9 @@ GtkWidget*
 create_intf_window (void)
 {
   GtkWidget *intf_window;
-  GtkWidget *vbox2;
-  GtkWidget *handlebox2;
-  GtkWidget *menubar1;
+  GtkWidget *window_vbox;
+  GtkWidget *menubar_handlebox;
+  GtkWidget *menubar;
   guint tmp_key;
   GtkWidget *menubar_file;
   GtkWidget *menubar_file_menu;
@@ -37,6 +37,7 @@ create_intf_window (void)
   GtkWidget *menubar_view;
   GtkWidget *menubar_view_menu;
   GtkAccelGroup *menubar_view_menu_accels;
+  GtkWidget *menubar_interface_hide;
   GtkWidget *menubar_fullscreen;
   GtkWidget *separator13;
   GtkWidget *menubar_title;
@@ -48,7 +49,6 @@ create_intf_window (void)
   GtkWidget *menubar_settings;
   GtkWidget *menubar_settings_menu;
   GtkAccelGroup *menubar_settings_menu_accels;
-  GtkWidget *separator7;
   GtkWidget *menubar_audio;
   GtkWidget *menubar_subpictures;
   GtkWidget *separator8;
@@ -57,7 +57,7 @@ create_intf_window (void)
   GtkWidget *menubar_help_menu;
   GtkAccelGroup *menubar_help_menu_accels;
   GtkWidget *menubar_about;
-  GtkWidget *handlebox1;
+  GtkWidget *toolbar_handlebox;
   GtkWidget *toolbar;
   GtkWidget *toolbar_open;
   GtkWidget *toolbar_disc;
@@ -73,6 +73,27 @@ create_intf_window (void)
   GtkWidget *toolbar_next;
   GtkWidget *slider_frame;
   GtkWidget *slider;
+  GtkWidget *file_box;
+  GtkWidget *label_status;
+  GtkWidget *dvd_box;
+  GtkWidget *dvd_label;
+  GtkWidget *title_box;
+  GtkWidget *title;
+  GtkWidget *title_label;
+  GtkWidget *title_prev_button;
+  GtkWidget *title_next_button;
+  GtkWidget *dvd_separator;
+  GtkWidget *chapter_box;
+  GtkWidget *chapter;
+  GtkWidget *chapter_label;
+  GtkWidget *chapter_prev_button;
+  GtkWidget *chapter_next_button;
+  GtkWidget *network_box;
+  GtkWidget *network_address;
+  GtkWidget *network_channel_box;
+  GtkWidget *channel_label;
+  GtkObject *channel_spinbutton_adj;
+  GtkWidget *channel_spinbutton;
   GtkWidget *intf_statusbar;
   GtkAccelGroup *accel_group;
   GtkTooltips *tooltips;
@@ -84,27 +105,28 @@ create_intf_window (void)
   intf_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_object_set_data (GTK_OBJECT (intf_window), "intf_window", intf_window);
   gtk_window_set_title (GTK_WINDOW (intf_window), _("VideoLAN Client"));
+  gtk_window_set_policy (GTK_WINDOW (intf_window), TRUE, TRUE, TRUE);
 
-  vbox2 = gtk_vbox_new (FALSE, 0);
-  gtk_widget_ref (vbox2);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "vbox2", vbox2,
+  window_vbox = gtk_vbox_new (FALSE, 0);
+  gtk_widget_ref (window_vbox);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "window_vbox", window_vbox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (vbox2);
-  gtk_container_add (GTK_CONTAINER (intf_window), vbox2);
+  gtk_widget_show (window_vbox);
+  gtk_container_add (GTK_CONTAINER (intf_window), window_vbox);
 
-  handlebox2 = gtk_handle_box_new ();
-  gtk_widget_ref (handlebox2);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "handlebox2", handlebox2,
+  menubar_handlebox = gtk_handle_box_new ();
+  gtk_widget_ref (menubar_handlebox);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_handlebox", menubar_handlebox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (handlebox2);
-  gtk_box_pack_start (GTK_BOX (vbox2), handlebox2, FALSE, TRUE, 0);
+  gtk_widget_show (menubar_handlebox);
+  gtk_box_pack_start (GTK_BOX (window_vbox), menubar_handlebox, FALSE, TRUE, 0);
 
-  menubar1 = gtk_menu_bar_new ();
-  gtk_widget_ref (menubar1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar1", menubar1,
+  menubar = gtk_menu_bar_new ();
+  gtk_widget_ref (menubar);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar", menubar,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (menubar1);
-  gtk_container_add (GTK_CONTAINER (handlebox2), menubar1);
+  gtk_widget_show (menubar);
+  gtk_container_add (GTK_CONTAINER (menubar_handlebox), menubar);
 
   menubar_file = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_file)->child),
@@ -115,7 +137,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_file", menubar_file,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (menubar_file);
-  gtk_container_add (GTK_CONTAINER (menubar1), menubar_file);
+  gtk_container_add (GTK_CONTAINER (menubar), menubar_file);
 
   menubar_file_menu = gtk_menu_new ();
   gtk_widget_ref (menubar_file_menu);
@@ -201,7 +223,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_view", menubar_view,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (menubar_view);
-  gtk_container_add (GTK_CONTAINER (menubar1), menubar_view);
+  gtk_container_add (GTK_CONTAINER (menubar), menubar_view);
 
   menubar_view_menu = gtk_menu_new ();
   gtk_widget_ref (menubar_view_menu);
@@ -210,6 +232,18 @@ 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_interface_hide = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_interface_hide)->child),
+                                   _("_Hide interface"));
+  gtk_widget_add_accelerator (menubar_interface_hide, "activate_item", menubar_view_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (menubar_interface_hide);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_interface_hide", menubar_interface_hide,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (menubar_interface_hide);
+  gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_interface_hide);
+  gtk_tooltips_set_tip (tooltips, menubar_interface_hide, _("Hide the main interface window"), NULL);
+
   menubar_fullscreen = gtk_check_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_fullscreen)->child),
                                    _("_Fullscreen"));
@@ -265,6 +299,7 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (menubar_angle);
   gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_angle);
+  gtk_widget_set_sensitive (menubar_angle, FALSE);
 
   separator11 = gtk_menu_item_new ();
   gtk_widget_ref (separator11);
@@ -308,7 +343,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_settings", menubar_settings,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (menubar_settings);
-  gtk_container_add (GTK_CONTAINER (menubar1), menubar_settings);
+  gtk_container_add (GTK_CONTAINER (menubar), menubar_settings);
 
   menubar_settings_menu = gtk_menu_new ();
   gtk_widget_ref (menubar_settings_menu);
@@ -317,14 +352,6 @@ create_intf_window (void)
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (menubar_settings), menubar_settings_menu);
   menubar_settings_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (menubar_settings_menu));
 
-  separator7 = gtk_menu_item_new ();
-  gtk_widget_ref (separator7);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator7", separator7,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (separator7);
-  gtk_container_add (GTK_CONTAINER (menubar_settings_menu), separator7);
-  gtk_widget_set_sensitive (separator7, FALSE);
-
   menubar_audio = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_audio)->child),
                                    _("A_udio"));
@@ -369,7 +396,6 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (menubar_preferences);
   gtk_container_add (GTK_CONTAINER (menubar_settings_menu), menubar_preferences);
-  gtk_widget_set_sensitive (menubar_preferences, FALSE);
   gtk_tooltips_set_tip (tooltips, menubar_preferences, _("Configure the application"), NULL);
 
   menubar_help = gtk_menu_item_new_with_label ("");
@@ -381,7 +407,7 @@ create_intf_window (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_help", menubar_help,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (menubar_help);
-  gtk_container_add (GTK_CONTAINER (menubar1), menubar_help);
+  gtk_container_add (GTK_CONTAINER (menubar), menubar_help);
 
   menubar_help_menu = gtk_menu_new ();
   gtk_widget_ref (menubar_help_menu);
@@ -402,19 +428,19 @@ create_intf_window (void)
   gtk_container_add (GTK_CONTAINER (menubar_help_menu), menubar_about);
   gtk_tooltips_set_tip (tooltips, menubar_about, _("About this application"), NULL);
 
-  handlebox1 = gtk_handle_box_new ();
-  gtk_widget_ref (handlebox1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_window), "handlebox1", handlebox1,
+  toolbar_handlebox = gtk_handle_box_new ();
+  gtk_widget_ref (toolbar_handlebox);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_handlebox", toolbar_handlebox,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (handlebox1);
-  gtk_box_pack_start (GTK_BOX (vbox2), handlebox1, FALSE, TRUE, 0);
+  gtk_widget_show (toolbar_handlebox);
+  gtk_box_pack_start (GTK_BOX (window_vbox), toolbar_handlebox, FALSE, TRUE, 0);
 
   toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);
   gtk_widget_ref (toolbar);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar", toolbar,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (toolbar);
-  gtk_container_add (GTK_CONTAINER (handlebox1), toolbar);
+  gtk_container_add (GTK_CONTAINER (toolbar_handlebox), toolbar);
   gtk_container_set_border_width (GTK_CONTAINER (toolbar), 1);
   gtk_toolbar_set_space_size (GTK_TOOLBAR (toolbar), 16);
   gtk_toolbar_set_space_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_SPACE_LINE);
@@ -500,6 +526,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);
 
   toolbar_slow = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                 GTK_TOOLBAR_CHILD_BUTTON,
@@ -511,6 +538,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);
 
   toolbar_fast = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
                                 GTK_TOOLBAR_CHILD_BUTTON,
@@ -522,6 +550,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));
 
@@ -562,8 +591,7 @@ create_intf_window (void)
   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 (slider_frame);
-  gtk_box_pack_start (GTK_BOX (vbox2), slider_frame, TRUE, TRUE, 0);
+  gtk_box_pack_start (GTK_BOX (window_vbox), 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)));
@@ -572,94 +600,254 @@ create_intf_window (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (slider);
   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);
 
+  file_box = gtk_hbox_new (FALSE, 0);
+  gtk_widget_ref (file_box);
+  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 (window_vbox), file_box, TRUE, TRUE, 0);
+  gtk_widget_set_usize (file_box, 500, 24);
+
+  label_status = gtk_label_new ("");
+  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 (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 (window_vbox), dvd_box, TRUE, TRUE, 0);
+  gtk_widget_set_usize (dvd_box, 500, 24);
+
+  dvd_label = gtk_label_new (_("DVD"));
+  gtk_widget_ref (dvd_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "dvd_label", dvd_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (dvd_label);
+  gtk_box_pack_start (GTK_BOX (dvd_box), dvd_label, TRUE, FALSE, 0);
+
+  title_box = gtk_hbox_new (FALSE, 0);
+  gtk_widget_ref (title_box);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "title_box", title_box,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (title_box);
+  gtk_box_pack_start (GTK_BOX (dvd_box), title_box, TRUE, TRUE, 0);
+
+  title = gtk_label_new (_("Title:  "));
+  gtk_widget_ref (title);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "title", title,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (title);
+  gtk_box_pack_start (GTK_BOX (title_box), title, FALSE, FALSE, 5);
+
+  title_label = gtk_label_new (_("--"));
+  gtk_widget_ref (title_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "title_label", title_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (title_label);
+  gtk_box_pack_start (GTK_BOX (title_box), title_label, FALSE, FALSE, 5);
+
+  title_prev_button = gtk_button_new_with_label (_("Prev"));
+  gtk_widget_ref (title_prev_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "title_prev_button", title_prev_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (title_prev_button);
+  gtk_box_pack_start (GTK_BOX (title_box), title_prev_button, FALSE, FALSE, 5);
+  gtk_button_set_relief (GTK_BUTTON (title_prev_button), GTK_RELIEF_NONE);
+
+  title_next_button = gtk_button_new_with_label (_("Next"));
+  gtk_widget_ref (title_next_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "title_next_button", title_next_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (title_next_button);
+  gtk_box_pack_start (GTK_BOX (title_box), title_next_button, FALSE, FALSE, 5);
+  gtk_button_set_relief (GTK_BUTTON (title_next_button), GTK_RELIEF_NONE);
+
+  dvd_separator = gtk_vseparator_new ();
+  gtk_widget_ref (dvd_separator);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "dvd_separator", dvd_separator,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (dvd_separator);
+  gtk_box_pack_start (GTK_BOX (dvd_box), dvd_separator, TRUE, TRUE, 0);
+
+  chapter_box = gtk_hbox_new (FALSE, 0);
+  gtk_widget_ref (chapter_box);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "chapter_box", chapter_box,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (chapter_box);
+  gtk_box_pack_start (GTK_BOX (dvd_box), chapter_box, TRUE, TRUE, 0);
+
+  chapter = gtk_label_new (_("Chapter:  "));
+  gtk_widget_ref (chapter);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "chapter", chapter,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (chapter);
+  gtk_box_pack_start (GTK_BOX (chapter_box), chapter, FALSE, FALSE, 5);
+
+  chapter_label = gtk_label_new (_("---"));
+  gtk_widget_ref (chapter_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "chapter_label", chapter_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (chapter_label);
+  gtk_box_pack_start (GTK_BOX (chapter_box), chapter_label, FALSE, FALSE, 5);
+
+  chapter_prev_button = gtk_button_new_with_label (_("Prev"));
+  gtk_widget_ref (chapter_prev_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "chapter_prev_button", chapter_prev_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (chapter_prev_button);
+  gtk_box_pack_start (GTK_BOX (chapter_box), chapter_prev_button, FALSE, FALSE, 5);
+  gtk_button_set_relief (GTK_BUTTON (chapter_prev_button), GTK_RELIEF_NONE);
+
+  chapter_next_button = gtk_button_new_with_label (_("Next"));
+  gtk_widget_ref (chapter_next_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "chapter_next_button", chapter_next_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (chapter_next_button);
+  gtk_box_pack_start (GTK_BOX (chapter_box), chapter_next_button, FALSE, FALSE, 5);
+  gtk_button_set_relief (GTK_BUTTON (chapter_next_button), GTK_RELIEF_NONE);
+
+  network_box = gtk_hbox_new (FALSE, 0);
+  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 (window_vbox), network_box, TRUE, TRUE, 0);
+  gtk_widget_set_usize (network_box, 500, 24);
+
+  network_address = gtk_label_new (_("No server !"));
+  gtk_widget_ref (network_address);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "network_address", network_address,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (network_address);
+  gtk_box_pack_start (GTK_BOX (network_box), network_address, TRUE, TRUE, 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, FALSE, 0);
+
+  channel_label = gtk_label_new (_("Channel:  "));
+  gtk_widget_ref (channel_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "channel_label", channel_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (channel_label);
+  gtk_box_pack_start (GTK_BOX (network_channel_box), channel_label, FALSE, FALSE, 5);
+
+  channel_spinbutton_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);
+  channel_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (channel_spinbutton_adj), 1, 0);
+  gtk_widget_ref (channel_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_window), "channel_spinbutton", channel_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (channel_spinbutton);
+  gtk_box_pack_start (GTK_BOX (network_channel_box), channel_spinbutton, FALSE, TRUE, 0);
+
   intf_statusbar = gtk_statusbar_new ();
   gtk_widget_ref (intf_statusbar);
   gtk_object_set_data_full (GTK_OBJECT (intf_window), "intf_statusbar", intf_statusbar,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (intf_statusbar);
-  gtk_box_pack_start (GTK_BOX (vbox2), intf_statusbar, FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (window_vbox), intf_statusbar, FALSE, FALSE, 0);
+  gtk_widget_set_usize (intf_statusbar, 500, -2);
 
   gtk_signal_connect (GTK_OBJECT (intf_window), "drag_data_received",
-                      GTK_SIGNAL_FUNC (on_intf_window_drag_data_received),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkWindowDrag),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (intf_window), "delete_event",
-                      GTK_SIGNAL_FUNC (on_intf_window_destroy),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkWindowDelete),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_open), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_open_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkFileOpenActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_disc), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_disc_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkDiscOpenActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_network), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_network_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_exit), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_exit_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkExitActivate),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (menubar_interface_hide), "activate",
+                      GTK_SIGNAL_FUNC (GtkWindowToggleActivate),
+                      "intf_window");
   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_FUNC (GtkFullscreenActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_playlist), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_playlist_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkPlaylistActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_modules), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_modules_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkModulesActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_preferences), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_preferences_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkPreferencesActivate),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (menubar_about), "activate",
-                      GTK_SIGNAL_FUNC (on_menubar_about_activate),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_open), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_open_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_disc), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_disc_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_network), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_network_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_back), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_back_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_stop), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_stop_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_play), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_play_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_pause), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_pause_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_slow), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_slow_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_fast), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_fast_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_playlist), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_playlist_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_prev), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_prev_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (toolbar_next), "clicked",
-                      GTK_SIGNAL_FUNC (on_toolbar_next_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkAboutActivate),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_open), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkFileOpenShow),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_disc), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkDiscOpenShow),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_network), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenShow),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_back), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkControlBack),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_stop), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkControlStop),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_play), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkControlPlay),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_pause), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkControlPause),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_slow), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkControlSlow),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_fast), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkControlFast),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_playlist), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkPlaylistShow),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_prev), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkPlaylistPrev),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (toolbar_next), "button_press_event",
+                      GTK_SIGNAL_FUNC (GtkPlaylistNext),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (slider), "button_release_event",
-                      GTK_SIGNAL_FUNC (on_slider_button_release_event),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkSliderRelease),
+                      "intf_window");
   gtk_signal_connect (GTK_OBJECT (slider), "button_press_event",
-                      GTK_SIGNAL_FUNC (on_slider_button_press_event),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkSliderPress),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (title_prev_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkTitlePrev),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (title_next_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkTitleNext),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (chapter_prev_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkChapterPrev),
+                      "intf_window");
+  gtk_signal_connect (GTK_OBJECT (chapter_next_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkChapterNext),
+                      "intf_window");
 
   gtk_object_set_data (GTK_OBJECT (intf_window), "tooltips", tooltips);
 
@@ -676,22 +864,31 @@ create_intf_popup (void)
   guint tmp_key;
   GtkWidget *popup_play;
   GtkWidget *popup_pause;
+  GtkWidget *popup_stop;
+  GtkWidget *popup_back;
   GtkWidget *popup_slow;
   GtkWidget *popup_fast;
   GtkWidget *separator6;
-  GtkWidget *main_window_toggle;
+  GtkWidget *popup_interface_toggle;
+  GtkWidget *popup_fullscreen;
   GtkWidget *separator5;
+  GtkWidget *popup_next;
+  GtkWidget *popup_prev;
+  GtkWidget *popup_jump;
   GtkWidget *popup_navigation;
+  GtkWidget *popup_angle;
   GtkWidget *popup_audio;
   GtkWidget *popup_subpictures;
-  GtkWidget *popup_file;
-  GtkWidget *popup_file_menu;
-  GtkAccelGroup *popup_file_menu_accels;
   GtkWidget *popup_open;
+  GtkWidget *popup_open_menu;
+  GtkAccelGroup *popup_open_menu_accels;
+  GtkWidget *popup_file;
   GtkWidget *popup_disc;
   GtkWidget *popup_network;
   GtkWidget *separator12;
   GtkWidget *popup_about;
+  GtkWidget *popup_playlist;
+  GtkWidget *popup_preferences;
   GtkWidget *separator9;
   GtkWidget *popup_exit;
   GtkTooltips *tooltips;
@@ -719,6 +916,23 @@ create_intf_popup (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (popup_pause);
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_pause);
+  gtk_widget_set_sensitive (popup_pause, FALSE);
+
+  popup_stop = gtk_menu_item_new_with_label (_("Stop"));
+  gtk_widget_ref (popup_stop);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_stop", popup_stop,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_stop);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_stop);
+  gtk_widget_set_sensitive (popup_stop, FALSE);
+
+  popup_back = gtk_menu_item_new_with_label (_("Back"));
+  gtk_widget_ref (popup_back);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_back", popup_back,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_back);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_back);
+  gtk_widget_set_sensitive (popup_back, FALSE);
 
   popup_slow = gtk_menu_item_new_with_label (_("Slow"));
   gtk_widget_ref (popup_slow);
@@ -726,6 +940,7 @@ create_intf_popup (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (popup_slow);
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_slow);
+  gtk_widget_set_sensitive (popup_slow, FALSE);
 
   popup_fast = gtk_menu_item_new_with_label (_("Fast"));
   gtk_widget_ref (popup_fast);
@@ -733,6 +948,7 @@ create_intf_popup (void)
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (popup_fast);
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_fast);
+  gtk_widget_set_sensitive (popup_fast, FALSE);
 
   separator6 = gtk_menu_item_new ();
   gtk_widget_ref (separator6);
@@ -742,16 +958,30 @@ create_intf_popup (void)
   gtk_container_add (GTK_CONTAINER (intf_popup), separator6);
   gtk_widget_set_sensitive (separator6, FALSE);
 
-  main_window_toggle = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (main_window_toggle)->child),
+  popup_interface_toggle = gtk_check_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_interface_toggle)->child),
                                    _("Toggle _Interface"));
-  gtk_widget_add_accelerator (main_window_toggle, "activate_item", intf_popup_accels,
+  gtk_widget_add_accelerator (popup_interface_toggle, "activate_item", intf_popup_accels,
                               tmp_key, 0, 0);
-  gtk_widget_ref (main_window_toggle);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "main_window_toggle", main_window_toggle,
+  gtk_widget_ref (popup_interface_toggle);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_interface_toggle", popup_interface_toggle,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (main_window_toggle);
-  gtk_container_add (GTK_CONTAINER (intf_popup), main_window_toggle);
+  gtk_widget_show (popup_interface_toggle);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_interface_toggle);
+  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (popup_interface_toggle), TRUE);
+  gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (popup_interface_toggle), TRUE);
+
+  popup_fullscreen = gtk_check_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_fullscreen)->child),
+                                   _("_Fullscreen"));
+  gtk_widget_add_accelerator (popup_fullscreen, "activate_item", intf_popup_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (popup_fullscreen);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_fullscreen", popup_fullscreen,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_fullscreen);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_fullscreen);
+  gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (popup_fullscreen), TRUE);
 
   separator5 = gtk_menu_item_new ();
   gtk_widget_ref (separator5);
@@ -761,6 +991,31 @@ create_intf_popup (void)
   gtk_container_add (GTK_CONTAINER (intf_popup), separator5);
   gtk_widget_set_sensitive (separator5, FALSE);
 
+  popup_next = gtk_menu_item_new_with_label (_("Next"));
+  gtk_widget_ref (popup_next);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_next", popup_next,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_next);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_next);
+
+  popup_prev = gtk_menu_item_new_with_label (_("Prev"));
+  gtk_widget_ref (popup_prev);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_prev", popup_prev,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_prev);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_prev);
+
+  popup_jump = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_jump)->child),
+                                   _("_Jump..."));
+  gtk_widget_add_accelerator (popup_jump, "activate_item", intf_popup_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (popup_jump);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_jump", popup_jump,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_jump);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_jump);
+
   popup_navigation = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_navigation)->child),
                                    _("_Navigation"));
@@ -773,6 +1028,18 @@ create_intf_popup (void)
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_navigation);
   gtk_widget_set_sensitive (popup_navigation, FALSE);
 
+  popup_angle = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_angle)->child),
+                                   _("An_gle"));
+  gtk_widget_add_accelerator (popup_angle, "activate_item", intf_popup_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (popup_angle);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_angle", popup_angle,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_angle);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_angle);
+  gtk_widget_set_sensitive (popup_angle, FALSE);
+
   popup_audio = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_audio)->child),
                                    _("_Audio"));
@@ -797,58 +1064,58 @@ create_intf_popup (void)
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_subpictures);
   gtk_widget_set_sensitive (popup_subpictures, FALSE);
 
-  popup_file = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_file)->child),
+  popup_open = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_open)->child),
                                    _("_File"));
-  gtk_widget_add_accelerator (popup_file, "activate_item", intf_popup_accels,
+  gtk_widget_add_accelerator (popup_open, "activate_item", intf_popup_accels,
                               tmp_key, 0, 0);
-  gtk_widget_ref (popup_file);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file", popup_file,
+  gtk_widget_ref (popup_open);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_open", popup_open,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (popup_file);
-  gtk_container_add (GTK_CONTAINER (intf_popup), popup_file);
+  gtk_widget_show (popup_open);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_open);
 
-  popup_file_menu = gtk_menu_new ();
-  gtk_widget_ref (popup_file_menu);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file_menu", popup_file_menu,
+  popup_open_menu = gtk_menu_new ();
+  gtk_widget_ref (popup_open_menu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_open_menu", popup_open_menu,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_menu_item_set_submenu (GTK_MENU_ITEM (popup_file), popup_file_menu);
-  popup_file_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (popup_file_menu));
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (popup_open), popup_open_menu);
+  popup_open_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (popup_open_menu));
 
-  popup_open = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_open)->child),
+  popup_file = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_file)->child),
                                    _("_Open File..."));
-  gtk_widget_add_accelerator (popup_open, "activate_item", popup_file_menu_accels,
+  gtk_widget_add_accelerator (popup_file, "activate_item", popup_open_menu_accels,
                               tmp_key, 0, 0);
-  gtk_widget_ref (popup_open);
-  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_open", popup_open,
+  gtk_widget_ref (popup_file);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file", popup_file,
                             (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (popup_open);
-  gtk_container_add (GTK_CONTAINER (popup_file_menu), popup_open);
-  gtk_tooltips_set_tip (tooltips, popup_open, _("Open a File"), NULL);
+  gtk_widget_show (popup_file);
+  gtk_container_add (GTK_CONTAINER (popup_open_menu), popup_file);
+  gtk_tooltips_set_tip (tooltips, popup_file, _("Open a File"), NULL);
 
   popup_disc = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_disc)->child),
                                    _("Open _Disc..."));
-  gtk_widget_add_accelerator (popup_disc, "activate_item", popup_file_menu_accels,
+  gtk_widget_add_accelerator (popup_disc, "activate_item", popup_open_menu_accels,
                               tmp_key, 0, 0);
   gtk_widget_ref (popup_disc);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_disc", popup_disc,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (popup_disc);
-  gtk_container_add (GTK_CONTAINER (popup_file_menu), popup_disc);
+  gtk_container_add (GTK_CONTAINER (popup_open_menu), popup_disc);
   gtk_tooltips_set_tip (tooltips, popup_disc, _("Open a DVD or VCD"), NULL);
 
   popup_network = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_network)->child),
                                    _("_Network Stream..."));
-  gtk_widget_add_accelerator (popup_network, "activate_item", popup_file_menu_accels,
+  gtk_widget_add_accelerator (popup_network, "activate_item", popup_open_menu_accels,
                               tmp_key, 0, 0);
   gtk_widget_ref (popup_network);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_network", popup_network,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (popup_network);
-  gtk_container_add (GTK_CONTAINER (popup_file_menu), popup_network);
+  gtk_container_add (GTK_CONTAINER (popup_open_menu), popup_network);
   gtk_tooltips_set_tip (tooltips, popup_network, _("Select a Network Stream"), NULL);
 
   separator12 = gtk_menu_item_new ();
@@ -856,19 +1123,37 @@ create_intf_popup (void)
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator12", separator12,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (separator12);
-  gtk_container_add (GTK_CONTAINER (popup_file_menu), separator12);
+  gtk_container_add (GTK_CONTAINER (popup_open_menu), separator12);
   gtk_widget_set_sensitive (separator12, FALSE);
 
   popup_about = gtk_menu_item_new_with_label ("");
   tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_about)->child),
                                    _("_About..."));
-  gtk_widget_add_accelerator (popup_about, "activate_item", popup_file_menu_accels,
+  gtk_widget_add_accelerator (popup_about, "activate_item", popup_open_menu_accels,
                               tmp_key, 0, 0);
   gtk_widget_ref (popup_about);
   gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_about", popup_about,
                             (GtkDestroyNotify) gtk_widget_unref);
   gtk_widget_show (popup_about);
-  gtk_container_add (GTK_CONTAINER (popup_file_menu), popup_about);
+  gtk_container_add (GTK_CONTAINER (popup_open_menu), popup_about);
+
+  popup_playlist = gtk_menu_item_new_with_label (_("Playlist..."));
+  gtk_widget_ref (popup_playlist);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_playlist", popup_playlist,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_playlist);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_playlist);
+
+  popup_preferences = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (popup_preferences)->child),
+                                   _("_Preferences..."));
+  gtk_widget_add_accelerator (popup_preferences, "activate_item", intf_popup_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (popup_preferences);
+  gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_preferences", popup_preferences,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (popup_preferences);
+  gtk_container_add (GTK_CONTAINER (intf_popup), popup_preferences);
 
   separator9 = gtk_menu_item_new ();
   gtk_widget_ref (separator9);
@@ -890,35 +1175,59 @@ create_intf_popup (void)
   gtk_container_add (GTK_CONTAINER (intf_popup), popup_exit);
 
   gtk_signal_connect (GTK_OBJECT (popup_play), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_play_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkPlayActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_pause), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_pause_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkPauseActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_stop), "activate",
+                      GTK_SIGNAL_FUNC (GtKStopActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_back), "activate",
+                      GTK_SIGNAL_FUNC (GtkBackActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_slow), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_slow_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkSlowActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_fast), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_fast_activate),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (main_window_toggle), "activate",
-                      GTK_SIGNAL_FUNC (on_main_window_toggle),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (popup_open), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_open_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkFastActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_interface_toggle), "activate",
+                      GTK_SIGNAL_FUNC (GtkWindowToggleActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_fullscreen), "activate",
+                      GTK_SIGNAL_FUNC (GtkFullscreenActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_next), "activate",
+                      GTK_SIGNAL_FUNC (GtkNextActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_prev), "activate",
+                      GTK_SIGNAL_FUNC (GtkPrevActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_jump), "activate",
+                      GTK_SIGNAL_FUNC (GtkJumpActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_file), "activate",
+                      GTK_SIGNAL_FUNC (GtkFileOpenActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_disc), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_disc_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkDiscOpenActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_network), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_network_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_about), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_about_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkAboutActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_playlist), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistActivate),
+                      "intf_popup");
+  gtk_signal_connect (GTK_OBJECT (popup_preferences), "activate",
+                      GTK_SIGNAL_FUNC (GtkPreferencesActivate),
+                      "intf_popup");
   gtk_signal_connect (GTK_OBJECT (popup_exit), "activate",
-                      GTK_SIGNAL_FUNC (on_popup_exit_activate),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkExitActivate),
+                      "intf_popup");
 
   gtk_object_set_data (GTK_OBJECT (intf_popup), "tooltips", tooltips);
 
@@ -1015,8 +1324,8 @@ create_intf_about (void)
   GTK_WIDGET_SET_FLAGS (about_ok, GTK_CAN_DEFAULT);
 
   gtk_signal_connect (GTK_OBJECT (about_ok), "clicked",
-                      GTK_SIGNAL_FUNC (on_about_ok_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkAboutOk),
+                      "intf_about");
 
   gtk_widget_grab_default (about_ok);
   return intf_about;
@@ -1044,15 +1353,12 @@ create_intf_fileopen (void)
   gtk_widget_show (fileopen_cancel);
   GTK_WIDGET_SET_FLAGS (fileopen_cancel, GTK_CAN_DEFAULT);
 
-  gtk_signal_connect (GTK_OBJECT (intf_fileopen), "destroy",
-                      GTK_SIGNAL_FUNC (on_intf_fileopen_destroy),
-                      NULL);
   gtk_signal_connect (GTK_OBJECT (fileopen_ok), "clicked",
-                      GTK_SIGNAL_FUNC (on_fileopen_ok_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkFileOpenOk),
+                      "intf_fileopen");
   gtk_signal_connect (GTK_OBJECT (fileopen_cancel), "clicked",
-                      GTK_SIGNAL_FUNC (on_fileopen_cancel_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkFileOpenCancel),
+                      "intf_fileopen");
 
   return intf_fileopen;
 }
@@ -1248,181 +1554,21 @@ create_intf_disc (void)
   gtk_box_pack_start (GTK_BOX (hbox1), disc_cancel, FALSE, TRUE, 0);
 
   gtk_signal_connect (GTK_OBJECT (disc_dvd), "toggled",
-                      GTK_SIGNAL_FUNC (on_disc_dvd_toggled),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkDiscOpenDvd),
+                      "intf_disc");
   gtk_signal_connect (GTK_OBJECT (disc_vcd), "toggled",
-                      GTK_SIGNAL_FUNC (on_disc_vcd_toggled),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkDiscOpenVcd),
+                      "intf_disc");
   gtk_signal_connect (GTK_OBJECT (disc_ok), "clicked",
-                      GTK_SIGNAL_FUNC (on_disc_ok_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkDiscOpenOk),
+                      "intf_disc");
   gtk_signal_connect (GTK_OBJECT (disc_cancel), "clicked",
-                      GTK_SIGNAL_FUNC (on_disc_cancel_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkDiscOpenCancel),
+                      "intf_disc");
 
   return intf_disc;
 }
 
-GtkWidget*
-create_intf_playlist (void)
-{
-  GtkWidget *intf_playlist;
-  GtkWidget *vbox6;
-  GtkWidget *menubar2;
-  GtkWidget *add1;
-  GtkWidget *delete1;
-  GtkWidget *delete1_menu;
-  GtkAccelGroup *delete1_menu_accels;
-  guint tmp_key;
-  GtkWidget *crop1;
-  GtkWidget *invert1;
-  GtkWidget *selection;
-  GtkWidget *selection1;
-  GtkWidget *scrolledwindow1;
-  GtkWidget *playlist_clist;
-  GtkWidget *label22;
-  GtkWidget *label23;
-
-  intf_playlist = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_object_set_data (GTK_OBJECT (intf_playlist), "intf_playlist", intf_playlist);
-  gtk_window_set_title (GTK_WINDOW (intf_playlist), _("Playlist"));
-  gtk_window_set_default_size (GTK_WINDOW (intf_playlist), 386, 200);
-
-  vbox6 = gtk_vbox_new (FALSE, 0);
-  gtk_widget_ref (vbox6);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "vbox6", vbox6,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (vbox6);
-  gtk_container_add (GTK_CONTAINER (intf_playlist), vbox6);
-
-  menubar2 = gtk_menu_bar_new ();
-  gtk_widget_ref (menubar2);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "menubar2", menubar2,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (menubar2);
-  gtk_box_pack_start (GTK_BOX (vbox6), menubar2, FALSE, FALSE, 0);
-
-  add1 = gtk_menu_item_new_with_label (_("Add"));
-  gtk_widget_ref (add1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "add1", add1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (add1);
-  gtk_container_add (GTK_CONTAINER (menubar2), add1);
-
-  delete1 = gtk_menu_item_new_with_label (_("Delete"));
-  gtk_widget_ref (delete1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "delete1", delete1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (delete1);
-  gtk_container_add (GTK_CONTAINER (menubar2), delete1);
-
-  delete1_menu = gtk_menu_new ();
-  gtk_widget_ref (delete1_menu);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "delete1_menu", delete1_menu,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_menu_item_set_submenu (GTK_MENU_ITEM (delete1), delete1_menu);
-  delete1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (delete1_menu));
-
-  crop1 = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (crop1)->child),
-                                   _("_crop"));
-  gtk_widget_add_accelerator (crop1, "activate_item", delete1_menu_accels,
-                              tmp_key, 0, 0);
-  gtk_widget_ref (crop1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "crop1", crop1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (crop1);
-  gtk_container_add (GTK_CONTAINER (delete1_menu), crop1);
-
-  invert1 = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (invert1)->child),
-                                   _("_invert"));
-  gtk_widget_add_accelerator (invert1, "activate_item", delete1_menu_accels,
-                              tmp_key, 0, 0);
-  gtk_widget_ref (invert1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "invert1", invert1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (invert1);
-  gtk_container_add (GTK_CONTAINER (delete1_menu), invert1);
-
-  selection = gtk_menu_item_new_with_label ("");
-  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (selection)->child),
-                                   _("_selection"));
-  gtk_widget_add_accelerator (selection, "activate_item", delete1_menu_accels,
-                              tmp_key, 0, 0);
-  gtk_widget_ref (selection);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "selection", selection,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (selection);
-  gtk_container_add (GTK_CONTAINER (delete1_menu), selection);
-
-  selection1 = gtk_menu_item_new_with_label (_("Selection"));
-  gtk_widget_ref (selection1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "selection1", selection1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (selection1);
-  gtk_container_add (GTK_CONTAINER (menubar2), selection1);
-
-  scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
-  gtk_widget_ref (scrolledwindow1);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "scrolledwindow1", scrolledwindow1,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (scrolledwindow1);
-  gtk_box_pack_start (GTK_BOX (vbox6), scrolledwindow1, TRUE, TRUE, 0);
-  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
-  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 (scrolledwindow1), playlist_clist);
-  gtk_container_set_border_width (GTK_CONTAINER (playlist_clist), 1);
-  gtk_clist_set_column_width (GTK_CLIST (playlist_clist), 0, 257);
-  gtk_clist_set_column_width (GTK_CLIST (playlist_clist), 1, 80);
-  gtk_clist_set_selection_mode (GTK_CLIST (playlist_clist), GTK_SELECTION_EXTENDED);
-  gtk_clist_column_titles_show (GTK_CLIST (playlist_clist));
-  gtk_clist_set_shadow_type (GTK_CLIST (playlist_clist), GTK_SHADOW_OUT);
-
-  label22 = gtk_label_new (_("File"));
-  gtk_widget_ref (label22);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label22", label22,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label22);
-  gtk_clist_set_column_widget (GTK_CLIST (playlist_clist), 0, label22);
-
-  label23 = gtk_label_new (_("Duration"));
-  gtk_widget_ref (label23);
-  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label23", label23,
-                            (GtkDestroyNotify) gtk_widget_unref);
-  gtk_widget_show (label23);
-  gtk_clist_set_column_widget (GTK_CLIST (playlist_clist), 1, label23);
-
-  gtk_signal_connect (GTK_OBJECT (intf_playlist), "delete_event",
-                      GTK_SIGNAL_FUNC (on_intf_playlist_destroy_event),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (crop1), "activate",
-                      GTK_SIGNAL_FUNC (on_crop_activate),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (invert1), "activate",
-                      GTK_SIGNAL_FUNC (on_invertselection_clicked),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (selection), "activate",
-                      GTK_SIGNAL_FUNC (on_delete_clicked),
-                      NULL);
-  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_intf_playlist_drag_data_received),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_motion",
-                      GTK_SIGNAL_FUNC (on_playlist_clist_drag_motion),
-                      NULL);
-
-  return intf_playlist;
-}
-
 GtkWidget*
 create_intf_network (void)
 {
@@ -1442,6 +1588,11 @@ create_intf_network (void)
   GtkWidget *network_port;
   GtkWidget *label24;
   GtkWidget *label25;
+  GtkWidget *broadcast_check;
+  GtkWidget *network_broadcast_combo;
+  GtkWidget *network_broadcast;
+  GtkWidget *network_server_combo;
+  GList *network_server_combo_items = NULL;
   GtkWidget *network_server;
   GtkWidget *hbox4;
   GtkWidget *hbox5;
@@ -1450,7 +1601,7 @@ create_intf_network (void)
 
   intf_network = gtk_dialog_new ();
   gtk_object_set_data (GTK_OBJECT (intf_network), "intf_network", intf_network);
-  gtk_window_set_title (GTK_WINDOW (intf_network), _("Open Disc"));
+  gtk_window_set_title (GTK_WINDOW (intf_network), _("Open Network"));
   gtk_window_set_modal (GTK_WINDOW (intf_network), TRUE);
   gtk_window_set_policy (GTK_WINDOW (intf_network), FALSE, FALSE, FALSE);
 
@@ -1521,7 +1672,7 @@ create_intf_network (void)
   gtk_widget_show (frame5);
   gtk_box_pack_start (GTK_BOX (hbox6), frame5, 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);
@@ -1561,14 +1712,49 @@ create_intf_network (void)
                     (GtkAttachOptions) (0), 0, 0);
   gtk_misc_set_alignment (GTK_MISC (label25), 0, 0.5);
 
-  network_server = gtk_entry_new ();
+  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_broadcast_combo = gtk_combo_new ();
+  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);
+  gtk_widget_set_sensitive (network_broadcast_combo, FALSE);
+
+  network_broadcast = GTK_COMBO (network_broadcast_combo)->entry;
+  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 = gtk_combo_new ();
+  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_combo_items = g_list_append (network_server_combo_items, (gpointer) _("vls"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (network_server_combo), network_server_combo_items);
+  g_list_free (network_server_combo_items);
+
+  network_server = GTK_COMBO (network_server_combo)->entry;
   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"));
 
   hbox4 = GTK_DIALOG (intf_network)->action_area;
@@ -1597,22 +1783,1405 @@ create_intf_network (void)
   gtk_widget_show (network_cancel);
   gtk_box_pack_start (GTK_BOX (hbox5), network_cancel, FALSE, TRUE, 0);
 
-  gtk_signal_connect (GTK_OBJECT (intf_network), "destroy",
-                      GTK_SIGNAL_FUNC (on_intf_network_destroy),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (network_ts), "toggled",
-                      GTK_SIGNAL_FUNC (on_disc_dvd_toggled),
-                      NULL);
-  gtk_signal_connect (GTK_OBJECT (network_rtp), "toggled",
-                      GTK_SIGNAL_FUNC (on_disc_vcd_toggled),
-                      NULL);
+  gtk_signal_connect (GTK_OBJECT (broadcast_check), "toggled",
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenBroadcast),
+                      "intf_network");
   gtk_signal_connect (GTK_OBJECT (network_ok), "clicked",
-                      GTK_SIGNAL_FUNC (on_network_ok_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenOk),
+                      "intf_network");
   gtk_signal_connect (GTK_OBJECT (network_cancel), "clicked",
-                      GTK_SIGNAL_FUNC (on_network_cancel_clicked),
-                      NULL);
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenCancel),
+                      "intf_network");
 
   return intf_network;
 }
 
+GtkWidget*
+create_intf_jump (void)
+{
+  GtkWidget *intf_jump;
+  GtkWidget *dialog_vbox3;
+  GtkWidget *jump_frame;
+  GtkWidget *hbox13;
+  GtkWidget *jump_seconde_label;
+  GtkObject *jump_seconde_spinbutton_adj;
+  GtkWidget *jump_seconde_spinbutton;
+  GtkWidget *jump_minute_label;
+  GtkObject *jump_minute_spinbutton_adj;
+  GtkWidget *jump_minute_spinbutton;
+  GtkWidget *jump_hour_label;
+  GtkObject *jump_hour_spinbutton_adj;
+  GtkWidget *jump_hour_spinbutton;
+  GtkWidget *dialog_action_area2;
+  GtkWidget *jump_ok_button;
+  GtkWidget *jump_cancel_button;
+
+  intf_jump = gtk_dialog_new ();
+  gtk_object_set_data (GTK_OBJECT (intf_jump), "intf_jump", intf_jump);
+  gtk_window_set_title (GTK_WINDOW (intf_jump), _("Jump"));
+  gtk_window_set_policy (GTK_WINDOW (intf_jump), TRUE, TRUE, FALSE);
+
+  dialog_vbox3 = GTK_DIALOG (intf_jump)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_jump), "dialog_vbox3", dialog_vbox3);
+  gtk_widget_show (dialog_vbox3);
+
+  jump_frame = gtk_frame_new (_("Go 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 (dialog_vbox3), jump_frame, TRUE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (jump_frame), 5);
+  gtk_frame_set_label_align (GTK_FRAME (jump_frame), 0.05, 0.5);
+
+  hbox13 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_ref (hbox13);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "hbox13", hbox13,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (hbox13);
+  gtk_container_add (GTK_CONTAINER (jump_frame), hbox13);
+
+  jump_seconde_label = gtk_label_new (_("s."));
+  gtk_widget_ref (jump_seconde_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_seconde_label", jump_seconde_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_seconde_label);
+  gtk_box_pack_end (GTK_BOX (hbox13), jump_seconde_label, FALSE, FALSE, 5);
+
+  jump_seconde_spinbutton_adj = gtk_adjustment_new (0, 0, 60, 1, 10, 10);
+  jump_seconde_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (jump_seconde_spinbutton_adj), 1, 0);
+  gtk_widget_ref (jump_seconde_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_seconde_spinbutton", jump_seconde_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_seconde_spinbutton);
+  gtk_box_pack_end (GTK_BOX (hbox13), jump_seconde_spinbutton, FALSE, TRUE, 0);
+
+  jump_minute_label = gtk_label_new (_("m:"));
+  gtk_widget_ref (jump_minute_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_minute_label", jump_minute_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_minute_label);
+  gtk_box_pack_end (GTK_BOX (hbox13), jump_minute_label, FALSE, FALSE, 5);
+
+  jump_minute_spinbutton_adj = gtk_adjustment_new (0, 0, 60, 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 (hbox13), jump_minute_spinbutton, FALSE, TRUE, 0);
+
+  jump_hour_label = gtk_label_new (_("h:"));
+  gtk_widget_ref (jump_hour_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_hour_label", jump_hour_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_hour_label);
+  gtk_box_pack_end (GTK_BOX (hbox13), jump_hour_label, FALSE, FALSE, 5);
+
+  jump_hour_spinbutton_adj = gtk_adjustment_new (0, 0, 12, 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 (hbox13), jump_hour_spinbutton, FALSE, TRUE, 0);
+
+  dialog_action_area2 = GTK_DIALOG (intf_jump)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_jump), "dialog_action_area2", dialog_action_area2);
+  gtk_widget_show (dialog_action_area2);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area2), 10);
+
+  jump_ok_button = gtk_button_new_with_label (_("Ok"));
+  gtk_widget_ref (jump_ok_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_ok_button", jump_ok_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_ok_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area2), jump_ok_button, TRUE, TRUE, 0);
+
+  jump_cancel_button = gtk_button_new_with_label (_("Cancel"));
+  gtk_widget_ref (jump_cancel_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_jump), "jump_cancel_button", jump_cancel_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (jump_cancel_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area2), jump_cancel_button, TRUE, TRUE, 0);
+
+  gtk_signal_connect (GTK_OBJECT (jump_ok_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkJumpOk),
+                      "intf_jump");
+  gtk_signal_connect (GTK_OBJECT (jump_cancel_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkJumpCancel),
+                      "intf_jump");
+
+  return intf_jump;
+}
+
+GtkWidget*
+create_intf_playlist (void)
+{
+  GtkWidget *intf_playlist;
+  GtkWidget *dialog_vbox4;
+  GtkWidget *playlist_menubar;
+  GtkWidget *playlist_add;
+  GtkWidget *playlist_add_menu;
+  GtkAccelGroup *playlist_add_menu_accels;
+  GtkWidget *playlist_add_disc;
+  GtkWidget *playlist_add_file;
+  GtkWidget *playlist_add_network;
+  GtkWidget *playlist_add_url;
+  GtkWidget *playlist_delete;
+  GtkWidget *playlist_delete_menu;
+  GtkAccelGroup *playlist_delete_menu_accels;
+  GtkWidget *playlist_delete_all;
+  GtkWidget *playlist_delete_selected;
+  GtkWidget *playlist_selection;
+  GtkWidget *playlist_selection_menu;
+  GtkAccelGroup *playlist_selection_menu_accels;
+  guint tmp_key;
+  GtkWidget *playlist_selection_crop;
+  GtkWidget *playlist_selection_invert;
+  GtkWidget *playlist_selection_select;
+  GtkWidget *scrolledwindow1;
+  GtkWidget *playlist_clist;
+  GtkWidget *label22;
+  GtkWidget *label23;
+  GtkWidget *dialog_action_area3;
+  GtkWidget *playlist_ok_button;
+  GtkWidget *playlist_cancel_button;
+
+  intf_playlist = gtk_dialog_new ();
+  gtk_object_set_data (GTK_OBJECT (intf_playlist), "intf_playlist", intf_playlist);
+  gtk_window_set_title (GTK_WINDOW (intf_playlist), _("Playlist"));
+  gtk_window_set_default_size (GTK_WINDOW (intf_playlist), 400, 300);
+  gtk_window_set_policy (GTK_WINDOW (intf_playlist), TRUE, TRUE, FALSE);
+
+  dialog_vbox4 = GTK_DIALOG (intf_playlist)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_playlist), "dialog_vbox4", dialog_vbox4);
+  gtk_widget_show (dialog_vbox4);
+
+  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 (dialog_vbox4), playlist_menubar, FALSE, FALSE, 0);
+
+  playlist_add = gtk_menu_item_new_with_label (_("Add"));
+  gtk_widget_ref (playlist_add);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add", playlist_add,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_add);
+  gtk_container_add (GTK_CONTAINER (playlist_menubar), playlist_add);
+
+  playlist_add_menu = gtk_menu_new ();
+  gtk_widget_ref (playlist_add_menu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_menu", playlist_add_menu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (playlist_add), playlist_add_menu);
+  playlist_add_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (playlist_add_menu));
+
+  playlist_add_disc = gtk_menu_item_new_with_label (_("Disc"));
+  gtk_widget_ref (playlist_add_disc);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_disc", playlist_add_disc,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_add_disc);
+  gtk_container_add (GTK_CONTAINER (playlist_add_menu), playlist_add_disc);
+
+  playlist_add_file = gtk_menu_item_new_with_label (_("File"));
+  gtk_widget_ref (playlist_add_file);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_file", playlist_add_file,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_add_file);
+  gtk_container_add (GTK_CONTAINER (playlist_add_menu), playlist_add_file);
+
+  playlist_add_network = gtk_menu_item_new_with_label (_("Network"));
+  gtk_widget_ref (playlist_add_network);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_network", playlist_add_network,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_add_network);
+  gtk_container_add (GTK_CONTAINER (playlist_add_menu), playlist_add_network);
+
+  playlist_add_url = gtk_menu_item_new_with_label (_("Url"));
+  gtk_widget_ref (playlist_add_url);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_add_url", playlist_add_url,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_add_url);
+  gtk_container_add (GTK_CONTAINER (playlist_add_menu), playlist_add_url);
+
+  playlist_delete = gtk_menu_item_new_with_label (_("Delete"));
+  gtk_widget_ref (playlist_delete);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_delete", playlist_delete,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_delete);
+  gtk_container_add (GTK_CONTAINER (playlist_menubar), playlist_delete);
+
+  playlist_delete_menu = gtk_menu_new ();
+  gtk_widget_ref (playlist_delete_menu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_delete_menu", playlist_delete_menu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (playlist_delete), playlist_delete_menu);
+  playlist_delete_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (playlist_delete_menu));
+
+  playlist_delete_all = gtk_menu_item_new_with_label (_("All"));
+  gtk_widget_ref (playlist_delete_all);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_delete_all", playlist_delete_all,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_delete_all);
+  gtk_container_add (GTK_CONTAINER (playlist_delete_menu), playlist_delete_all);
+
+  playlist_delete_selected = gtk_menu_item_new_with_label (_("Selected"));
+  gtk_widget_ref (playlist_delete_selected);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_delete_selected", playlist_delete_selected,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_delete_selected);
+  gtk_container_add (GTK_CONTAINER (playlist_delete_menu), playlist_delete_selected);
+
+  playlist_selection = gtk_menu_item_new_with_label (_("Selection"));
+  gtk_widget_ref (playlist_selection);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection", playlist_selection,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_selection);
+  gtk_container_add (GTK_CONTAINER (playlist_menubar), playlist_selection);
+
+  playlist_selection_menu = gtk_menu_new ();
+  gtk_widget_ref (playlist_selection_menu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_menu", playlist_selection_menu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (playlist_selection), playlist_selection_menu);
+  playlist_selection_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (playlist_selection_menu));
+
+  playlist_selection_crop = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (playlist_selection_crop)->child),
+                                   _("_Crop"));
+  gtk_widget_add_accelerator (playlist_selection_crop, "activate_item", playlist_selection_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (playlist_selection_crop);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_crop", playlist_selection_crop,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_selection_crop);
+  gtk_container_add (GTK_CONTAINER (playlist_selection_menu), playlist_selection_crop);
+
+  playlist_selection_invert = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (playlist_selection_invert)->child),
+                                   _("_Invert"));
+  gtk_widget_add_accelerator (playlist_selection_invert, "activate_item", playlist_selection_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (playlist_selection_invert);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_invert", playlist_selection_invert,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_selection_invert);
+  gtk_container_add (GTK_CONTAINER (playlist_selection_menu), playlist_selection_invert);
+
+  playlist_selection_select = gtk_menu_item_new_with_label ("");
+  tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (playlist_selection_select)->child),
+                                   _("_Select"));
+  gtk_widget_add_accelerator (playlist_selection_select, "activate_item", playlist_selection_menu_accels,
+                              tmp_key, 0, 0);
+  gtk_widget_ref (playlist_selection_select);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_selection_select", playlist_selection_select,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_selection_select);
+  gtk_container_add (GTK_CONTAINER (playlist_selection_menu), playlist_selection_select);
+
+  scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_ref (scrolledwindow1);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "scrolledwindow1", scrolledwindow1,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (scrolledwindow1);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox4), scrolledwindow1, TRUE, TRUE, 0);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  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 (scrolledwindow1), playlist_clist);
+  gtk_container_set_border_width (GTK_CONTAINER (playlist_clist), 5);
+  gtk_clist_set_column_width (GTK_CLIST (playlist_clist), 0, 257);
+  gtk_clist_set_column_width (GTK_CLIST (playlist_clist), 1, 80);
+  gtk_clist_set_selection_mode (GTK_CLIST (playlist_clist), GTK_SELECTION_EXTENDED);
+  gtk_clist_column_titles_show (GTK_CLIST (playlist_clist));
+  gtk_clist_set_shadow_type (GTK_CLIST (playlist_clist), GTK_SHADOW_OUT);
+
+  label22 = gtk_label_new (_("File"));
+  gtk_widget_ref (label22);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label22", label22,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (label22);
+  gtk_clist_set_column_widget (GTK_CLIST (playlist_clist), 0, label22);
+
+  label23 = gtk_label_new (_("Duration"));
+  gtk_widget_ref (label23);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label23", label23,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (label23);
+  gtk_clist_set_column_widget (GTK_CLIST (playlist_clist), 1, label23);
+
+  dialog_action_area3 = GTK_DIALOG (intf_playlist)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_playlist), "dialog_action_area3", dialog_action_area3);
+  gtk_widget_show (dialog_action_area3);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area3), 10);
+
+  playlist_ok_button = gtk_button_new_with_label (_("Ok"));
+  gtk_widget_ref (playlist_ok_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_ok_button", playlist_ok_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_ok_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area3), playlist_ok_button, TRUE, TRUE, 0);
+
+  playlist_cancel_button = gtk_button_new_with_label (_("Cancel"));
+  gtk_widget_ref (playlist_cancel_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_cancel_button", playlist_cancel_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (playlist_cancel_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area3), playlist_cancel_button, TRUE, TRUE, 0);
+
+  gtk_signal_connect (GTK_OBJECT (playlist_add_disc), "activate",
+                      GTK_SIGNAL_FUNC (GtkDiscOpenActivate),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_add_file), "activate",
+                      GTK_SIGNAL_FUNC (GtkFileOpenActivate),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_add_network), "activate",
+                      GTK_SIGNAL_FUNC (GtkNetworkOpenActivate),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_add_url), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistAddUrl),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_delete_all), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistDeleteAll),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_delete_selected), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistDeleteSelected),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_selection_crop), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistCrop),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_selection_invert), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistInvert),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_selection_select), "activate",
+                      GTK_SIGNAL_FUNC (GtkPlaylistSelect),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_clist), "event",
+                      GTK_SIGNAL_FUNC (GtkPlaylistEvent),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_data_received",
+                      GTK_SIGNAL_FUNC (GtkPlaylistDragData),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_motion",
+                      GTK_SIGNAL_FUNC (GtkPlaylistDragMotion),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_ok_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkPlaylistOk),
+                      "intf_playlist");
+  gtk_signal_connect (GTK_OBJECT (playlist_cancel_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkPlaylistCancel),
+                      "intf_playlist");
+
+  return intf_playlist;
+}
+
+GtkWidget*
+create_intf_preferences (void)
+{
+  GtkWidget *intf_preferences;
+  GtkWidget *dialog_vbox5;
+  GtkWidget *preferences_notebook;
+  GtkWidget *preferences_file_table;
+  GtkWidget *preferences_file_path_label;
+  GtkWidget *preferences_file_path_combo;
+  GtkWidget *preferences_file_path_entry;
+  GtkWidget *preferences_file_path_button;
+  GtkWidget *preferences_file;
+  GtkWidget *preferences_disc_table;
+  GtkWidget *preferences_disc_vcd_label;
+  GtkWidget *preference_disc_dvd_label;
+  GtkWidget *preferences_disc_dvd_combo;
+  GList *preferences_disc_dvd_combo_items = NULL;
+  GtkWidget *preferences_disc_dvd_entry;
+  GtkWidget *preferences_disc_vcd_combo;
+  GList *preferences_disc_vcd_combo_items = NULL;
+  GtkWidget *preferences_disc_vcd_entry;
+  GtkWidget *preferences_disc_dvd_browse_button;
+  GtkWidget *preferences_disc_vcd_browse_button;
+  GtkWidget *preferences_disc;
+  GtkWidget *preferences_network_table;
+  GtkWidget *preferences_network_server_combo;
+  GtkWidget *preferences_network_server_entry;
+  GtkWidget *preferences_network_broadcast_combo;
+  GtkWidget *preferences_network_broadcast_entry;
+  GtkWidget *preferences_network_server_label;
+  GtkWidget *preferences_network_port_label;
+  GtkObject *preferences_network_port_spinbutton_adj;
+  GtkWidget *preferences_network_port_spinbutton;
+  GtkWidget *preferences_network_broadcast_label;
+  GtkWidget *preferences_network_broadcast_checkbutton;
+  GtkWidget *preferences_network_protocol_label;
+  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;
+  GtkWidget *preferences_interface_table;
+  GtkWidget *preferences_interface_combo;
+  GList *preferences_interface_combo_items = NULL;
+  GtkWidget *preferences_interface_entry;
+  GtkWidget *preferences_interface_label;
+  GtkWidget *preferences_interface;
+  GtkWidget *preferences_video_table;
+  GtkWidget *preferences_video_output_combo;
+  GList *preferences_video_output_combo_items = NULL;
+  GtkWidget *preferences_video_output_entry;
+  GtkWidget *preferences_video_output_label;
+  GtkWidget *preferences_video_width_label;
+  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_height_label;
+  GtkWidget *preferences_depth_optionmenu;
+  GtkWidget *preferences_depth_optionmenu_menu;
+  GtkWidget *glade_menuitem;
+  GtkWidget *preferences_video_depth_label;
+  GtkWidget *preferences_video_fullscreen_depth_label;
+  GtkWidget *preferences_video_fullscreen_depth_optionmenu;
+  GtkWidget *preferences_video_fullscreen_depth_optionmenu_menu;
+  GtkObject *preferences_video_gamma_spinbutton_adj;
+  GtkWidget *preferences_video_gamma_spinbutton;
+  GtkWidget *preferences_video_gamma_label;
+  GtkWidget *preferences_video_fullscreen_checkbutton;
+  GtkWidget *preferences_video_grayscale_checkbutton;
+  GtkWidget *preferences_video;
+  GtkWidget *preferences_audio_table;
+  GtkWidget *preferences_audio_quality_optionmenu;
+  GtkWidget *preferences_audio_quality_optionmenu_menu;
+  GtkWidget *preferences_audio_frequency_optionmenu;
+  GtkWidget *preferences_audio_frequency_optionmenu_menu;
+  GtkWidget *preferences_audio_channels_optionmenu;
+  GtkWidget *preferences_audio_channels_optionmenu_menu;
+  GtkWidget *preferences_audio_output_label;
+  GtkWidget *preferences_audio_device_label;
+  GtkWidget *preferences_audio_quality_label;
+  GtkWidget *preferences_audio_frequency_label;
+  GtkWidget *preferences_audio_channel_label;
+  GtkWidget *preferences_audio_spdif_checkbutton;
+  GtkWidget *preferences_audio_output_combo;
+  GList *preferences_audio_output_combo_items = NULL;
+  GtkWidget *preferences_audio_output_entry;
+  GtkWidget *preferences_audio_device_combo;
+  GList *preferences_audio_device_combo_items = NULL;
+  GtkWidget *preferences_audio_device_entry;
+  GtkWidget *preferences_audio;
+  GtkWidget *preferences_playlist_table;
+  GtkWidget *preferences_playlist_startup_checkbutton;
+  GtkWidget *preferences_playlist_enqueue_checkbutton;
+  GtkWidget *preferences_playlist_loop_checkbutton;
+  GtkWidget *preferences_playlist;
+  GtkWidget *preferences_misc_table;
+  GtkWidget *preferences_misc_associated_frame;
+  GtkWidget *preferences_misc_associated_table;
+  GtkWidget *preferences_misc_associated_checkbutton;
+  GtkWidget *preferences_misc_mp2_checkbutton;
+  GtkWidget *preferences_misc_vob_checkbutton;
+  GtkWidget *preferences_misc_ts_checkbutton;
+  GtkWidget *preferences_misc_message_frame;
+  GtkWidget *preferences_misc_messages_table;
+  GtkWidget *preferences_misc_messages_label;
+  GtkObject *preferences_misc_messages_spinbutton_adj;
+  GtkWidget *preferences_misc_messages_spinbutton;
+  GtkWidget *preferences_misc;
+  GtkWidget *dialog_action_area4;
+  GtkWidget *preferences_ok_button;
+  GtkWidget *preferences_apply_button;
+  GtkWidget *preferences_cancel_button;
+
+  intf_preferences = gtk_dialog_new ();
+  gtk_object_set_data (GTK_OBJECT (intf_preferences), "intf_preferences", intf_preferences);
+  gtk_window_set_title (GTK_WINDOW (intf_preferences), _("Preferences"));
+  gtk_window_set_policy (GTK_WINDOW (intf_preferences), TRUE, TRUE, FALSE);
+
+  dialog_vbox5 = GTK_DIALOG (intf_preferences)->vbox;
+  gtk_object_set_data (GTK_OBJECT (intf_preferences), "dialog_vbox5", dialog_vbox5);
+  gtk_widget_show (dialog_vbox5);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_vbox5), 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_box_pack_start (GTK_BOX (dialog_vbox5), preferences_notebook, TRUE, TRUE, 0);
+
+  preferences_file_table = gtk_table_new (1, 3, 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);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_file_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_file_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_file_table), 5);
+
+  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_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_file_path_label), 0, 0.5);
+
+  preferences_file_path_combo = gtk_combo_new ();
+  gtk_widget_ref (preferences_file_path_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_path_combo", preferences_file_path_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_path_combo);
+  gtk_table_attach (GTK_TABLE (preferences_file_table), preferences_file_path_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_file_path_entry = GTK_COMBO (preferences_file_path_combo)->entry;
+  gtk_widget_ref (preferences_file_path_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_path_entry", preferences_file_path_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_path_entry);
+
+  preferences_file_path_button = gtk_button_new_with_label (_("Browse"));
+  gtk_widget_ref (preferences_file_path_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_path_button", preferences_file_path_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_file_path_button);
+  gtk_table_attach (GTK_TABLE (preferences_file_table), preferences_file_path_button, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  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, 3, 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);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_disc_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_disc_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_disc_table), 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_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_disc_vcd_label), 0, 0.5);
+
+  preference_disc_dvd_label = gtk_label_new (_("Default DVD path:"));
+  gtk_widget_ref (preference_disc_dvd_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preference_disc_dvd_label", preference_disc_dvd_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preference_disc_dvd_label);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preference_disc_dvd_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preference_disc_dvd_label), 0, 0.5);
+
+  preferences_disc_dvd_combo = gtk_combo_new ();
+  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_combo_items = g_list_append (preferences_disc_dvd_combo_items, (gpointer) _("/dev/dvd"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (preferences_disc_dvd_combo), preferences_disc_dvd_combo_items);
+  g_list_free (preferences_disc_dvd_combo_items);
+
+  preferences_disc_dvd_entry = GTK_COMBO (preferences_disc_dvd_combo)->entry;
+  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);
+  gtk_entry_set_text (GTK_ENTRY (preferences_disc_dvd_entry), _("/dev/dvd"));
+
+  preferences_disc_vcd_combo = gtk_combo_new ();
+  gtk_widget_ref (preferences_disc_vcd_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_vcd_combo", preferences_disc_vcd_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_vcd_combo);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_disc_vcd_combo, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_disc_vcd_combo_items = g_list_append (preferences_disc_vcd_combo_items, (gpointer) _("/dev/cdrom"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (preferences_disc_vcd_combo), preferences_disc_vcd_combo_items);
+  g_list_free (preferences_disc_vcd_combo_items);
+
+  preferences_disc_vcd_entry = GTK_COMBO (preferences_disc_vcd_combo)->entry;
+  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);
+  gtk_entry_set_text (GTK_ENTRY (preferences_disc_vcd_entry), _("/dev/cdrom"));
+
+  preferences_disc_dvd_browse_button = gtk_button_new_with_label (_("Browse"));
+  gtk_widget_ref (preferences_disc_dvd_browse_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_dvd_browse_button", preferences_disc_dvd_browse_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_dvd_browse_button);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_disc_dvd_browse_button, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_disc_vcd_browse_button = gtk_button_new_with_label (_("Browse"));
+  gtk_widget_ref (preferences_disc_vcd_browse_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_disc_vcd_browse_button", preferences_disc_vcd_browse_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_disc_vcd_browse_button);
+  gtk_table_attach (GTK_TABLE (preferences_disc_table), preferences_disc_vcd_browse_button, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  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);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_network_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_network_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_network_table), 5);
+
+  preferences_network_server_combo = gtk_combo_new ();
+  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 = GTK_COMBO (preferences_network_server_combo)->entry;
+  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 = gtk_combo_new ();
+  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 = GTK_COMBO (preferences_network_broadcast_combo)->entry;
+  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_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_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_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_broadcast_checkbutton = gtk_check_button_new_with_label (_("Broadcast mode"));
+  gtk_widget_ref (preferences_network_broadcast_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_network_broadcast_checkbutton", preferences_network_broadcast_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_network_broadcast_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_network_table), preferences_network_broadcast_checkbutton, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 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), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_network_protocol_label), 0, 0.5);
+
+  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_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 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_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 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_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  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_interface_table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_ref (preferences_interface_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_interface_table", preferences_interface_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_interface_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_interface_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_interface_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_interface_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_interface_table), 5);
+
+  preferences_interface_combo = gtk_combo_new ();
+  gtk_widget_ref (preferences_interface_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_interface_combo", preferences_interface_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_interface_combo);
+  gtk_table_attach (GTK_TABLE (preferences_interface_table), preferences_interface_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_interface_combo_items = g_list_append (preferences_interface_combo_items, (gpointer) _("Gtk+"));
+  preferences_interface_combo_items = g_list_append (preferences_interface_combo_items, (gpointer) _("Gnome"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (preferences_interface_combo), preferences_interface_combo_items);
+  g_list_free (preferences_interface_combo_items);
+
+  preferences_interface_entry = GTK_COMBO (preferences_interface_combo)->entry;
+  gtk_widget_ref (preferences_interface_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_interface_entry", preferences_interface_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_interface_entry);
+  gtk_entry_set_text (GTK_ENTRY (preferences_interface_entry), _("Gtk+"));
+
+  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_interface_table), preferences_interface_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_interface_label), 0, 0.5);
+
+  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);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_video_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_video_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_video_table), 5);
+
+  preferences_video_output_combo = gtk_combo_new ();
+  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_combo_items = g_list_append (preferences_video_output_combo_items, (gpointer) _("sdl"));
+  preferences_video_output_combo_items = g_list_append (preferences_video_output_combo_items, (gpointer) _("xvideo"));
+  preferences_video_output_combo_items = g_list_append (preferences_video_output_combo_items, (gpointer) _("x11"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (preferences_video_output_combo), preferences_video_output_combo_items);
+  g_list_free (preferences_video_output_combo_items);
+
+  preferences_video_output_entry = GTK_COMBO (preferences_video_output_combo)->entry;
+  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);
+  gtk_entry_set_text (GTK_ENTRY (preferences_video_output_entry), _("sdl"));
+
+  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_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_height_spinbutton_adj = gtk_adjustment_new (576, 0, 1200, 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_height_label = gtk_label_new (_("Default height:"));
+  gtk_widget_ref (preferences_video_height_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_height_label", preferences_video_height_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_height_label);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_height_label, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_height_label), 0, 0.5);
+
+  preferences_depth_optionmenu = gtk_option_menu_new ();
+  gtk_widget_ref (preferences_depth_optionmenu);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_depth_optionmenu", preferences_depth_optionmenu,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_depth_optionmenu);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_depth_optionmenu, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_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_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_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_depth_optionmenu_menu), glade_menuitem);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_depth_optionmenu), preferences_depth_optionmenu_menu);
+  gtk_option_menu_set_history (GTK_OPTION_MENU (preferences_depth_optionmenu), 1);
+
+  preferences_video_depth_label = gtk_label_new (_("Default depth:"));
+  gtk_widget_ref (preferences_video_depth_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_depth_label", preferences_video_depth_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_depth_label);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_depth_label, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_depth_label), 0, 0.5);
+
+  preferences_video_fullscreen_depth_label = gtk_label_new (_("Fullscreen depth:"));
+  gtk_widget_ref (preferences_video_fullscreen_depth_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_fullscreen_depth_label", preferences_video_fullscreen_depth_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_fullscreen_depth_label);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_fullscreen_depth_label, 0, 1, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_video_fullscreen_depth_label), 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), 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_gamma_spinbutton_adj = gtk_adjustment_new (0, 0, 10, 0.1, 1, 1);
+  preferences_video_gamma_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_video_gamma_spinbutton_adj), 1, 1);
+  gtk_widget_ref (preferences_video_gamma_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_video_gamma_spinbutton", preferences_video_gamma_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_video_gamma_spinbutton);
+  gtk_table_attach (GTK_TABLE (preferences_video_table), preferences_video_gamma_spinbutton, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (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);
+
+  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 = 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);
+
+  preferences_audio_table = gtk_table_new (6, 2, FALSE);
+  gtk_widget_ref (preferences_audio_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_table", preferences_audio_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_audio_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_audio_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_audio_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_audio_table), 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 (preferences_audio_table), preferences_audio_quality_optionmenu, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  preferences_audio_quality_optionmenu_menu = gtk_menu_new ();
+  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);
+  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);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_audio_quality_optionmenu), preferences_audio_quality_optionmenu_menu);
+  gtk_option_menu_set_history (GTK_OPTION_MENU (preferences_audio_quality_optionmenu), 1);
+
+  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 (preferences_audio_table), preferences_audio_frequency_optionmenu, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 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);
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (preferences_audio_frequency_optionmenu), preferences_audio_frequency_optionmenu_menu);
+
+  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 (preferences_audio_table), preferences_audio_channels_optionmenu, 1, 2, 4, 5,
+                    (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_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 (preferences_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_device_label = gtk_label_new (_("Default device:"));
+  gtk_widget_ref (preferences_audio_device_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_device_label", preferences_audio_device_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_device_label);
+  gtk_table_attach (GTK_TABLE (preferences_audio_table), preferences_audio_device_label, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_device_label), 0, 0.5);
+
+  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 (preferences_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_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 (preferences_audio_table), preferences_audio_frequency_label, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_frequency_label), 0, 0.5);
+
+  preferences_audio_channel_label = gtk_label_new (_("Channels:"));
+  gtk_widget_ref (preferences_audio_channel_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_channel_label", preferences_audio_channel_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_channel_label);
+  gtk_table_attach (GTK_TABLE (preferences_audio_table), preferences_audio_channel_label, 0, 1, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_audio_channel_label), 0, 0.5);
+
+  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 (preferences_audio_table), preferences_audio_spdif_checkbutton, 0, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_audio_output_combo = gtk_combo_new ();
+  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 (preferences_audio_table), preferences_audio_output_combo, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_audio_output_combo_items = g_list_append (preferences_audio_output_combo_items, (gpointer) _("dsp"));
+  preferences_audio_output_combo_items = g_list_append (preferences_audio_output_combo_items, (gpointer) _("alsa"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (preferences_audio_output_combo), preferences_audio_output_combo_items);
+  g_list_free (preferences_audio_output_combo_items);
+
+  preferences_audio_output_entry = GTK_COMBO (preferences_audio_output_combo)->entry;
+  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);
+  gtk_entry_set_text (GTK_ENTRY (preferences_audio_output_entry), _("dsp"));
+
+  preferences_audio_device_combo = gtk_combo_new ();
+  gtk_widget_ref (preferences_audio_device_combo);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_device_combo", preferences_audio_device_combo,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_device_combo);
+  gtk_table_attach (GTK_TABLE (preferences_audio_table), preferences_audio_device_combo, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+  preferences_audio_device_combo_items = g_list_append (preferences_audio_device_combo_items, (gpointer) _("/dev/dsp"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (preferences_audio_device_combo), preferences_audio_device_combo_items);
+  g_list_free (preferences_audio_device_combo_items);
+
+  preferences_audio_device_entry = GTK_COMBO (preferences_audio_device_combo)->entry;
+  gtk_widget_ref (preferences_audio_device_entry);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_audio_device_entry", preferences_audio_device_entry,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_audio_device_entry);
+  gtk_entry_set_text (GTK_ENTRY (preferences_audio_device_entry), _("/dev/dsp"));
+
+  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);
+
+  preferences_playlist_table = gtk_table_new (3, 1, FALSE);
+  gtk_widget_ref (preferences_playlist_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_table", preferences_playlist_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_playlist_table);
+  gtk_container_add (GTK_CONTAINER (preferences_notebook), preferences_playlist_table);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_playlist_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_playlist_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_playlist_table), 5);
+
+  preferences_playlist_startup_checkbutton = gtk_check_button_new_with_label (_("Launch on startup"));
+  gtk_widget_ref (preferences_playlist_startup_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_startup_checkbutton", preferences_playlist_startup_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_playlist_startup_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_playlist_table), preferences_playlist_startup_checkbutton, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_EXPAND), 0, 0);
+
+  preferences_playlist_enqueue_checkbutton = gtk_check_button_new_with_label (_("Enqueue as default"));
+  gtk_widget_ref (preferences_playlist_enqueue_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_enqueue_checkbutton", preferences_playlist_enqueue_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_playlist_enqueue_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_playlist_table), preferences_playlist_enqueue_checkbutton, 0, 1, 1, 2,
+                    (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 (preferences_playlist_table), preferences_playlist_loop_checkbutton, 0, 1, 2, 3,
+                    (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, 2, 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);
+  gtk_container_set_border_width (GTK_CONTAINER (preferences_misc_table), 5);
+  gtk_table_set_row_spacings (GTK_TABLE (preferences_misc_table), 5);
+  gtk_table_set_col_spacings (GTK_TABLE (preferences_misc_table), 5);
+
+  preferences_misc_associated_frame = gtk_frame_new (_("Types associated with vlc"));
+  gtk_widget_ref (preferences_misc_associated_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_associated_frame", preferences_misc_associated_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_associated_frame);
+  gtk_table_attach (GTK_TABLE (preferences_misc_table), preferences_misc_associated_frame, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  preferences_misc_associated_table = gtk_table_new (4, 1, FALSE);
+  gtk_widget_ref (preferences_misc_associated_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_associated_table", preferences_misc_associated_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_associated_table);
+  gtk_container_add (GTK_CONTAINER (preferences_misc_associated_frame), preferences_misc_associated_table);
+
+  preferences_misc_associated_checkbutton = gtk_check_button_new_with_label (_("mpeg"));
+  gtk_widget_ref (preferences_misc_associated_checkbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_associated_checkbutton", preferences_misc_associated_checkbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_associated_checkbutton);
+  gtk_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_associated_checkbutton, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 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_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_mp2_checkbutton, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 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_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_vob_checkbutton, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 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_table_attach (GTK_TABLE (preferences_misc_associated_table), preferences_misc_ts_checkbutton, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  preferences_misc_message_frame = gtk_frame_new (_("Messages"));
+  gtk_widget_ref (preferences_misc_message_frame);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_message_frame", preferences_misc_message_frame,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_message_frame);
+  gtk_table_attach (GTK_TABLE (preferences_misc_table), preferences_misc_message_frame, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  preferences_misc_messages_table = gtk_table_new (1, 2, FALSE);
+  gtk_widget_ref (preferences_misc_messages_table);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_table", preferences_misc_messages_table,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_messages_table);
+  gtk_container_add (GTK_CONTAINER (preferences_misc_message_frame), preferences_misc_messages_table);
+
+  preferences_misc_messages_label = gtk_label_new (_("Warning level: "));
+  gtk_widget_ref (preferences_misc_messages_label);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_label", preferences_misc_messages_label,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_messages_label);
+  gtk_table_attach (GTK_TABLE (preferences_misc_messages_table), preferences_misc_messages_label, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (preferences_misc_messages_label), 0, 0.5);
+
+  preferences_misc_messages_spinbutton_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
+  preferences_misc_messages_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (preferences_misc_messages_spinbutton_adj), 1, 0);
+  gtk_widget_ref (preferences_misc_messages_spinbutton);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_misc_messages_spinbutton", preferences_misc_messages_spinbutton,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_misc_messages_spinbutton);
+  gtk_table_attach (GTK_TABLE (preferences_misc_messages_table), preferences_misc_messages_spinbutton, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND),
+                    (GtkAttachOptions) (0), 0, 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);
+
+  dialog_action_area4 = GTK_DIALOG (intf_preferences)->action_area;
+  gtk_object_set_data (GTK_OBJECT (intf_preferences), "dialog_action_area4", dialog_action_area4);
+  gtk_widget_show (dialog_action_area4);
+  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area4), 10);
+
+  preferences_ok_button = gtk_button_new_with_label (_("Ok"));
+  gtk_widget_ref (preferences_ok_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_ok_button", preferences_ok_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_ok_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area4), preferences_ok_button, TRUE, TRUE, 0);
+
+  preferences_apply_button = gtk_button_new_with_label (_("Apply"));
+  gtk_widget_ref (preferences_apply_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_apply_button", preferences_apply_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_apply_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area4), preferences_apply_button, TRUE, TRUE, 0);
+
+  preferences_cancel_button = gtk_button_new_with_label (_("Cancel"));
+  gtk_widget_ref (preferences_cancel_button);
+  gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_cancel_button", preferences_cancel_button,
+                            (GtkDestroyNotify) gtk_widget_unref);
+  gtk_widget_show (preferences_cancel_button);
+  gtk_box_pack_start (GTK_BOX (dialog_action_area4), preferences_cancel_button, TRUE, TRUE, 0);
+
+  gtk_signal_connect (GTK_OBJECT (preferences_ok_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkPreferencesOk),
+                      "intf_preferences");
+  gtk_signal_connect (GTK_OBJECT (preferences_apply_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkPreferencesApply),
+                      "intf_preferences");
+  gtk_signal_connect (GTK_OBJECT (preferences_cancel_button), "clicked",
+                      GTK_SIGNAL_FUNC (GtkPreferencesCancel),
+                      "intf_preferences");
+
+  return intf_preferences;
+}
+
index 1a13837c8e956d67ace799d08476bb6d457002ba..74455508b1be93f584d2abc806905d8b16baa5a8 100644 (file)
@@ -7,5 +7,7 @@ GtkWidget* create_intf_popup (void);
 GtkWidget* create_intf_about (void);
 GtkWidget* create_intf_fileopen (void);
 GtkWidget* create_intf_disc (void);
-GtkWidget* create_intf_playlist (void);
 GtkWidget* create_intf_network (void);
+GtkWidget* create_intf_jump (void);
+GtkWidget* create_intf_playlist (void);
+GtkWidget* create_intf_preferences (void);
diff --git a/plugins/gtk/gtk_menu.c b/plugins/gtk/gtk_menu.c
new file mode 100644 (file)
index 0000000..1b57c85
--- /dev/null
@@ -0,0 +1,886 @@
+/*****************************************************************************
+ * gtk_menu.c : functions to handle menu items.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: gtk_menu.c,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *      
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#define MODULE_NAME gtk
+#include "modules_inner.h"
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "defs.h"
+#include <sys/types.h>                                              /* off_t */
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+
+#include <string.h>
+
+#include "config.h"
+#include "common.h"
+#include "threads.h"
+#include "mtime.h"
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+#include "intf_msg.h"
+
+#include "video.h"
+#include "video_output.h"
+#include "audio_output.h"
+
+#include "gtk_callbacks.h"
+#include "gtk_interface.h"
+#include "gtk_support.h"
+#include "gtk_playlist.h"
+#include "intf_gtk.h"
+
+#include "main.h"
+
+/****************************************************************************
+ * Gtk*Toggle: callbacks to toggle the value of a checkmenuitem
+ ****************************************************************************
+ * We need separate functions for menubar and popup here since we can't use
+ * user_data to transmit intf_*
+ ****************************************************************************/
+
+#define GtkLangToggle( b_update )                                   \
+    es_descriptor_t *       p_es;                                   \
+                                                                    \
+    if( !b_update )                                                 \
+    {                                                               \
+        p_es = (es_descriptor_t*)user_data;                         \
+                                                                    \
+        input_ToggleES( p_intf->p_input, p_es, menuitem->active );  \
+                                                                    \
+        b_update = menuitem->active;                                \
+    }                                                               \
+
+/*
+ * Audio
+ */ 
+
+void GtkMenubarAudioToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+
+    GtkLangToggle( p_intf->p_sys->b_audio_update );
+}
+
+void GtkPopupAudioToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+    GtkLangToggle( p_intf->p_sys->b_audio_update );
+}
+
+/* 
+ * Subtitles
+ */ 
+
+
+void GtkMenubarSubtitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+
+    GtkLangToggle( p_intf->p_sys->b_spu_update );
+}
+void GtkPopupSubtitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+    GtkLangToggle( p_intf->p_sys->b_spu_update );
+}
+
+/*
+ * Navigation
+ */
+void GtkPopupNavigationToggle( GtkCheckMenuItem * menuitem,
+                               gpointer user_data )
+{
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
+
+    if( menuitem->active &&
+        !p_intf->p_sys->b_title_update &&
+        !p_intf->p_sys->b_chapter_update )
+    {
+        input_area_t   *p_area = p_intf->p_input->stream.p_selected_area;
+
+        gint i_title   = DATA2TITLE( user_data );
+        gint i_chapter = DATA2CHAPTER( user_data );
+
+        if( p_area != p_intf->p_input->stream.pp_areas[i_title] )
+        {
+            p_area = p_intf->p_input->stream.pp_areas[i_title];
+            p_intf->p_sys->b_title_update = 1;
+        }
+
+        p_area->i_part = i_chapter;
+        p_intf->p_sys->b_chapter_update = 1;
+
+        p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
+
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
+    }
+}
+
+/*
+ * Title
+ */
+
+#define GtkTitleToggle( intf )                                              \
+    intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), (intf) );       \
+                                                                            \
+    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,                      \
+            p_intf->p_input->stream.pp_areas[i_title] );                    \
+                                                                            \
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );              \
+                                                                            \
+        p_intf->p_sys->b_title_update = 1;                                  \
+    }
+
+void GtkMenubarTitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    GtkTitleToggle( "intf_window" );
+}
+
+void GtkPopupTitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    GtkTitleToggle( "intf_popup" );
+}
+
+/*
+ * Chapter
+ */
+
+#define GtkChapterToggle( intf )                                            \
+    intf_thread_t * p_intf;                                                 \
+    input_area_t *  p_area;                                                 \
+    gint            i_chapter;                                              \
+    char            psz_chapter[5];                                         \
+                                                                            \
+    p_intf    = GetIntf( GTK_WIDGET(menuitem), (intf) );                    \
+    p_area    = p_intf->p_input->stream.p_selected_area;                    \
+    i_chapter = (gint)user_data;                                            \
+                                                                            \
+    if( menuitem->active && !p_intf->p_sys->b_chapter_update )              \
+    {                                                                       \
+        p_area->i_part = i_chapter;                                         \
+        p_intf->p_input->pf_set_area( p_intf->p_input,                      \
+                                      (input_area_t*)p_area );              \
+                                                                            \
+        snprintf( psz_chapter, 3, "%02d", p_area->i_part );                 \
+        gtk_label_set_text( p_intf->p_sys->p_label_chapter, psz_chapter );  \
+                                                                            \
+        input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );              \
+                                                                            \
+        p_intf->p_sys->b_chapter_update = 1;                                \
+    }
+
+
+void GtkMenubarChapterToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    GtkChapterToggle( "intf_window" );
+}
+
+void GtkPopupChapterToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    GtkChapterToggle( "intf_popup" );
+}
+
+/*
+ * Angle
+ */
+
+#define GtkAngleToggle( intf )                                              \
+    intf_thread_t * p_intf;                                                 \
+    input_area_t *  p_area;                                                 \
+    gint            i_angle;                                                \
+                                                                            \
+    p_intf    = GetIntf( GTK_WIDGET(menuitem), (intf) );                    \
+    p_area    = p_intf->p_input->stream.p_selected_area;                    \
+    i_angle   = (gint)user_data;                                            \
+                                                                            \
+    if( menuitem->active && !p_intf->p_sys->b_angle_update )                \
+    {                                                                       \
+        p_area->i_angle = i_angle;                                          \
+        p_intf->p_input->pf_set_area( p_intf->p_input,                      \
+                                     (input_area_t*)p_area );               \
+                                                                            \
+        p_intf->p_sys->b_angle_update = 1;                                  \
+    }
+
+void GtkMenubarAngleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    GtkAngleToggle( "intf_window" )
+}
+
+void GtkPopupAngleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
+{
+    GtkAngleToggle( "intf_popup" )
+}
+
+/****************************************************************************
+ * Functions to generate menus
+ ****************************************************************************/
+
+/*****************************************************************************
+ * GtkRadioMenu: 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 GtkRadioMenu( 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[ GTK_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, GTK_MENU_LABEL_SIZE,
+                      "%ss %d to %d", psz_item_name, i_item + 1, i_item + 10);
+            psz_name[ GTK_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, GTK_MENU_LABEL_SIZE, "%s %d",
+                  psz_item_name, i_item + 1 );
+        psz_name[ GTK_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 > 1 )
+    {
+        gtk_widget_set_sensitive( p_root, TRUE );
+    }
+
+    return TRUE;
+}
+
+/*****************************************************************************
+ * GtkLanguageMenus: update interactive menus of the interface
+ *****************************************************************************
+ * Sets up menus with information from input:
+ *  -languages
+ *  -sub-pictures
+ * Warning: since this function is designed to be called by management
+ * function, the interface lock has to be taken
+ *****************************************************************************/
+static gint GtkLanguageMenus( gpointer          p_data,
+                                GtkWidget *       p_root,
+                                es_descriptor_t * p_es,
+                                gint              i_cat,
+                          void(*pf_toggle )( GtkCheckMenuItem *, gpointer ) )
+{
+    intf_thread_t *     p_intf;
+    GtkWidget *         p_menu;
+    GtkWidget *         p_separator;
+    GtkWidget *         p_item;
+    GtkWidget *         p_item_active;
+    GSList *            p_group;
+    char                psz_name[ GTK_MENU_LABEL_SIZE ];
+    gint                i_item;
+    gint                i;
+
+    
+
+    /* 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 );
+
+    p_group = NULL;
+
+    /* menu container */
+    p_menu = gtk_menu_new();
+
+    /* special case for "off" item */
+    snprintf( psz_name, GTK_MENU_LABEL_SIZE, "None" );
+    psz_name[ GTK_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 ) );
+
+    gtk_widget_show( p_item );
+
+    /* signal hanling for off */
+    gtk_signal_connect( GTK_OBJECT( p_item ), "toggled",
+                        GTK_SIGNAL_FUNC ( pf_toggle ), NULL );
+
+    gtk_menu_append( GTK_MENU( p_menu ), p_item );
+
+    p_separator = gtk_menu_item_new();
+    gtk_widget_set_sensitive( p_separator, FALSE );
+    gtk_widget_show( p_separator );
+    gtk_menu_append( GTK_MENU( p_menu ), p_separator );
+
+    vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
+    p_item_active = NULL;
+    i_item = 0;
+
+    /* create a set of language buttons and append them to the container */
+    for( i = 0 ; i < p_intf->p_input->stream.i_es_number ; i++ )
+    {
+        if( p_intf->p_input->stream.pp_es[i]->i_cat == i_cat )
+        {
+            i_item++;
+            strcpy( psz_name, p_intf->p_input->stream.pp_es[i]->psz_desc );
+            if( psz_name[0] == '\0' )
+            {
+                snprintf( psz_name, GTK_MENU_LABEL_SIZE,
+                          "Language %d", i_item );
+                psz_name[ GTK_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( p_es == p_intf->p_input->stream.pp_es[i] )
+            {
+                /* don't lose p_item when we append into menu */
+                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)( p_intf->p_input->stream.pp_es[i] ) );
+
+            gtk_menu_append( GTK_MENU( p_menu ), p_item );
+        }
+    }
+
+    vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
+
+    /* link the new menu to the menubar item */
+    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_root ), p_menu );
+
+    /* acitvation will call signals so we can only do it
+     * when submenu is attached to menu - to get intf_window */
+    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( i_item > 0 )
+    {
+        gtk_widget_set_sensitive( p_root, TRUE );
+    }
+
+    return TRUE;
+}
+#if 1
+/*****************************************************************************
+ * GtkTitleMenu: sets menus for titles and chapters selection
+ *****************************************************************************
+ * Generates two types of menus:
+ *  -simple list of titles
+ *  -cascaded lists of chapters for each title
+ *****************************************************************************/
+static gint GtkTitleMenu( gpointer       p_data,
+                            GtkWidget *    p_navigation, 
+                            void(*pf_toggle )( GtkCheckMenuItem *, gpointer ) )
+{
+    intf_thread_t *     p_intf;
+    char                psz_name[ GTK_MENU_LABEL_SIZE ];
+    GtkWidget *         p_title_menu;
+    GtkWidget *         p_title_submenu;
+    GtkWidget *         p_title_item;
+    GtkWidget *         p_item_active;
+    GtkWidget *         p_chapter_menu;
+    GtkWidget *         p_chapter_submenu;
+    GtkWidget *         p_title_menu_item;
+    GtkWidget *         p_chapter_menu_item;
+    GtkWidget *         p_item;
+    GSList *            p_title_group;
+    GSList *            p_chapter_group;
+    gint                i_title;
+    gint                i_chapter;
+    gint                i_title_nb;
+    gint                i_chapter_nb;
+
+    /* 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 );
+
+    p_title_menu = gtk_menu_new();
+    p_title_group = NULL;
+    p_title_submenu = NULL;
+    p_title_menu_item = NULL;
+    p_chapter_group = NULL;
+    p_chapter_submenu = NULL;
+    p_chapter_menu_item = NULL;
+    p_item_active = NULL;
+    i_title_nb = p_intf->p_input->stream.i_area_nb;
+
+    /* loop on titles */
+    for( i_title = 1 ; i_title < i_title_nb ; i_title++ )
+    {
+        /* we group titles in packets of ten for small screens */
+        if( ( i_title % 10 == 1 ) && ( i_title_nb > 20 ) )
+        {
+            if( i_title != 1 )
+            {
+                gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_menu_item ),
+                                           p_title_submenu );
+                gtk_menu_append( GTK_MENU( p_title_menu ), p_title_menu_item );
+            }
+
+            snprintf( psz_name, GTK_MENU_LABEL_SIZE,
+                      "%d - %d", i_title, i_title + 9 );
+            psz_name[ GTK_MENU_LABEL_SIZE - 1 ] = '\0';
+            p_title_menu_item = gtk_menu_item_new_with_label( psz_name );
+            gtk_widget_show( p_title_menu_item );
+            p_title_submenu = gtk_menu_new();
+        }
+
+        snprintf( psz_name, GTK_MENU_LABEL_SIZE, "Title %d (%d)", i_title,
+                  p_intf->p_input->stream.pp_areas[i_title]->i_part_nb );
+        psz_name[ GTK_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,
+                                                           psz_name );
+            p_title_group =
+              gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_title_item ) );
+
+            if( p_intf->p_input->stream.pp_areas[i_title] ==
+                         p_intf->p_input->stream.p_selected_area )
+            {
+                p_item_active = p_title_item;
+            }
+
+            /* setup signal hanling */
+            gtk_signal_connect( GTK_OBJECT( p_title_item ),
+                     "toggled",
+                     GTK_SIGNAL_FUNC( pf_toggle ),
+                     (gpointer)(p_intf->p_input->stream.pp_areas[i_title]) );
+
+            if( p_intf->p_input->stream.i_area_nb > 1 )
+            {
+                /* be sure that menu is sensitive */
+                gtk_widget_set_sensitive( p_navigation, TRUE );
+            }
+        }
+        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;
+    
+            for( i_chapter = 0 ; i_chapter < i_chapter_nb ; i_chapter++ )
+            {
+                /* we group chapters in packets of ten for small screens */
+                if( ( i_chapter % 10 == 0 ) && ( i_chapter_nb > 20 ) )
+                {
+                    if( i_chapter != 0 )
+                    {
+                        gtk_menu_item_set_submenu(
+                                    GTK_MENU_ITEM( p_chapter_menu_item ),
+                                    p_chapter_submenu );
+                        gtk_menu_append( GTK_MENU( p_chapter_menu ),
+                                         p_chapter_menu_item );
+                    }
+
+                    snprintf( psz_name, GTK_MENU_LABEL_SIZE,
+                              "%d - %d", i_chapter + 1, i_chapter + 10 );
+                    psz_name[ GTK_MENU_LABEL_SIZE - 1 ] = '\0';
+                    p_chapter_menu_item =
+                            gtk_menu_item_new_with_label( psz_name );
+                    gtk_widget_show( p_chapter_menu_item );
+                    p_chapter_submenu = gtk_menu_new();
+                }
+
+                snprintf( psz_name, GTK_MENU_LABEL_SIZE,
+                          "Chapter %d", i_chapter + 1 );
+                psz_name[ GTK_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 ) );
+                gtk_widget_show( p_item );
+
+#define p_area p_intf->p_input->stream.pp_areas[i_title]
+                if( ( p_area == p_intf->p_input->stream.p_selected_area ) &&
+                    ( p_area->i_part == i_chapter + 1 ) )
+                {
+                    p_item_active = p_item;
+                }
+#undef p_area
+
+                /* setup signal hanling */
+                gtk_signal_connect( GTK_OBJECT( p_item ),
+                           "toggled",
+                           GTK_SIGNAL_FUNC( pf_toggle ),
+                           (gpointer)POS2DATA( i_title, i_chapter + 1) );
+
+                if( i_chapter_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_chapter_nb > 20 )
+            {
+                gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_chapter_menu_item ),
+                                           p_chapter_submenu );
+                gtk_menu_append( GTK_MENU( p_chapter_menu ),
+                                 p_chapter_menu_item );
+            }
+
+            /* link the new menu to the title menu item */
+            gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_item ),
+                                       p_chapter_menu );
+
+            if( p_intf->p_input->stream.pp_areas[i_title]->i_part_nb > 1 )
+            {
+                /* be sure that menu is sensitive */
+                gtk_widget_set_sensitive( p_navigation, TRUE );
+            }
+#else
+        GtkRadioMenu( 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 );
+
+        if( i_title_nb > 20 )
+        {
+            gtk_menu_append( GTK_MENU( p_title_submenu ), p_title_item );
+        }
+        else
+        {
+            gtk_menu_append( GTK_MENU( p_title_menu ), p_title_item );
+        }
+    }
+
+    if( i_title_nb > 20 )
+    {
+        gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_menu_item ),
+                                   p_title_submenu );
+        gtk_menu_append( GTK_MENU( p_title_menu ), p_title_menu_item );
+    }
+
+    /* be sure that menu is sensitive */
+    gtk_widget_set_sensitive( p_title_menu, TRUE );
+
+    /* link the new menu to the menubar item */
+    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_navigation ), p_title_menu );
+
+    if( p_item_active != NULL )
+    {
+        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
+/*****************************************************************************
+ * GtkSetupMenu: function that generates title/chapter/audio/subpic
+ * menus with help from preceding functions
+ *****************************************************************************/
+gint GtkSetupMenu( intf_thread_t * p_intf )
+{
+    es_descriptor_t *   p_audio_es;
+    es_descriptor_t *   p_spu_es;
+    GtkWidget *         p_menubar_menu;
+    GtkWidget *         p_popup_menu;
+    gint                i;
+
+    p_intf->p_sys->b_chapter_update |= p_intf->p_sys->b_title_update;
+    p_intf->p_sys->b_angle_update |= p_intf->p_sys->b_title_update;
+    p_intf->p_sys->b_audio_update |= p_intf->p_sys->b_title_update;
+    p_intf->p_sys->b_spu_update |= p_intf->p_sys->b_title_update;
+
+    if( p_intf->p_sys->b_title_update )
+    { 
+        char            psz_title[5];
+
+        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                            p_intf->p_sys->p_window ), "menubar_title" ) );
+        GtkRadioMenu( 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,
+                        GtkMenubarTitleToggle );
+
+        snprintf( psz_title, 4, "%d",
+                  p_intf->p_input->stream.p_selected_area->i_id );
+        psz_title[ 4 ] = '\0';
+        gtk_label_set_text( p_intf->p_sys->p_label_title, psz_title );
+
+        p_intf->p_sys->b_title_update = 0;
+    }
+
+    if( p_intf->p_sys->b_chapter_update )
+    {
+        char            psz_chapter[5];
+
+        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                             p_intf->p_sys->p_popup ), "popup_navigation" ) );
+        GtkTitleMenu( p_intf, p_popup_menu, GtkPopupNavigationToggle );
+#if 0
+        GtkRadioMenu( 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" ) );
+        GtkRadioMenu( 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,
+                        GtkMenubarChapterToggle );
+
+
+        snprintf( psz_chapter, 4, "%d", 
+                  p_intf->p_input->stream.p_selected_area->i_part );
+        psz_chapter[ 4 ] = '\0';
+        gtk_label_set_text( p_intf->p_sys->p_label_chapter, psz_chapter );
+
+        p_intf->p_sys->i_part =
+                p_intf->p_input->stream.p_selected_area->i_part;
+
+        p_intf->p_sys->b_chapter_update = 0;
+    }
+
+    if( p_intf->p_sys->b_angle_update )
+    {
+        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                             p_intf->p_sys->p_window ), "menubar_angle" ) );
+        GtkRadioMenu( 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,
+                        GtkMenubarAngleToggle );
+
+        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                             p_intf->p_sys->p_popup ), "popup_angle" ) );
+        GtkRadioMenu( 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,
+                        GtkPopupAngleToggle );
+
+        p_intf->p_sys->b_angle_update = 0;
+    }
+    
+    /* look for selected ES */
+    p_audio_es = NULL;
+    p_spu_es = NULL;
+
+    for( i = 0 ; i < p_intf->p_input->stream.i_selected_es_number ; i++ )
+    {
+        if( p_intf->p_input->stream.pp_selected_es[i]->i_cat == AUDIO_ES )
+        {
+            p_audio_es = p_intf->p_input->stream.pp_selected_es[i];
+        }
+
+        if( p_intf->p_input->stream.pp_selected_es[i]->i_cat == SPU_ES )
+        {
+            p_spu_es = p_intf->p_input->stream.pp_selected_es[i];
+        }
+    }
+
+    /* audio menus */
+    if( p_intf->p_sys->b_audio_update )
+    {
+        /* find audio root menu */
+        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
+                             p_intf->p_sys->p_window ), "menubar_audio" ) );
+    
+        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                     p_intf->p_sys->p_popup ), "popup_audio" ) );
+    
+        GtkLanguageMenus( p_intf, p_menubar_menu, p_audio_es, AUDIO_ES,
+                            GtkMenubarAudioToggle );
+        GtkLanguageMenus( p_intf, p_popup_menu, p_audio_es, AUDIO_ES,
+                            GtkPopupAudioToggle );
+
+        p_intf->p_sys->b_audio_update = 0;
+    }
+    
+    /* sub picture menus */
+    if( p_intf->p_sys->b_spu_update )
+    {
+        /* find spu root menu */
+        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
+                          p_intf->p_sys->p_window ), "menubar_subpictures" ) );
+    
+        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
+                     p_intf->p_sys->p_popup ), "popup_subpictures" ) );
+    
+        GtkLanguageMenus( p_intf, p_menubar_menu, p_spu_es, SPU_ES,
+                            GtkMenubarSubtitleToggle  );
+        GtkLanguageMenus( p_intf, p_popup_menu, p_spu_es, SPU_ES,
+                            GtkPopupSubtitleToggle );
+
+        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;
+}
+
diff --git a/plugins/gtk/gtk_menu.h b/plugins/gtk/gtk_menu.h
new file mode 100644 (file)
index 0000000..f5b052c
--- /dev/null
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * gtk_menu.h: prototypes for menu functions
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: gtk_menu.h,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#if 0
+void GtkMenubarAudioToggle      ( GtkCheckMenuItem *, gpointer );
+void GtkPopupAudioToggle        ( GtkCheckMenuItem *, gpointer );
+void GtkMenubarSubtitleToggle   ( GtkCheckMenuItem *, gpointer );
+void GtkPopupSubtitleToggle     ( GtkCheckMenuItem *, gpointer );
+void GtkMenubarTitleToggle      ( GtkCheckMenuItem *, gpointer );
+void GtkPopupTitleToggle        ( GtkCheckMenuItem *, gpointer );
+void GtkMenubarChapterToggle    ( GtkCheckMenuItem *, gpointer );
+void GtkPopupChapterToggle      ( GtkCheckMenuItem *, gpointer );
+void GtkMenubarAngleToggle      ( GtkCheckMenuItem *, gpointer );
+void GtkPopupAngleToggle        ( GtkCheckMenuItem *, gpointer );
+#endif
+
+
diff --git a/plugins/gtk/gtk_modules.c b/plugins/gtk/gtk_modules.c
new file mode 100644 (file)
index 0000000..235ca83
--- /dev/null
@@ -0,0 +1,83 @@
+/*****************************************************************************
+ * gtk_modules.c : functions to build modules configuration boxes.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: gtk_modules.c,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *      
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#define MODULE_NAME gtk
+#include "modules_inner.h"
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "defs.h"
+#include <sys/types.h>                                              /* off_t */
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+
+#include <string.h>
+
+#include "config.h"
+#include "common.h"
+#include "threads.h"
+#include "mtime.h"
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+#include "intf_msg.h"
+
+#include "gtk_callbacks.h"
+#include "gtk_interface.h"
+#include "gtk_support.h"
+#include "gtk_playlist.h"
+#include "intf_gtk.h"
+
+#include "main.h"
+
+gboolean GtkModulesShow( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_modules ) )
+    {
+//        p_intf->p_sys->p_modules = create_intf_modules();
+        gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_modules ),
+                             "p_intf", p_intf );
+    }
+    gtk_widget_show( p_intf->p_sys->p_modules );
+    gdk_window_raise( p_intf->p_sys->p_modules->window );
+
+    return FALSE;
+}
+
+void GtkModulesCancel( GtkButton * button, gpointer user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_modules" );
+
+    gtk_widget_hide( p_intf->p_sys->p_modules );
+}
+
diff --git a/plugins/gtk/gtk_modules.h b/plugins/gtk/gtk_modules.h
new file mode 100644 (file)
index 0000000..c23a51e
--- /dev/null
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * gtk_modules.h: prototypes for modules functions
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: gtk_modules.h,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+gboolean GtkModulesShow( GtkWidget       *widget,
+                         GdkEventButton  *event,
+                         gpointer         user_data);
+void GtkModulesCancel  ( GtkButton * button, gpointer user_data );
+
diff --git a/plugins/gtk/gtk_open.c b/plugins/gtk/gtk_open.c
new file mode 100644 (file)
index 0000000..d46391f
--- /dev/null
@@ -0,0 +1,462 @@
+/*****************************************************************************
+ * gtk_open.c : functions to handle file/disc/network open widgets.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: gtk_open.c,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *      
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#define MODULE_NAME gtk
+#include "modules_inner.h"
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "defs.h"
+#include <sys/types.h>                                              /* off_t */
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+
+#include <string.h>
+
+#include "config.h"
+#include "common.h"
+#include "threads.h"
+#include "mtime.h"
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+#include "intf_msg.h"
+
+#include "gtk_callbacks.h"
+#include "gtk_interface.h"
+#include "gtk_support.h"
+#include "gtk_playlist.h"
+#include "intf_gtk.h"
+
+#include "main.h"
+
+/*****************************************************************************
+ * Fileopen callbacks
+ *****************************************************************************
+ * The following callbacks are related to the file requester.
+ *****************************************************************************/
+#if 0
+void GtkFileOpenShow( GtkMenuItem * menuitem, gpointer user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), (char*)user_data );
+
+    /* If we have never used the file selector, open it */
+    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 ),
+                             "p_intf", p_intf );
+
+        gtk_file_selection_set_filename( GTK_FILE_SELECTION(
+            p_intf->p_sys->p_fileopen ),
+            main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) );
+    }
+
+    gtk_widget_show( p_intf->p_sys->p_fileopen );
+    gdk_window_raise( p_intf->p_sys->p_fileopen->window );
+}
+#else
+
+gboolean
+GtkFileOpenShow                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    /* If we have never used the file selector, open it */
+    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 ),
+                             "p_intf", p_intf );
+
+        gtk_file_selection_set_filename( GTK_FILE_SELECTION(
+            p_intf->p_sys->p_fileopen ),
+            main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) );
+    }
+
+    gtk_widget_show( p_intf->p_sys->p_fileopen );
+    gdk_window_raise( p_intf->p_sys->p_fileopen->window );
+
+    return FALSE;
+}
+
+
+#endif
+void GtkFileOpenCancel( GtkButton * button, gpointer user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+void GtkFileOpenOk( GtkButton * button, gpointer user_data )
+{
+    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;
+
+    /* hide the file selector */
+    p_filesel = gtk_widget_get_toplevel( GTK_WIDGET(button) );
+    gtk_widget_hide( p_filesel );
+
+    /* add the new file to the interface playlist */
+    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 plugin display */
+    GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+
+    /* end current item, select added item  */
+    if( p_intf->p_input != NULL )
+    {
+        p_intf->p_input->b_eof = 1;
+    }
+
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
+}
+
+/*****************************************************************************
+ * Open disc callbacks
+ *****************************************************************************
+ * The following callbacks are related to the disc manager.
+ *****************************************************************************/
+#if 0
+void GtkDiscOpenShow( GtkMenuItem * menuitem, gpointer user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), (char*)user_data );
+
+    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 );
+}
+#else
+gboolean
+GtkDiscOpenShow                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    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 );
+
+    return FALSE;
+}
+
+#endif
+void GtkDiscOpenDvd( GtkToggleButton * togglebutton, gpointer user_data )
+{
+    if( togglebutton->active )
+    {
+        gtk_entry_set_text(
+          GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton), "disc_name" ) ),
+          main_GetPszVariable( INPUT_DVD_DEVICE_VAR, INPUT_DVD_DEVICE_DEFAULT )
+        );
+    }
+}
+
+void GtkDiscOpenVcd( GtkToggleButton *togglebutton, gpointer user_data )
+{
+    if( togglebutton->active )
+    {
+        gtk_entry_set_text(
+          GTK_ENTRY( lookup_widget( GTK_WIDGET(togglebutton), "disc_name" ) ),
+          main_GetPszVariable( INPUT_VCD_DEVICE_VAR, INPUT_VCD_DEVICE_DEFAULT )
+        );
+    }
+}
+
+void GtkDiscOpenOk( GtkButton * button, gpointer user_data )
+{
+    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" ) ) );
+
+    /* "dvd:foo" has size 5 + strlen(foo) */
+    psz_source = malloc( 3 /* "dvd" */ + 1 /* ":" */
+                           + strlen( psz_device ) + 1 /* "\0" */ );
+    if( psz_source == NULL )
+    {
+        return;
+    }
+
+    /* Check which method was activated */
+    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                          "disc_dvd" ) )->active )
+    {
+        psz_method = "dvd";
+    }
+    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                               "disc_vcd" ) )->active )
+    {
+        psz_method = "vcd";
+    }
+    else
+    {
+        intf_ErrMsg( "intf error: unknown disc type toggle button position" );
+        free( psz_source );
+        return;
+    }
+    
+    /* Select title and chapter */
+    main_PutIntVariable( INPUT_TITLE_VAR, gtk_spin_button_get_value_as_int(
+                              GTK_SPIN_BUTTON( lookup_widget(
+                                  GTK_WIDGET(button), "disc_title" ) ) ) );
+
+    main_PutIntVariable( INPUT_CHAPTER_VAR, gtk_spin_button_get_value_as_int(
+                              GTK_SPIN_BUTTON( lookup_widget(
+                                  GTK_WIDGET(button), "disc_chapter" ) ) ) );
+
+    /* Build source name and add it to playlist */
+    sprintf( psz_source, "%s:%s", psz_method, psz_device );
+    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 */
+    GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+
+    /* stop current item, select added item */
+    if( p_intf->p_input != NULL )
+    {
+        p_intf->p_input->b_eof = 1;
+    }
+
+//    vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
+
+//    vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+}
+
+void GtkDiscOpenCancel( GtkButton * button, gpointer user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+/*****************************************************************************
+ * Network stream callbacks
+ *****************************************************************************
+ * The following callbacks are related to the network stream manager.
+ *****************************************************************************/
+#if 0
+void GtkNetworkOpenShow( GtkMenuItem * menuitem, gpointer user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), (char*)user_data );
+
+    if( !GTK_IS_WIDGET( p_intf->p_sys->p_network ) )
+    {
+        p_intf->p_sys->p_disc = 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 );
+}
+#else
+
+gboolean
+GtkNetworkOpenShow                     (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    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 );
+
+    return FALSE;
+}
+
+
+
+#endif
+
+void GtkNetworkOpenOk( GtkButton *button, gpointer user_data )
+{
+    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" ) ) );
+
+    /* Check which protocol was activated */
+    if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                          "network_ts" ) )->active )
+    {
+        psz_protocol = "ts";
+    }
+    else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
+                                               "network_rtp" ) )->active )
+    {
+        psz_protocol = "rtp";
+    }
+    else
+    {
+        intf_ErrMsg( "intf error: unknown protocol toggle button position" );
+        return;
+    }
+
+    /* Get the port number and make sure it will not overflow 5 characters */
+    i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
+                 lookup_widget( GTK_WIDGET(button), "network_port" ) ) );
+    if( i_port > 65535 )
+    {
+        intf_ErrMsg( "intf error: invalid port %i", i_port );
+    }
+
+    /* 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 )
+    {
+        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 );
+    }
+    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 */
+    GtkRebuildCList( p_playlist_clist, p_main->p_playlist );
+
+    /* select added item */
+    if( p_intf->p_input != NULL )
+    {
+        p_intf->p_input->b_eof = 1;
+    }
+
+//    vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
+
+//    vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+}
+
+void GtkNetworkOpenCancel( GtkButton * button, gpointer user_data)
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+
+void GtkNetworkOpenBroadcast( 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 ) );
+}
+
+
+
diff --git a/plugins/gtk/gtk_open.h b/plugins/gtk/gtk_open.h
new file mode 100644 (file)
index 0000000..06f2da4
--- /dev/null
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * gtk_open.h: prototypes for open functions
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: gtk_open.h,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+gboolean
+GtkFileOpenShow                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data);
+
+void GtkFileOpenCancel( GtkButton * button, gpointer user_data);
+
+void GtkFileOpenOk( GtkButton * button, gpointer user_data );
+
+
+gboolean
+GtkDiscOpenShow                        (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data);
+void GtkDiscOpenDvd( GtkToggleButton * togglebutton, gpointer user_data );
+void GtkDiscOpenVcd( GtkToggleButton *togglebutton, gpointer user_data );
+void GtkDiscOpenOk( GtkButton * button, gpointer user_data );
+void GtkDiscOpenCancel( GtkButton * button, gpointer user_data);
+
+
+
+
+gboolean
+GtkNetworkOpenShow                     (GtkWidget       *widget,
+                                        GdkEventButton  *event,
+                                        gpointer         user_data);
+void GtkNetworkOpenOk( GtkButton *button, gpointer user_data );
+void GtkNetworkOpenCancel( GtkButton * button, gpointer user_data);
+void GtkNetworkOpenBroadcast( GtkToggleButton * togglebutton,
+                              gpointer user_data );
+
+
index c319192e58eb785a08d6d0238a43cc747b349cab..e3ade97404b83a9c7e678e20f557f8c6e0c67e3f 100644 (file)
@@ -2,9 +2,10 @@
  * gtk_playlist.c : Interface for the playlist dialog
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: gtk_playlist.c,v 1.11 2001/05/07 03:14:09 stef Exp $
+ * $Id: gtk_playlist.c,v 1.12 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Pierre Baillet <oct@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
  *      
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 
 #include "main.h"
 
-void
-on_menubar_playlist_activate           (GtkMenuItem     *menuitem,
-                                        gpointer         user_data)
+/****************************************************************************
+ * Playlist window management
+ ****************************************************************************/
+gboolean GtkPlaylistShow( GtkWidget       *widget,
+                          GdkEventButton  *event,
+                          gpointer         user_data )
 {
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
 
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
-    playlist_t * p_playlist ;
-    GtkCList * list;
-    
     if( !GTK_IS_WIDGET( p_intf->p_sys->p_playlist ) )
     {
-        /* this shoud never happen */
-        intf_ErrMsgImm("intf_playlist is not a widget !");
         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 );
     }
-    
-    vlc_mutex_lock( &p_main->p_playlist->change_lock );
-    if(p_main->p_playlist->i_size > 0 )
-    {
-        p_playlist = p_main->p_playlist;
-        list = GTK_CLIST(lookup_widget( p_intf->p_sys->p_playlist, "playlist_clist" )) ;
-        rebuildCList( 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 );
-}
-
 
-void
-on_toolbar_playlist_clicked            (GtkButton       *button,
-                                        gpointer         user_data)
-{
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
-
-    if( !GTK_IS_WIDGET( p_intf->p_sys->p_playlist ) )
+    if( GTK_WIDGET_VISIBLE( p_intf->p_sys->p_playlist ) )
     {
-        /* this should never happen */
-        intf_ErrMsgImm("intf_playlist is not a widget !");
-
-        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 );
-    }
-    if( GTK_WIDGET_VISIBLE(p_intf->p_sys->p_playlist) ) {
-        gtk_widget_hide( p_intf->p_sys->p_playlist);
+        gtk_widget_hide( p_intf->p_sys->p_playlist );
     } 
     else 
     {        
-        GtkCList * clist;
+        GtkCList * p_clist;
+
+        p_clist = GTK_CLIST( gtk_object_get_data(
+            GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+        GtkRebuildCList( p_clist , p_main->p_playlist );
         gtk_widget_show( p_intf->p_sys->p_playlist );
-        clist = GTK_CLIST(lookup_widget( p_intf->p_sys->p_playlist,"playlist_clist" ));
         gdk_window_raise( p_intf->p_sys->p_playlist->window );
-        rebuildCList( clist , p_main->p_playlist );
     }
+
+    return TRUE;
 }
 
-void
-on_playlist_ok_clicked                 (GtkButton       *button,
-                                        gpointer         user_data)
+
+void GtkPlaylistOk( GtkButton * button, gpointer user_data )
 {
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_playlist" );
-    gtk_widget_hide( p_intf->p_sys->p_playlist );
+     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
 }
 
-void  deleteGListItem(gpointer data, gpointer param)
+
+void GtkPlaylistCancel( GtkButton * button, gpointer user_data )
 {
-    int curRow = ( int )data;
-    intf_thread_t * p_intf = param;    
-    
-    intf_PlaylistDelete( p_main->p_playlist, curRow );
+     gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
 
-    /* are we deleting the current played stream */
-    if( p_intf->p_sys->i_playing == curRow )
+
+
+gboolean GtkPlaylistPrev( GtkWidget       *widget,
+                          GdkEventButton  *event,
+                          gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( p_intf->p_input != NULL )
     {
-        /* next ! */
+        /* FIXME: temporary hack */
+        intf_PlaylistPrev( p_main->p_playlist );
+        intf_PlaylistPrev( p_main->p_playlist );
         p_intf->p_input->b_eof = 1;
-        /* this has to set the slider to 0 */
-        
-        /* step minus one */
-        p_intf->p_sys->i_playing-- ;
-        p_main->p_playlist->i_index-- ;
     }
-}
-gint compareItems(gconstpointer a, gconstpointer b)
-{
-    return b - a;
+
+    return TRUE;
 }
 
-void 
-rebuildCList(GtkCList * clist, playlist_t * playlist_p)
+
+gboolean GtkPlaylistNext( GtkWidget       *widget,
+                          GdkEventButton  *event,
+                          gpointer         user_data)
 {
-    int dummy;
-    gchar * text[2];
-    GdkColor red;
-    red.red = 65535;
-    red.green = 0;
-    red.blue = 0;
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
 
-    
-    gtk_clist_freeze( clist );
-    gtk_clist_clear( clist );
-   
-    for( dummy=0; dummy < playlist_p->i_size; dummy++ )
+    if( p_intf->p_input != NULL )
     {
-#ifdef WIN32 /* WIN32 HACK */
-        text[0] = g_strdup( "" );
-#else
-        text[0] = g_strdup( rindex( (char *)(playlist_p->p_item[playlist_p->i_size -1 - dummy].psz_name ), '/' ) + 1 );
-#endif
-        text[1] = g_strdup( "no info");
-        
-        gtk_clist_insert( clist, 0, text );
-        
-        free(text[0]);
-        free(text[1]);
+        /* FIXME: temporary hack */
+        p_intf->p_input->b_eof = 1;
     }
-    gtk_clist_set_background (
-      clist, 
-      playlist_p->i_index, 
-      &red);
-    gtk_clist_thaw( clist );
+
+    return TRUE;
+}
+
+/****************************************************************************
+ * Menu callbacks for playlist functions
+ ****************************************************************************/
+void GtkNextActivate( GtkMenuItem * menuitem, gpointer user_data )
+{
+    GtkPlaylistNext( GTK_WIDGET( menuitem ), NULL, user_data );
+}
+
+
+void GtkPrevActivate( GtkMenuItem * menuitem, gpointer user_data )
+{
+    GtkPlaylistPrev( GTK_WIDGET( menuitem ), NULL, user_data );
+}
+
+
+/****************************************************************************
+ * Playlist core functions
+ ****************************************************************************/
+void GtkPlaylistAddUrl( GtkMenuItem * menuitem, gpointer user_data )
+{
+
+}
+
+
+void GtkPlaylistDeleteAll( GtkMenuItem * menuitem, gpointer user_data )
+{
+
 }
 
-void
-on_invertselection_clicked (GtkMenuItem *item, gpointer user_data)
+
+void GtkPlaylistDeleteSelected( GtkMenuItem * menuitem, gpointer user_data )
 {
-    int * selected, sel_l;
-    GtkCList    * clist;
-    playlist_t * playlist_p;
-    int dummy;
+    /* user wants to delete a file in the queue */
+    GList *     p_selection;
+    GtkCList *  p_clist;
+    playlist_t *p_playlist;
     
     /* catch the thread back */
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(item), "intf_playlist" );
-    playlist_p = p_main->p_playlist;
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), (char*)user_data );
+
+    p_playlist = p_main->p_playlist;
     
     /* lock the struct */
     vlc_mutex_lock( &p_intf->change_lock );
-    clist = GTK_CLIST( lookup_widget(p_intf->p_sys->p_playlist,"playlist_clist") );
+
+    p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
+        p_intf->p_sys->p_playlist ), "playlist_clist" ) );
     
-    /* have to copy the selection to an int *
-       I wasn't able to copy the g_list to another g_list
-       glib only does pointer copies, not real copies :( */
+    /* I use UNDOCUMENTED features to retrieve the selection... */
+    p_selection = p_clist->selection;
     
-    selected = malloc(sizeof(int)* g_list_length(clist->selection));
-    sel_l = g_list_length(clist->selection);
-    for(dummy=0; dummy < sel_l; dummy++)
+    if( g_list_length( p_selection ) > 0 )
     {
-        selected[dummy] = (int)g_list_nth_data(clist->selection,dummy);
+        /* reverse-sort so that we can delete from the furthest
+         * to the closest item to delete...
+         */
+        p_selection = g_list_sort( p_selection, GtkCompareItems );
+        g_list_foreach( p_selection, GtkDeleteGListItem, p_intf );
+        /* rebuild the CList */
+        GtkRebuildCList( p_clist, p_playlist );
     }
     
-    gtk_clist_freeze( clist );
-    gtk_clist_select_all( clist );
-    for(dummy=0; dummy < sel_l; dummy++)
-    {
-        gtk_clist_unselect_row( clist, selected[dummy],0);
-        gtk_clist_unselect_row( clist, selected[dummy],1);
-    }
-    free( selected );
-    gtk_clist_thaw( clist );
     vlc_mutex_unlock( &p_intf->change_lock );
-}    
+}
 
-void
-on_crop_activate                       (GtkMenuItem     *menuitem,
-                                       gpointer         user_data)
+void GtkPlaylistCrop( GtkMenuItem * menuitem, gpointer user_data )
 {
     /* Ok, this is a really small thing, but, hey, it works and
        might be useful, who knows ? */
-    
-    on_invertselection_clicked (menuitem, user_data);
-    on_delete_clicked(menuitem, user_data);
+    GtkPlaylistInvert( menuitem, user_data );
+    GtkPlaylistDeleteSelected( menuitem, user_data );
 }
 
-
-void
-on_delete_clicked                      (GtkMenuItem       *item,
-                                        gpointer         user_data)
+void GtkPlaylistInvert( GtkMenuItem * menuitem, gpointer user_data )
 {
-    /* user wants to delete a file in the queue */
-    GList * selection;
-    GtkCList    * clist;
-    playlist_t * playlist_p;
+    playlist_t *p_playlist;
+    GtkCList *  p_clist;
+    int *       pi_selected;
+    int         i_sel_l;
+    int         i_dummy;
     
     /* catch the thread back */
-    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(item), "intf_playlist" );
-    playlist_p = p_main->p_playlist;
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), (char*)user_data );
+
+    p_playlist = p_main->p_playlist;
     
     /* lock the struct */
     vlc_mutex_lock( &p_intf->change_lock );
-    clist = GTK_CLIST( lookup_widget(p_intf->p_sys->p_playlist,"playlist_clist") );
+
+    p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
+        p_intf->p_sys->p_playlist ), "playlist_clist" ) );
     
-    /* I use UNDOCUMENTED features to retrieve the selection... */
-    selection = clist->selection; 
+    /* have to copy the selection to an int *
+       I wasn't able to copy the g_list to another g_list
+       glib only does pointer copies, not real copies :( */
     
-    if( g_list_length(selection)>0 )
+    pi_selected = malloc( sizeof(int) *g_list_length( p_clist->selection ) );
+    i_sel_l = g_list_length( p_clist->selection );
+
+    for( i_dummy = 0 ; i_dummy < i_sel_l ; i_dummy++)
     {
-        /* reverse-sort so that we can delete from the furthest to the 
-           closest item to delete...
-          */
-        selection = g_list_sort( selection, compareItems );
-        g_list_foreach( selection,
-                        deleteGListItem, 
-                        p_intf );
-        /* rebuild the CList */
-        rebuildCList( clist, playlist_p );
+        pi_selected[i_dummy] = (int)g_list_nth_data( p_clist->selection,
+                                                     i_dummy );
     }
     
+    gtk_clist_freeze( p_clist );
+    gtk_clist_select_all( p_clist );
+
+    for( i_dummy = 0; i_dummy < i_sel_l; i_dummy++)
+    {
+        gtk_clist_unselect_row( p_clist, pi_selected[i_dummy], 0 );
+        gtk_clist_unselect_row( p_clist, pi_selected[i_dummy], 1 );
+    }
+
+    free( pi_selected );
+    gtk_clist_thaw( p_clist );
+
     vlc_mutex_unlock( &p_intf->change_lock );
 }
 
-gboolean
-on_intf_playlist_destroy_event         (GtkWidget       *widget,
-                                        GdkEvent        *event,
-                                        gpointer         user_data)
+void GtkPlaylistSelect( GtkMenuItem * menuitem, gpointer user_data)
 {
-    /* hide ! */
-    gtk_widget_hide(widget);
-    return TRUE;
+
+}
+
+gboolean GtkPlaylistEvent( GtkWidget * widget,
+                           GdkEvent  * event,
+                           gpointer    user_data)
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    if( ( event->button ).type == GDK_2BUTTON_PRESS )
+    {
+        GtkCList *  p_clist;
+        gint        i_row;
+        gint        i_col;
+
+        p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
+            p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+        
+        if( gtk_clist_get_selection_info( p_clist, (event->button).x, 
+                    (event->button).y, &i_row, &i_col ) == 1 )
+        {
+            /* clicked is in range. */
+            if( p_intf->p_input != NULL )
+            {
+                /* FIXME: temporary hack */
+                p_intf->p_input->b_eof = 1;
+            }
+
+//            vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+            intf_PlaylistJumpto( p_main->p_playlist, i_row - 1 );
+            p_main->p_playlist->b_stopped = 0;
+
+//            vlc_mutex_unlock( &p_main->p_playlist->change_lock );
+        }
+        return TRUE;
+    }
+
+    return FALSE;
 }
 
-void
-on_intf_playlist_drag_data_received    (GtkWidget       *widget,
-    GdkDragContext  *drag_context,
-    gint             x,
-    gint             y,
-    GtkSelectionData *data,
-    guint            info,
-    guint            time,
-    gpointer         user_data)
+void GtkPlaylistDragData( GtkWidget       *widget,
+                          GdkDragContext  *drag_context,
+                          gint             x,
+                          gint             y,
+                          GtkSelectionData *data,
+                          guint            info,
+                          guint            time,
+                          gpointer         user_data )
 {
+    intf_thread_t * p_intf;
+    GtkCList *      p_clist;
+    gint            i_row;
+    gint            i_col;
+    int             i_end = p_main->p_playlist->i_size;
+
     /* catch the interface back */
-    intf_thread_t * p_intf =  GetIntf( GTK_WIDGET(widget), "intf_playlist" );
-    GtkCList *  clist;
-    gint row, col;
+    p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
 
-    clist = GTK_CLIST(lookup_widget( p_intf->p_sys->p_playlist,"playlist_clist" ));
+    p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
+        p_intf->p_sys->p_playlist ), "playlist_clist" ) );
    
-    /* are we dropping somewhere into the clist items ? */
-    if( gtk_clist_get_selection_info( clist, 
-                x, 
-                y, 
-                &row, 
-                &col )== 1)
+    if( gtk_clist_get_selection_info( p_clist, x, y, &i_row, &i_col ) == 1 )
     {
-        on_generic_drop_data_received( p_intf, data, info, row );
+        /* we are dropping somewhere into the clist items */
+        GtkDropDataReceived( p_intf, data, info, i_row );
     } 
-    /* else, put that at the end of the playlist */
     else 
     {
-        on_generic_drop_data_received( p_intf, data, info, PLAYLIST_END);
+        /* else, put that at the end of the playlist */
+        GtkDropDataReceived( p_intf, data, info, PLAYLIST_END );
     }
+
+//    vlc_mutex_lock( &p_main->p_playlist->change_lock );
+
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
+    p_main->p_playlist->b_stopped = 0;
+
+//    vlc_mutex_unlock( &p_main->p_playlist->change_lock );
 }
+
+
+gboolean GtkPlaylistDragMotion( GtkWidget       *widget,
+                                GdkDragContext  *drag_context,
+                                gint             x,
+                                gint             y,
+                                guint            time,
+                                gpointer         user_data )
+{
+    intf_thread_t *p_intf;
+    GtkCList *  p_clist;
+    gint        i_row;
+    gint        i_col;
+    int         i_dummy;
+    GdkColor    color;
+
+    p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
+        p_intf->p_sys->p_playlist ), "playlist_clist" ) );
+
+    if( !GTK_WIDGET_TOPLEVEL(widget) )
+    {
+        gdk_window_raise( p_intf->p_sys->p_playlist->window );
+    }
+
+    color.red =   0xffff;
+    color.blue =  0xffff;
+    color.green = 0xffff;
+
+    gtk_clist_freeze( p_clist );
+    
+    for( i_dummy = 0; i_dummy < p_clist->rows; i_dummy++)
+    {
+       gtk_clist_set_background ( p_clist, i_dummy , &color);
+    }
+
+    color.red = 0xffff;
+    color.blue = 0;
+    color.green = 0;
+    gtk_clist_set_background( p_clist, p_main->p_playlist->i_index , &color );
+        
+    if( gtk_clist_get_selection_info( p_clist, x, y, &i_row, &i_col ) == 1)
+    {
+        color.red = 0;
+        color.blue = 0xf000;
+        color.green = 0x9000;
+        gtk_clist_set_background ( p_clist, i_row - 1, &color);
+        gtk_clist_set_background ( p_clist, i_row, &color);
+    }
+
+    gtk_clist_thaw( p_clist );
     
-void on_generic_drop_data_received( intf_thread_t * p_intf,
-        GtkSelectionData *data, guint info, int position)
+    return TRUE;
+}
+
+void GtkDropDataReceived( intf_thread_t * p_intf,
+        GtkSelectionData * p_data, guint i_info, int i_position)
 {
     /* first we'll have to split against all the '\n' we have */
-    gchar * protocol;
-    gchar * temp;
-    gchar * string = data->data ;
-    GList * files = NULL;
-    GtkCList * clist;
+    gchar *     p_protocol;
+    gchar *     p_temp;
+    gchar *     p_string = p_data->data ;
+    GList *     p_files = NULL;
+    GtkCList *  p_clist;
 
     
     /* catch the playlist back */
-    playlist_t * p_playlist = p_main->p_playlist ;
+    playlist_t * p_playlist = p_main->p_playlist;
    
 
     /* if this has been URLencoded, decode it
@@ -339,47 +422,47 @@ void on_generic_drop_data_received( intf_thread_t * p_intf,
      * Is it a good thing to do it in place ?
      * probably not... 
      */
-    if(info == DROP_ACCEPT_TEXT_URI_LIST)
+    if( i_info == DROP_ACCEPT_TEXT_URI_LIST )
     {
-        urldecode_path( string );
+        urldecode_path( p_string );
     }
     
     /* this cuts string into single file drops */
     /* this code was borrowed from xmms, thx guys :) */
-    while(*string)
+    while( *p_string)
     {
-        temp = strchr(string, '\n');
-        if(temp)
+        p_temp = strchr( p_string, '\n' );
+        if( p_temp )
         {
-            if (*(temp - 1) == '\r')
-                *(temp - 1) = '\0';
-            *temp = '\0';
+            if( *( p_temp - 1 ) == '\r' )
+            {
+                *( p_temp - 1) = '\0';
+            }
+            *p_temp = '\0';
         }
-       
-        
+
         /* do we have a protocol or something ? */
-        protocol = strstr( string, ":/" );
-        if( protocol != NULL )
+        p_protocol = strstr( p_string, ":/" );
+        if( p_protocol != NULL )
         {
-            protocol = calloc( protocol - string + 2 , 
-                            sizeof(char));
-            protocol = strncpy( protocol, string, strstr( string, ":/") + 1 - string );
+            p_protocol = calloc( p_protocol - p_string + 2, sizeof(char) );
+            p_protocol = strncpy( p_protocol, p_string,
+                                  strstr( p_string, ":/" ) + 1 - p_string );
 
-            intf_WarnMsg(4,"Protocol dropped is %s",protocol);
-            string += strlen(protocol) ;
+            intf_WarnMsg( 4, "Protocol dropped is %s", p_protocol );
+            p_string += strlen( p_protocol );
 
             /* Allowed things are proto: or proto:// */
-            if(string[0]=='/' && string[1]=='/')
+            if( p_string[0] == '/' && p_string[1] == '/')
             {
                 /* eat one '/' */
-                string++;
+                p_string++;
             }
-            intf_WarnMsg(4,"Dropped %s",string);
-
+            intf_WarnMsg( 4, " Dropped %s", p_string );
         } 
         else 
         {
-            protocol = strdup("");
+            p_protocol = strdup( "" );
         }
          
         /* if it uses the file protocol we can do something, else, sorry :( 
@@ -387,70 +470,110 @@ void on_generic_drop_data_received( intf_thread_t * p_intf,
          * ability to read http:// or ftp:// files
          * what about adding dvd:// to the list of authorized proto ? */
         
-        if( strcmp(protocol,"file:")==0 )
+        if( strcmp( p_protocol, "file:" ) == 0 )
         {
-            files = g_list_concat( files, intf_readFiles( string ) ); 
+            p_files = g_list_concat( p_files, GtkReadFiles( p_string ) ); 
         }
        
         /* free the malloc and go on... */
-        free( protocol );
-        if (!temp)
+        free( p_protocol );
+        if( !p_temp )
+        {
             break;
-        string = temp + 1;
+        }
+        p_string = p_temp + 1;
     }
    
     /* At this point, we have a nice big list maybe NULL */
-    if(files != NULL)
+    if( p_files != NULL )
     {
         /* lock the interface */
         vlc_mutex_lock( &p_intf->change_lock );
-        intf_WarnMsg( 4, "List has %d elements",g_list_length( files ) ); 
-        intf_AppendList( p_playlist, position, files );
+
+        intf_WarnMsg( 4, "List has %d elements", g_list_length( p_files ) ); 
+        GtkAppendList( p_playlist, i_position, p_files );
 
         /* get the CList  and rebuild it. */
-        clist = GTK_CLIST(
-                lookup_widget( p_intf->p_sys->p_playlist,
-                               "playlist_clist" ) ); 
-        rebuildCList( clist , p_playlist );
+        p_clist = GTK_CLIST( lookup_widget( p_intf->p_sys->p_playlist,
+                                            "playlist_clist" ) ); 
+        GtkRebuildCList( p_clist , p_playlist );
         
         /* unlock the interface */
         vlc_mutex_unlock( &p_intf->change_lock );
+
+        p_main->p_playlist->b_stopped = 0;
+    }
+}
+
+
+void GtkDeleteGListItem( gpointer data, gpointer param )
+{
+    int i_cur_row = ( int )data;
+    intf_thread_t * p_intf = param;    
+    
+    intf_PlaylistDelete( p_main->p_playlist, i_cur_row );
+
+    /* are we deleting the current played stream */
+    if( p_intf->p_sys->i_playing == i_cur_row )
+    {
+        /* next ! */
+        p_intf->p_input->b_eof = 1;
+        /* this has to set the slider to 0 */
+        
+        /* step minus one */
+        p_intf->p_sys->i_playing-- ;
+
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );
+        p_main->p_playlist->i_index-- ;
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );
     }
 }
 
+
+gint GtkCompareItems( gconstpointer a, gconstpointer b )
+{
+    return b - a;
+}
+
+
 /* check a file (string) against supposed valid extension */
-int 
-hasValidExtension( gchar * filename )
+int GtkHasValidExtension( gchar * psz_filename )
 {
-    char * ext[6] = {"mpg","mpeg","vob","mp2","ts","ps"};
+    char * ppsz_ext[6] = { "mpg", "mpeg", "vob", "mp2", "ts", "ps" };
     int  i_ext = 6;
-    int dummy;
-    gchar * p_filename = strrchr( filename, '.' ) + sizeof( char );
-    for( dummy=0; dummy<i_ext;dummy++ )
+    int  i_dummy;
+
+    gchar * psz_ext = strrchr( psz_filename, '.' ) + sizeof( char );
+
+    for( i_dummy = 0 ; i_dummy < i_ext ; i_dummy++ )
     {
-        if( strcmp( p_filename,ext[dummy] )==0 )
+        if( strcmp( psz_ext, ppsz_ext[i_dummy] ) == 0 )
+        {
             return 1;
+        }
     }
+
     return 0;
 }
 
-/* recursive function: descend into folders and build a list of valid filenames */
-GList * 
-intf_readFiles( gchar * fsname )
+/* recursive function: descend into folders and build a list of
+ * valid filenames */
+GList * GtkReadFiles( gchar * psz_fsname )
 {
     struct stat statbuf;
-    GList  * current = NULL;
+    GList  *    p_current = NULL;
 
     /* get the attributes of this file */
-    stat(fsname, &statbuf);
+    stat( psz_fsname, &statbuf );
     
     /* is it a regular file ? */
     if( S_ISREG( statbuf.st_mode ) )
     {
-        if( hasValidExtension(fsname) )
+        if( GtkHasValidExtension( psz_fsname ) )
         {
-            intf_WarnMsg( 2, "%s is a valid file. Stacking on the playlist", fsname );
-            return g_list_append( NULL, g_strdup(fsname) );
+            intf_WarnMsg( 2, "%s is a valid file. Stacking on the playlist",
+                          psz_fsname );
+            return g_list_append( NULL, g_strdup( psz_fsname ) );
         } 
         else
         {
@@ -461,140 +584,133 @@ intf_readFiles( gchar * fsname )
     else if( S_ISDIR( statbuf.st_mode ) ) 
     {
         /* have to cd into this dir */
-        DIR * currentDir = opendir( fsname );
-        struct dirent * dirContent; 
+        DIR *           p_current_dir = opendir( psz_fsname );
+        struct dirent * p_dir_content; 
         
-        intf_WarnMsg( 2, "%s is a folder.", fsname );
+        intf_WarnMsg( 2, "%s is a folder.", psz_fsname );
         
-        if( currentDir == NULL )
+        if( p_current_dir == NULL )
         {
             /* something went bad, get out of here ! */
-            return current;
+            return p_current;
         }
-        dirContent = readdir( currentDir );
+        p_dir_content = readdir( p_current_dir );
 
         /* while we still have entries in the directory */
-        while( dirContent != NULL )
+        while( p_dir_content != NULL )
         {
             /* if it is "." or "..", forget it */
-            if(strcmp(dirContent->d_name,".") != 0
-                    && strcmp(dirContent->d_name,"..") != 0)
+            if( ( strcmp( p_dir_content->d_name, "." ) != 0 ) &&
+                ( strcmp( p_dir_content->d_name, ".." ) != 0 ) )
             {
                 /* else build the new directory by adding
                    fsname "/" and the current entry name 
                    (kludgy :()
                   */
-                char * newfs = malloc ( 2 + 
-                        strlen( fsname ) + 
-                        strlen( dirContent->d_name ) * sizeof( char ) );
-                strcpy( newfs, fsname );
-                strcpy( newfs + strlen( fsname )+1, dirContent->d_name);
-                newfs[strlen( fsname )] = '/';
+                char *  psz_newfs = malloc ( 2 + strlen( psz_fsname ) +
+                            strlen( p_dir_content->d_name ) * sizeof(char) );
+                strcpy( psz_newfs, psz_fsname );
+                strcpy( psz_newfs + strlen( psz_fsname ) + 1,
+                        p_dir_content->d_name );
+                psz_newfs[strlen( psz_fsname )] = '/';
                 
-                current = g_list_concat( current, intf_readFiles( newfs ) );
+                p_current = g_list_concat( p_current,
+                                           GtkReadFiles( psz_newfs ) );
                     
-                g_free( newfs );
+                g_free( psz_newfs );
             }
-            dirContent = readdir( currentDir );
+            p_dir_content = readdir( p_current_dir );
         }
-        return current;
+        return p_current;
     }
     return NULL;
 }
 
 /* add items in a playlist 
-  when i_pos==-1 add to the end of the list... 
* when i_pos==-1 add to the end of the list... 
  */
-int intf_AppendList( playlist_t * p_playlist, int i_pos, GList * list )
+int GtkAppendList( playlist_t * p_playlist, int i_pos, GList * p_list )
 {
-    guint length, dummy;
-    length = g_list_length( list );
-    for( dummy=0; dummy<length; dummy++ )
+    guint i_dummy;
+    guint i_length;
+
+    i_length = g_list_length( p_list );
+
+    for( i_dummy = 0; i_dummy < i_length ; i_dummy++ )
     {
         intf_PlaylistAdd( p_playlist, 
                 /* ok; this is a really nasty trick to insert
                    the item where they are suppose to go but, hey
                    this works :P (btw, you are really nasty too) */
-                i_pos==PLAYLIST_END?PLAYLIST_END:( i_pos + dummy ), 
-                g_list_nth_data(list, dummy));
+                i_pos==PLAYLIST_END?PLAYLIST_END:( i_pos + i_dummy ), 
+                g_list_nth_data( p_list, i_dummy ) );
     }
     return 0;
 }
-gboolean
-on_playlist_clist_event (GtkWidget       *widget,
-                            GdkEvent        *event,
-                            gpointer         user_data)
-{
-    intf_thread_t * p_intf =  GetIntf( GTK_WIDGET( widget ), "intf_playlist" );
-
-    if( ( event->button ).type == GDK_2BUTTON_PRESS )
-    {
-        GtkCList *  clist;
-        gint row, col;
-
-        clist = GTK_CLIST( 
-                    lookup_widget( 
-                        p_intf->p_sys->p_playlist,
-                        "playlist_clist" ) );
-        
-        if( gtk_clist_get_selection_info( clist, 
-                    (event->button).x, 
-                    (event->button).y, 
-                    &row, 
-                    &col )== 1 )
-        {
-
-            /* clicked is in range. */
-            if( p_intf->p_input != NULL )
-            {
-                /* FIXME: temporary hack */
-                p_intf->p_input->b_eof = 1;
-            }
-            intf_PlaylistJumpto( p_main->p_playlist, row-1 );
-        }
-        return TRUE;
-    }
-    return FALSE;
-}
 
 /* statis timeouted function */
-void GtkPlayListManage( gpointer p_data )
+void GtkPlayListManage( intf_thread_t * p_intf )
 {
     /* this thing really sucks for now :( */
 
     /* TODO speak more with interface/intf_playlist.c */
 
-    intf_thread_t *p_intf = (void *)p_data;
-    playlist_t * p_playlist = p_main->p_playlist ;
+    playlist_t *    p_playlist = p_main->p_playlist ;
+    GtkCList *      p_clist;
 
-    vlc_mutex_lock( &p_intf->change_lock );
+    p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
+                   p_intf->p_sys->p_playlist ), "playlist_clist" ) );
 
     if( p_intf->p_sys->i_playing != p_playlist->i_index )
     {
         GdkColor color;
 
         color.red = 0xffff;
-        color.green = 0;
         color.blue = 0;
+        color.green = 0;
 
-        gtk_clist_set_background ( GTK_CLIST(
-                    lookup_widget( p_intf->p_sys->p_playlist, 
-                                   "playlist_clist" ) ),
-                    p_playlist->i_index,
-                    &color );
+        gtk_clist_set_background( p_clist, p_playlist->i_index, &color );
 
         if( p_intf->p_sys->i_playing != -1 )
         {
             color.red = 0xffff;
-            color.green = 0xffff;
             color.blue = 0xffff;
-            gtk_clist_set_background (
-            GTK_CLIST(lookup_widget( p_intf->p_sys->p_playlist, "playlist_clist" ) ),
-            p_intf->p_sys->i_playing,
-            &color);
+            color.green = 0xffff;
+            gtk_clist_set_background( p_clist, p_intf->p_sys->i_playing,
+                                      &color);
         }
         p_intf->p_sys->i_playing = p_playlist->i_index;
     }
-    vlc_mutex_unlock( &p_intf->change_lock );
+}
+
+void GtkRebuildCList( GtkCList * p_clist, playlist_t * p_playlist )
+{
+    int         i_dummy;
+    gchar *     ppsz_text[2];
+    GdkColor    red;
+    red.red     = 65535;
+    red.blue    = 0;
+    red.green   = 0;
+    
+    gtk_clist_freeze( p_clist );
+    gtk_clist_clear( p_clist );
+   
+    for( i_dummy = 0; i_dummy < p_playlist->i_size ; i_dummy++ )
+    {
+#ifdef WIN32 /* WIN32 HACK */
+        ppsz_text[0] = g_strdup( "" );
+#else
+        ppsz_text[0] = g_strdup( rindex( (char *)(p_playlist->p_item[
+                p_playlist->i_size - 1 - i_dummy].psz_name ), '/' ) + 1 );
+#endif
+        ppsz_text[1] = g_strdup( "no info");
+        
+        gtk_clist_insert( p_clist, 0, ppsz_text );
+        
+        free( ppsz_text[0] );
+        free( ppsz_text[1] );
+    }
+    gtk_clist_set_background( p_clist, p_playlist->i_index, &red);
+    gtk_clist_thaw( p_clist );
 }
 
index 848e8967666e019cf9226c76ab799b161838481e..efa88e14e77d22698bb2f4ec944051d6f31d6fac 100644 (file)
@@ -1,10 +1,46 @@
-void on_generic_drop_data_received( intf_thread_t * p_intf, 
-        GtkSelectionData *data, guint info, int position);
-void rebuildCList(GtkCList * clist, playlist_t * playlist_p);
-int hasValidExtension(gchar * filename);
-int intf_AppendList( playlist_t * p_playlist, int i_pos, GList * list );
-void GtkPlayListManage( gpointer p_data );
-void on_generic_drop_data_received( intf_thread_t * p_intf,
-        GtkSelectionData *data, guint info, int position);
-gint compareItems(gconstpointer a, gconstpointer b);
-GList * intf_readFiles(gchar * fsname );
+/*****************************************************************************
+ * gtk_playlist.h : Playlist functions for the Gtk plugin.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: gtk_playlist.h,v 1.2 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Pierre Baillet <oct@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *      
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+void GtkPlaylistDeleteAll     ( GtkMenuItem *, gpointer );
+void GtkPlaylistDeleteSelected( GtkMenuItem *, gpointer );
+void GtkPlaylistCrop          ( GtkMenuItem *, gpointer );
+void GtkPlaylistInvert        ( GtkMenuItem *, gpointer );
+void GtkPlaylistSelect        ( GtkMenuItem *, gpointer );
+void GtkPlaylistOk            ( GtkButton *, gpointer );
+void GtkPlaylistCancel        ( GtkButton *, gpointer );
+
+int      GtkHasValidExtension ( gchar * );
+gint     GtkCompareItems      ( gconstpointer, gconstpointer );
+GList *  GtkReadFiles         ( gchar * );
+
+gboolean GtkPlaylistShow      ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkPlaylistPrev      ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkPlaylistNext      ( GtkWidget *, GdkEventButton *, gpointer );
+gboolean GtkPlaylistDragMotion( GtkWidget *, GdkDragContext *,
+                                gint, gint, uint, gpointer );
+gboolean GtkPlaylistEvent     ( GtkWidget *, GdkEvent *, gpointer );
+void     GtkPlaylistDragData  ( GtkWidget *, GdkDragContext *,
+                                gint, gint, GtkSelectionData *,
+                                guint, guint, gpointer  );
+void     GtkDeleteGListItem   ( gpointer, gpointer );
diff --git a/plugins/gtk/gtk_preferences.c b/plugins/gtk/gtk_preferences.c
new file mode 100644 (file)
index 0000000..3f567fe
--- /dev/null
@@ -0,0 +1,320 @@
+/*****************************************************************************
+ * gtk_control.c : functions to handle stream control buttons.
+ *****************************************************************************
+ * Copyright (C) 2000, 2001 VideoLAN
+ * $Id: gtk_preferences.c,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *      
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+#define MODULE_NAME gtk
+#include "modules_inner.h"
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "defs.h"
+#include <sys/types.h>                                              /* off_t */
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+
+#include <string.h>
+
+#include "config.h"
+#include "common.h"
+#include "threads.h"
+#include "mtime.h"
+
+#include "stream_control.h"
+#include "input_ext-intf.h"
+
+#include "interface.h"
+#include "intf_playlist.h"
+#include "intf_msg.h"
+
+#include "gtk_callbacks.h"
+#include "gtk_interface.h"
+#include "gtk_support.h"
+#include "gtk_playlist.h"
+#include "intf_gtk.h"
+
+#include "main.h"
+
+/****************************************************************************
+ * GtkPreferencesShow: display interface window after initialization
+ * if necessary
+ ****************************************************************************/
+
+/* macros to create preference box */
+#define ASSIGN_PSZ_ENTRY( var, default, name )                               \
+    gtk_entry_set_text( GTK_ENTRY( gtk_object_get_data( GTK_OBJECT(          \
+        p_intf->p_sys->p_preferences ), name ) ),                            \
+                        main_GetPszVariable( var, default ) )
+
+#define ASSIGN_INT_VALUE( var, default, name )                                        \
+    gtk_spin_button_set_value( GTK_SPIN_BUTTON( gtk_object_get_data(         \
+        GTK_OBJECT( p_intf->p_sys->p_preferences ), name ) ),                \
+                               main_GetIntVariable( var, default ) )
+
+#define ASSIGN_INT_TOGGLE( var, default, name )                                       \
+    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( gtk_object_get_data(    \
+        GTK_OBJECT( p_intf->p_sys->p_preferences ), name ) ),                \
+                               main_GetIntVariable( var, default ) )
+
+gboolean GtkPreferencesShow( GtkWidget       *widget,
+                             GdkEventButton  *event,
+                             gpointer         user_data )
+{
+    intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), (char*)user_data );
+
+    /* 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 );
+
+        /* Default path */
+        ASSIGN_PSZ_ENTRY( INTF_PATH_VAR, INTF_PATH_DEFAULT,
+                          "preferences_file_path_entry" );
+    
+        /* Default DVD */
+        ASSIGN_PSZ_ENTRY( INPUT_DVD_DEVICE_VAR,INPUT_DVD_DEVICE_DEFAULT,
+                          "preferences_disc_dvd_entry" );
+    
+        /* Default VCD */
+        ASSIGN_PSZ_ENTRY( INPUT_VCD_DEVICE_VAR, INPUT_VCD_DEVICE_DEFAULT,
+                          "preferences_disc_vcd_entry" );
+    
+        /* Default server */
+        ASSIGN_PSZ_ENTRY( INPUT_SERVER_VAR, INPUT_SERVER_DEFAULT,
+                          "preferences_network_server_entry" );
+    
+        /* Default port */
+        ASSIGN_INT_VALUE( INPUT_PORT_VAR, INPUT_PORT_DEFAULT,
+                          "preferences_network_port_spinbutton" );
+    
+        /* Broadcast address */
+        ASSIGN_PSZ_ENTRY( INPUT_BCAST_ADRR_VAR, INPUT_BCAST_ADDR_DEFAULT,
+                          "preferences_network_broadcast_entry" );
+    
+        /* Broadcast stream by default ? */
+        ASSIGN_INT_TOGGLE( INPUT_BROADCAST_VAR, INPUT_BROADCAST_DEFAULT,
+                           "preferences_network_broadcast_checkbutton" );
+    
+        /* XXX Protocol */
+    
+        /* Default interface */
+        ASSIGN_PSZ_ENTRY( INTF_METHOD_VAR, INTF_METHOD_DEFAULT,
+                          "preferences_interface_entry" );
+    
+        /* Default video output */
+        ASSIGN_PSZ_ENTRY( VOUT_METHOD_VAR, VOUT_METHOD_DEFAULT,
+                          "preferences_video_output_entry" );
+    
+        /* Default output width */
+        ASSIGN_INT_VALUE( VOUT_WIDTH_VAR, VOUT_WIDTH_DEFAULT,
+                          "preferences_video_width_spinbutton" );
+    
+        /* Default output height */
+        ASSIGN_INT_VALUE( VOUT_HEIGHT_VAR, VOUT_HEIGHT_DEFAULT,
+                          "preferences_video_height_spinbutton" );
+    
+        /* XXX Default screen depth */
+    
+        /* XXX Default fullscreen depth */
+    
+        /* XXX Default gamma */
+        
+        /* Fullscreen on play */
+        ASSIGN_INT_TOGGLE( VOUT_FULLSCREEN_VAR, VOUT_FULLSCREEN_DEFAULT,
+                           "preferences_video_fullscreen_checkbutton" );
+    
+        /* Grayscale display */
+        ASSIGN_INT_TOGGLE( VOUT_GRAYSCALE_VAR, VOUT_GRAYSCALE_DEFAULT,
+                           "preferences_video_grayscale_checkbutton" );
+    
+        /* Default audio output */
+        ASSIGN_PSZ_ENTRY( AOUT_METHOD_VAR, AOUT_METHOD_DEFAULT,
+                          "preferences_audio_output_entry" );
+    
+        /* Default audio device */
+        ASSIGN_PSZ_ENTRY( AOUT_DSP_VAR, AOUT_DSP_DEFAULT,
+                          "preferences_audio_device_entry" );
+    
+        /* XXX Default frequency */
+    
+        /* XXX Default quality */
+    
+        /* XXX Default number of channels */
+    
+        /* Use spdif output ? */
+        ASSIGN_INT_TOGGLE( AOUT_SPDIF_VAR, AOUT_SPDIF_DEFAULT,
+                           "preferences_audio_spdif_checkbutton" );
+    
+        /* Launch playlist on startup */
+        ASSIGN_INT_TOGGLE( PLAYLIST_STARTUP_VAR, PLAYLIST_STARTUP_DEFAULT,
+                        "preferences_playlist_startup_checkbutton" );
+    
+        /* Enqueue drag'n dropped item as default */
+        ASSIGN_INT_TOGGLE( PLAYLIST_ENQUEUE_VAR, PLAYLIST_ENQUEUE_DEFAULT,
+                           "preferences_playlist_enqueue_checkbutton" );
+    
+        /* Loop on playlist end */
+        ASSIGN_INT_TOGGLE( PLAYLIST_LOOP_VAR, PLAYLIST_LOOP_DEFAULT,
+                           "preferences_playlist_loop_checkbutton" );
+    
+        /* Verbosity of warning messages */
+        ASSIGN_INT_VALUE( INTF_WARNING_VAR, INTF_WARNING_DEFAULT,
+                          "preferences_misc_messages_spinbutton" );
+#undef ASSIGN_PSZ_ENTRY
+#undef ASSIGN_INT_VALUE
+#undef ASSIGN_INT_TOGGLE
+    }
+
+    gtk_widget_show( p_intf->p_sys->p_preferences );
+    gdk_window_raise( p_intf->p_sys->p_preferences->window );
+
+    return TRUE;
+}
+
+/****************************************************************************
+ * GtkPreferencesApply: store the values into the environnement variables
+ ****************************************************************************/
+
+/* macros to read value frfom preference box */
+#define ASSIGN_PSZ_ENTRY( var, name )                                        \
+    main_PutPszVariable( var, gtk_entry_get_text(                            \
+    GTK_ENTRY( gtk_object_get_data( GTK_OBJECT( p_preferences ), name ) ) ) )
+
+#define ASSIGN_INT_VALUE( var, name )                                        \
+    main_PutIntVariable( var, gtk_spin_button_get_value_as_int(              \
+        GTK_SPIN_BUTTON( gtk_object_get_data( GTK_OBJECT( p_preferences ),   \
+        name ) ) ) )
+
+#define ASSIGN_INT_TOGGLE( var, name )                                       \
+    main_PutIntVariable( var, gtk_toggle_button_get_active(                  \
+        GTK_TOGGLE_BUTTON( gtk_object_get_data( GTK_OBJECT( p_preferences ), \
+        name ) ) ) )
+
+void GtkPreferencesApply( GtkButton * button, gpointer user_data )
+{
+    GtkWidget *     p_preferences;
+
+    /* get preferences window */
+    p_preferences = gtk_widget_get_toplevel( GTK_WIDGET( button ) );
+
+    /* Default path */
+    ASSIGN_PSZ_ENTRY( INTF_PATH_VAR, "preferences_file_path_entry" );
+
+    /* Default DVD */
+    ASSIGN_PSZ_ENTRY( INPUT_DVD_DEVICE_VAR, "preferences_disc_dvd_entry" );
+
+    /* Default VCD */
+    ASSIGN_PSZ_ENTRY( INPUT_VCD_DEVICE_VAR, "preferences_disc_vcd_entry" );
+
+    /* Default server */
+    ASSIGN_PSZ_ENTRY( INPUT_SERVER_VAR, "preferences_network_server_entry" );
+
+    /* Default port */
+    ASSIGN_INT_VALUE( INPUT_PORT_VAR, "preferences_network_port_spinbutton" );
+
+    /* Broadcast address */
+    ASSIGN_PSZ_ENTRY( INPUT_BCAST_ADRR_VAR,
+                      "preferences_network_broadcast_entry" );
+
+    /* Broadcast stream by default ? */
+    ASSIGN_INT_TOGGLE( INPUT_BROADCAST_VAR,
+                       "preferences_network_broadcast_checkbutton" );
+
+    /* XXX Protocol */
+
+    /* Default interface */
+    ASSIGN_PSZ_ENTRY( INTF_METHOD_VAR, "preferences_interface_entry" );
+
+    /* Default video output */
+    ASSIGN_PSZ_ENTRY( VOUT_METHOD_VAR, "preferences_video_output_entry" );
+
+    /* Default output width */
+    ASSIGN_INT_VALUE( VOUT_WIDTH_VAR, "preferences_video_width_spinbutton" );
+
+    /* Default output height */
+    ASSIGN_INT_VALUE( VOUT_HEIGHT_VAR, "preferences_video_height_spinbutton" );
+
+    /* XXX Default screen depth */
+
+    /* XXX Default fullscreen depth */
+
+    /* XXX Default gamma */
+    
+    /* Fullscreen on play */
+    ASSIGN_INT_TOGGLE( VOUT_FULLSCREEN_VAR,
+                       "preferences_video_fullscreen_checkbutton" );
+
+    /* Grayscale display */
+    ASSIGN_INT_TOGGLE( VOUT_GRAYSCALE_VAR,
+                       "preferences_video_grayscale_checkbutton" );
+
+    /* Default audio output */
+    ASSIGN_PSZ_ENTRY( AOUT_METHOD_VAR, "preferences_audio_output_entry" );
+
+    /* Default audio device */
+    ASSIGN_PSZ_ENTRY( AOUT_DSP_VAR, "preferences_audio_device_entry" );
+
+    /* XXX Default frequency */
+
+    /* XXX Default quality */
+
+    /* XXX Default number of channels */
+
+    /* Use spdif output ? */
+    ASSIGN_INT_TOGGLE( AOUT_SPDIF_VAR, "preferences_audio_spdif_checkbutton" );
+
+    /* Launch playlist on startup */
+    ASSIGN_INT_TOGGLE( PLAYLIST_STARTUP_VAR,
+                       "preferences_playlist_startup_checkbutton" );
+
+    /* Enqueue drag'n dropped item as default */
+    ASSIGN_INT_TOGGLE( PLAYLIST_ENQUEUE_VAR,
+                       "preferences_playlist_enqueue_checkbutton" );
+
+    /* Loop on playlist end */
+    ASSIGN_INT_TOGGLE( PLAYLIST_LOOP_VAR,
+                       "preferences_playlist_loop_checkbutton" );
+
+    /* Verbosity of warning messages */
+    ASSIGN_INT_VALUE( INTF_WARNING_VAR,
+                      "preferences_misc_messages_spinbutton" );
+}
+#undef ASSIGN_PSZ_ENTRY
+#undef ASSIGN_INT_VALUE
+#undef ASSIGN_INT_TOGGLE
+
+
+void GtkPreferencesOk( GtkButton * button, gpointer user_data )
+{
+    GtkPreferencesApply( button, user_data );
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
+
+
+void GtkPreferencesCancel( GtkButton * button, gpointer user_data )
+{
+    gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
+}
diff --git a/plugins/gtk/gtk_preferences.h b/plugins/gtk/gtk_preferences.h
new file mode 100644 (file)
index 0000000..24b1fb3
--- /dev/null
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * gtk_control.h: prototypes for control functions
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: gtk_preferences.h,v 1.1 2001/05/15 01:01:44 stef Exp $
+ *
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *          Stéphane Borel <stef@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+
+gboolean GtkPreferencesShow  ( GtkWidget *, GdkEventButton *, gpointer );
+void     GtkPreferencesOk    ( GtkButton *, gpointer );
+void     GtkPreferencesApply ( GtkButton *, gpointer );
+void     GtkPreferencesCancel( GtkButton *, gpointer );
index 239fd35899f7ec0e289035659b62f2dd2a6fc6b8..00a25309e29c765cb43e2b28c3c45a4c022d2c0d 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gtk.c: Gtk+ interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gtk.c,v 1.17 2001/05/07 03:14:09 stef Exp $
+ * $Id: intf_gtk.c,v 1.18 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
 #include "stream_control.h"
 #include "input_ext-intf.h"
 
-#include "intf_msg.h"
 #include "interface.h"
+#include "intf_msg.h"
+#include "intf_playlist.h"
+
+#include "video.h"
+#include "video_output.h"
 
 #include "gtk_callbacks.h"
 #include "gtk_interface.h"
 #include "gtk_support.h"
+#include "gtk_menu.h"
 #include "intf_gtk.h"
 
 #include "main.h"
@@ -66,16 +71,9 @@ static void intf_Close      ( intf_thread_t *p_intf );
 static void intf_Run        ( intf_thread_t *p_intf );
 
 static gint GtkManage       ( gpointer p_data );
-static gint GtkLanguageMenus( gpointer, GtkWidget *, es_descriptor_t *, gint,
-                              void (*pf_activate)(GtkMenuItem *, gpointer) );
-static gint GtkChapterMenu  ( gpointer, GtkWidget *,
-                              void (*pf_activate)(GtkMenuItem *, gpointer) );
-static gint GtkTitleMenu    ( gpointer, GtkWidget *, 
-                              void (*pf_activate)(GtkMenuItem *, gpointer) );
+static gint GtkModeManage   ( intf_thread_t * p_intf );
 static void GtkDisplayDate  ( GtkAdjustment *p_adj );
 
-void GtkPlayListManage( gpointer p_data );
-
 /*****************************************************************************
  * g_atexit: kludge to avoid the Gtk+ thread to segfault at exit
  *****************************************************************************
@@ -151,12 +149,8 @@ static int intf_Open( intf_thread_t *p_intf )
     p_intf->p_sys->b_window_changed = 0;
     p_intf->p_sys->b_playlist_changed = 0;
 
-    p_intf->p_sys->b_menus_update = 1;
     p_intf->p_sys->b_slider_free = 1;
 
-
-    p_intf->p_sys->i_playing = -1;
-
     p_intf->p_sys->pf_gtk_callback = NULL;
     p_intf->p_sys->pf_gdk_callback = NULL;
 
@@ -204,10 +198,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),
@@ -228,20 +219,30 @@ static void intf_Run( intf_thread_t *p_intf )
     p_intf->p_sys->p_slider_frame = GTK_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_title = P_LABEL( "title_label" );
+    p_intf->p_sys->p_label_chapter = P_LABEL( "chapter_label" );
+#undef P_LABEL
+
     /* Connect the date display to the slider */
-    #define P_SLIDER GTK_RANGE( gtk_object_get_data( \
+#define P_SLIDER GTK_RANGE( gtk_object_get_data( \
                          GTK_OBJECT( p_intf->p_sys->p_window ), "slider" ) )
     p_intf->p_sys->p_adj = gtk_range_get_adjustment( P_SLIDER );
 
     gtk_signal_connect ( GTK_OBJECT( p_intf->p_sys->p_adj ), "value_changed",
                          GTK_SIGNAL_FUNC( GtkDisplayDate ), NULL );
     p_intf->p_sys->f_adj_oldvalue = 0;
-    #undef P_SLIDER
+#undef P_SLIDER
 
     /* 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_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),
@@ -253,12 +254,6 @@ static void intf_Run( intf_thread_t *p_intf )
     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_disc),
-                         "p_intf", p_intf );
-
-    gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_network),
-                         "p_intf", p_intf );
-
     gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_adj),
                          "p_intf", p_intf );
 
@@ -300,8 +295,6 @@ static gint GtkManage( gpointer p_data )
 {
 #define p_intf ((intf_thread_t *)p_data)
 
-    GtkPlayListManage( p_data );
-
     vlc_mutex_lock( &p_intf->change_lock );
     
     /* If the "display popup" flag has changed */
@@ -318,122 +311,53 @@ static gint GtkManage( gpointer p_data )
         p_intf->b_menu_change = 0;
     }
 
-    if( p_intf->p_input != NULL )
+    /* update the playlist */
+    GtkPlayListManage( p_data );
+
+    if( p_intf->p_input != NULL && !p_intf->b_die )
     {
-        /* Used by TS input when PMT changes */
+        /* New input or stream map change */
         if( p_intf->p_input->stream.b_changed )
         {
-            p_intf->p_sys->b_menus_update = 1;
-            p_intf->p_input->stream.b_changed = 0;
-            intf_WarnMsg( 3, 
-                          "Interface menus refreshed as stream has changed" );
+            GtkModeManage( p_intf );
         }
 
-    }
-    
-    /* Update language/chapter menus after user request */
-    if( p_intf->p_input != NULL && p_intf->p_sys->p_window != NULL &&
-        p_intf->p_sys->b_menus_update )
-    {
-        es_descriptor_t *   p_audio_es;
-        es_descriptor_t *   p_spu_es;
-        GtkWidget *         p_menubar_menu;
-        GtkWidget *         p_popup_menu;
-        gint                i;
+        GtkSetupMenu( p_intf );
 
-        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
-                     p_intf->p_sys->p_window ), "menubar_title" ) );
-
-        GtkTitleMenu( p_intf, p_menubar_menu, on_menubar_title_activate );
-
-        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
-                     p_intf->p_sys->p_window ), "menubar_chapter" ) );
-
-        GtkChapterMenu( p_intf, p_menubar_menu, on_menubar_chapter_activate );
-
-        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
-                     p_intf->p_sys->p_popup ), "popup_navigation" ) );
-
-        GtkTitleMenu( p_intf, p_popup_menu, on_popup_navigation_activate );
-    
-        /* look for selected ES */
-        p_audio_es = NULL;
-        p_spu_es = NULL;
-
-        for( i = 0 ; i < p_intf->p_input->stream.i_selected_es_number ; i++ )
+        /* Manage the slider */
+        if( p_intf->p_input->stream.b_seekable )
         {
-            if( p_intf->p_input->stream.pp_es[i]->i_cat == AUDIO_ES )
+            float newvalue = p_intf->p_sys->p_adj->value;
+    
+#define p_area p_intf->p_input->stream.p_selected_area
+            /* If the user hasn't touched the slider since the last time,
+             * then the input can safely change it */
+            if( newvalue == p_intf->p_sys->f_adj_oldvalue )
             {
-                p_audio_es = p_intf->p_input->stream.pp_es[i];
-            }
+                /* Update the value */
+                p_intf->p_sys->p_adj->value = p_intf->p_sys->f_adj_oldvalue =
+                    ( 100. * p_area->i_tell ) / p_area->i_size;
     
-            if( p_intf->p_input->stream.pp_es[i]->i_cat == SPU_ES )
+                gtk_signal_emit_by_name( GTK_OBJECT( p_intf->p_sys->p_adj ),
+                                         "value_changed" );
+            }
+            /* Otherwise, send message to the input if the user has
+             * finished dragging the slider */
+            else if( p_intf->p_sys->b_slider_free )
             {
-                p_spu_es = p_intf->p_input->stream.pp_es[i];
+                off_t i_seek = ( newvalue * p_area->i_size ) / 100;
+    
+                input_Seek( p_intf->p_input, i_seek );
+    
+                /* Update the old value */
+                p_intf->p_sys->f_adj_oldvalue = newvalue;
             }
+#undef p_area
         }
-
-        /* audio menus */
-
-        /* find audio root menu */
-        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                             p_intf->p_sys->p_window ), "menubar_audio" ) );
-
-        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
-                     p_intf->p_sys->p_popup ), "popup_audio" ) );
-
-        GtkLanguageMenus( p_intf, p_menubar_menu, p_audio_es, AUDIO_ES,
-                          on_menubar_audio_activate );
-        GtkLanguageMenus( p_intf, p_popup_menu, p_audio_es, AUDIO_ES,
-                          on_popup_audio_activate );
-
-        /* sub picture menus */
-
-        /* find spu root menu */
-        p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
-                          p_intf->p_sys->p_window ), "menubar_subpictures" ) );
-
-        p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
-                     p_intf->p_sys->p_popup ), "popup_subpictures" ) );
-
-        GtkLanguageMenus( p_intf, p_menubar_menu, p_spu_es, SPU_ES,
-                          on_menubar_subpictures_activate  );
-        GtkLanguageMenus( p_intf, p_popup_menu, p_spu_es, SPU_ES,
-                          on_popup_subpictures_activate );
-
-        /* everything is ready */
-        p_intf->p_sys->b_menus_update = 0;
     }
-
-    /* Manage the slider */
-    if( p_intf->p_input != NULL && p_intf->p_input->stream.b_seekable )
+    else if( !p_intf->b_die )
     {
-        float newvalue = p_intf->p_sys->p_adj->value;
-
-#define p_area p_intf->p_input->stream.p_selected_area
-        /* If the user hasn't touched the slider since the last time,
-         * then the input can safely change it */
-        if( newvalue == p_intf->p_sys->f_adj_oldvalue )
-        {
-            /* Update the value */
-            p_intf->p_sys->p_adj->value = p_intf->p_sys->f_adj_oldvalue =
-                ( 100. * p_area->i_tell ) / p_area->i_size;
-
-            gtk_signal_emit_by_name( GTK_OBJECT( p_intf->p_sys->p_adj ),
-                                     "value_changed" );
-        }
-        /* Otherwise, send message to the input if the user has
-         * finished dragging the slider */
-        else if( p_intf->p_sys->b_slider_free )
-        {
-            off_t i_seek = ( newvalue * p_area->i_size ) / 100;
-
-            input_Seek( p_intf->p_input, i_seek );
-
-            /* Update the old value */
-            p_intf->p_sys->f_adj_oldvalue = newvalue;
-        }
-#undef p_area
+        GtkModeManage( p_intf );
     }
 
     /* Manage core vlc functions through the callback */
@@ -458,310 +382,139 @@ static gint GtkManage( gpointer p_data )
 }
 
 /*****************************************************************************
- * GtkMenuRadioItem: give a menu item adapted to language/title selection,
- * ie the menu item is a radio button.
- *****************************************************************************/
-static GtkWidget * GtkMenuRadioItem( GtkWidget * p_menu,
-                                     GSList **   p_button_group,
-                                     gint        b_active,
-                                     char *      psz_name )
-{
-    GtkWidget *     p_item;
-
-#if 0
-    GtkWidget *     p_button;
-
-    /* create button */
-    p_button =
-        gtk_radio_button_new_with_label( *p_button_group, psz_name );
-
-    /* add button to group */
-    *p_button_group =
-        gtk_radio_button_group( GTK_RADIO_BUTTON( p_button ) );
-
-    /* prepare button for display */
-    gtk_widget_show( p_button );
-
-    /* create menu item to store button */
-    p_item = gtk_menu_item_new();
-
-    /* put button inside item */
-    gtk_container_add( GTK_CONTAINER( p_item ), p_button );
-
-    /* add item to menu */
-    gtk_menu_append( GTK_MENU( p_menu ), p_item );
-
-          gtk_signal_connect( GTK_OBJECT( p_item ), "activate",
-               GTK_SIGNAL_FUNC( on_audio_toggle ),
-               NULL );
-
-
-    /* prepare item for display */
-    gtk_widget_show( p_item );
-
-    /* is it the selected item ? */
-    if( b_active )
-    {
-        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( p_button ), TRUE );
-    }
-#else
-    p_item = gtk_menu_item_new_with_label( psz_name );
-    gtk_menu_append( GTK_MENU( p_menu ), p_item );
-    gtk_widget_show( p_item );
-#endif
-
-    return p_item;
-}
-
-/*****************************************************************************
- * GtkLanguageMenus: update interactive menus of the interface
+ * GtkDisplayDate: display stream date
  *****************************************************************************
- * Sets up menus with information from input:
- *  -languages
- *  -sub-pictures
- * Warning: since this function is designed to be called by management
- * function, the interface lock has to be taken
+ * This function displays the current date related to the position in
+ * the stream. It is called whenever the slider changes its value.
  *****************************************************************************/
-static gint GtkLanguageMenus( gpointer          p_data,
-                              GtkWidget *       p_root,
-                              es_descriptor_t * p_es,
-                              gint              i_cat,
-                        void(*pf_activate )( GtkMenuItem *, gpointer ) )
+void GtkDisplayDate( GtkAdjustment *p_adj )
 {
-    intf_thread_t *     p_intf;
-    GtkWidget *         p_menu;
-    GtkWidget *         p_separator;
-    GtkWidget *         p_item;
-    GSList *            p_button_group;
-    char *              psz_name;
-    gint                b_active;
-    gint                i;
-
-    
-
-    /* cast */
-    p_intf = (intf_thread_t *)p_data;
-
-    vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
-
-    p_button_group = NULL;
-
-    /* menu container for audio */
-    p_menu = gtk_menu_new();
-
-    /* create a set of language buttons and append them to the container */
-    b_active = ( p_es == NULL );
-    psz_name = "Off";
-
-    p_item = GtkMenuRadioItem( p_menu, &p_button_group, b_active, psz_name );
-
-    /* setup signal hanling */
-    gtk_signal_connect( GTK_OBJECT( p_item ), "activate",
-            GTK_SIGNAL_FUNC ( pf_activate ), NULL );
-
-    p_separator = gtk_menu_item_new();
-    gtk_widget_show( p_separator );
-    gtk_menu_append( GTK_MENU( p_menu ), p_separator );
-    gtk_widget_set_sensitive( p_separator, FALSE );
+    intf_thread_t *p_intf;
+   
+    p_intf = gtk_object_get_data( GTK_OBJECT( p_adj ), "p_intf" );
 
-    for( i = 0 ; i < p_intf->p_input->stream.i_es_number ; i++ )
+    if( p_intf->p_input != NULL )
     {
-        if( p_intf->p_input->stream.pp_es[i]->i_cat == i_cat )
-        {
-            b_active = ( p_es == p_intf->p_input->stream.pp_es[i] ) ? 1 : 0;
-            psz_name = p_intf->p_input->stream.pp_es[i]->psz_desc;
-
-            p_item = GtkMenuRadioItem( p_menu, &p_button_group,
-                                       b_active, psz_name );
-
-            /* setup signal hanling */
-            gtk_signal_connect( GTK_OBJECT( p_item ), "activate",
-               GTK_SIGNAL_FUNC( pf_activate ),
-                 (gpointer)( p_intf->p_input->stream.pp_es[i] ) );
-
-        }
-    }
-
-    /* link the new menu to the menubar item */
-    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_root ), p_menu );
+#define p_area p_intf->p_input->stream.p_selected_area
+        char psz_time[ OFFSETTOTIME_MAX_SIZE ];
 
-    /* be sure that menu is sensitive */
-    gtk_widget_set_sensitive( p_root, TRUE );
+        vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
 
-    vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
+        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 ) );
 
-    return TRUE;
+        vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
+#undef p_area
+     }
 }
 
-/*****************************************************************************
- * GtkChapterMenu: generate chapter menu for current title
- *****************************************************************************/
-static gint GtkChapterMenu( gpointer p_data, GtkWidget * p_chapter,
-                        void(*pf_activate )( GtkMenuItem *, gpointer ) )
-{
-    intf_thread_t *     p_intf;
-    char                psz_name[ GTK_MENU_LABEL_SIZE ];
-    GtkWidget *         p_chapter_menu;
-    GtkWidget *         p_item;
-    GSList *            p_chapter_button_group;
-    gint                i_title;
-    gint                i_chapter;
-    gint                b_active;
-
-    /* cast */
-    p_intf = (intf_thread_t*)p_data;
-
-    i_title = p_intf->p_input->stream.p_selected_area->i_id;
-    p_chapter_menu = gtk_menu_new();
-
-    for( i_chapter = 0;
-         i_chapter < p_intf->p_input->stream.pp_areas[i_title]->i_part_nb ;
-         i_chapter++ )
-    {
-        b_active = ( p_intf->p_input->stream.pp_areas[i_title]->i_part
-                     == i_chapter + 1 ) ? 1 : 0;
-        
-        snprintf( psz_name, GTK_MENU_LABEL_SIZE,
-                  "Chapter %d", i_chapter + 1 );
-        psz_name[ GTK_MENU_LABEL_SIZE - 1 ] = '\0';
-
-        p_item = GtkMenuRadioItem( p_chapter_menu, &p_chapter_button_group,
-                                   b_active, psz_name );
-        /* setup signal hanling */
-        gtk_signal_connect( GTK_OBJECT( p_item ),
-                        "activate",
-                        GTK_SIGNAL_FUNC( pf_activate ),
-                        (gpointer)(i_chapter + 1) );
-    }
-
-    /* link the new menu to the title menu item */
-    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_chapter ),
-                               p_chapter_menu );
-
-    /* be sure that chapter menu is sensitive */
-    gtk_widget_set_sensitive( p_chapter, TRUE );
-
-    return TRUE;
-}
 
 /*****************************************************************************
- * GtkTitleMenu: sets menus for titles and chapters selection
- *****************************************************************************
- * Generates two type of menus:
- *  -simple list of titles
- *  -cascaded lists of chapters for each title
+ * GtkModeManage
  *****************************************************************************/
-static gint GtkTitleMenu( gpointer       p_data,
-                          GtkWidget *    p_navigation, 
-                          void(*pf_activate )( GtkMenuItem *, gpointer ) )
+static gint GtkModeManage( intf_thread_t * p_intf )
 {
-    intf_thread_t *     p_intf;
-    char                psz_name[ GTK_MENU_LABEL_SIZE ];
-    GtkWidget *         p_title_menu;
-    GtkWidget *         p_title_item;
-    GtkWidget *         p_chapter_menu;
-    GtkWidget *         p_item;
-    GSList *            p_title_button_group;
-    GSList *            p_chapter_button_group;
-    gint                i_title;
-    gint                i_chapter;
-    gint                b_active;
-
-    /* cast */
-    p_intf = (intf_thread_t*)p_data;
-
-    p_title_menu = gtk_menu_new();
-    p_title_button_group = NULL;
-    p_chapter_button_group = NULL;
-
-    /* loop on titles */
-    for( i_title = 1 ;
-         i_title < p_intf->p_input->stream.i_area_nb ;
-         i_title++ )
+    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 except default file 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 ) );
+
+    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 ) );
+
+    /* hide slider */
+    p_slider = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
+                           p_intf->p_sys->p_window ), "slider_frame" ) );
+    gtk_widget_hide( GTK_WIDGET( p_slider ) );
+
+    /* controls unavailable */
+    b_control = 0;
+
+    /* show the box related to current input mode */
+    if( p_intf->p_input != NULL )
     {
-        b_active = ( p_intf->p_input->stream.pp_areas[i_title] ==
-                     p_intf->p_input->stream.p_selected_area ) ? 1 : 0;
-        snprintf( psz_name, GTK_MENU_LABEL_SIZE, "Title %d", i_title );
-        psz_name[ GTK_MENU_LABEL_SIZE - 1 ] = '\0';
-
-        p_title_item = GtkMenuRadioItem( p_title_menu, &p_title_button_group,
-                                         b_active, psz_name );
-
-        if( pf_activate == on_menubar_title_activate )
+        switch( p_intf->p_input->stream.i_method & 0xf0 )
         {
-            /* setup signal hanling */
-            gtk_signal_connect( GTK_OBJECT( p_title_item ),
-                     "activate",
-                     GTK_SIGNAL_FUNC( pf_activate ),
-                     (gpointer)(p_intf->p_input->stream.pp_areas[i_title]) );
+            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;
         }
-        else
-        {
-            p_chapter_menu = gtk_menu_new();
     
-            for( i_chapter = 0;
-                 i_chapter <
-                        p_intf->p_input->stream.pp_areas[i_title]->i_part_nb ;
-                 i_chapter++ )
-            {
-                b_active = ( p_intf->p_input->stream.pp_areas[i_title]->i_part
-                             == i_chapter + 1 ) ? 1 : 0;
-                
-                snprintf( psz_name, GTK_MENU_LABEL_SIZE,
-                          "Chapter %d", i_chapter + 1 );
-                psz_name[ GTK_MENU_LABEL_SIZE - 1 ] = '\0';
+        /* slider for seekable streams */
+        if( p_intf->p_input->stream.b_seekable )
+        {
+            gtk_widget_show( GTK_WIDGET( p_slider ) );
+        }
     
-                p_item = GtkMenuRadioItem( p_chapter_menu,
-                                           &p_chapter_button_group,
-                                           b_active, psz_name );
+        /* control buttons for free pace streams */
+        b_control = p_intf->p_input->stream.b_pace_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;
     
-                /* setup signal hanling */
-                gtk_signal_connect( GTK_OBJECT( p_item ),
-                           "activate",
-                           GTK_SIGNAL_FUNC( pf_activate ),
-                           (gpointer)( ( i_title * 100 ) + ( i_chapter + 1) ) );
-        }
-
-        /* link the new menu to the title menu item */
-        gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_item ),
-                                   p_chapter_menu );
-        }
-
-        /* be sure that chapter menu is sensitive */
-        gtk_widget_set_sensitive( p_title_menu, TRUE );
-
+        p_intf->p_input->stream.b_changed = 0;
+        intf_WarnMsg( 3, 
+                      "intf info: menus refreshed as stream has changed" );
     }
-
-    /* link the new menu to the menubar audio item */
-    gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_navigation ), p_title_menu );
-
-    /* be sure that audio menu is sensitive */
-    gtk_widget_set_sensitive( p_navigation, TRUE );
-
-
-    return TRUE;
-}
-
-void GtkDisplayDate( GtkAdjustment *p_adj )
-{
-    intf_thread_t *p_intf;
-
-    p_intf = gtk_object_get_data( GTK_OBJECT( p_adj ), "p_intf" );
-
-    if( p_intf->p_input != NULL )
+    else
     {
-#define p_area p_intf->p_input->stream.p_selected_area
-        char psz_time[ OFFSETTOTIME_MAX_SIZE ];
-
-        vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
-
-        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 ) );
+        p_label = gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_window ),
+                        "label_status" );
+        gtk_label_set_text( GTK_LABEL( p_label ), "" );
+        gtk_widget_show( GTK_WIDGET( p_file_box ) );
+    }
 
-        vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
-#undef p_area
-     }
+    /* set control items */
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_back"), FALSE );
+    gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_stop"), 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"), 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 );
+
+#undef GETWIDGET
+    return TRUE;
 }
-
-
index 10458f513b4258fd661c5bb4c36723ad501e1fb8..17daf63f93e971247db85c1d474b49503c04eb57 100644 (file)
   <name>intf_window</name>
   <signal>
     <name>drag_data_received</name>
-    <handler>on_intf_window_drag_data_received</handler>
-    <last_modification_time>Fri, 16 Feb 2001 01:59:35 GMT</last_modification_time>
+    <handler>GtkWindowDrag</handler>
+    <data>&quot;intf_window&quot;</data>
+    <last_modification_time>Sun, 13 May 2001 17:09:36 GMT</last_modification_time>
   </signal>
   <signal>
     <name>delete_event</name>
-    <handler>on_intf_window_destroy</handler>
-    <last_modification_time>Thu, 08 Mar 2001 10:33:41 GMT</last_modification_time>
+    <handler>GtkWindowDelete</handler>
+    <data>&quot;intf_window&quot;</data>
+    <last_modification_time>Sun, 13 May 2001 17:09:48 GMT</last_modification_time>
   </signal>
   <title>VideoLAN Client</title>
   <type>GTK_WINDOW_TOPLEVEL</type>
   <position>GTK_WIN_POS_NONE</position>
   <modal>False</modal>
-  <allow_shrink>False</allow_shrink>
+  <allow_shrink>True</allow_shrink>
   <allow_grow>True</allow_grow>
-  <auto_shrink>False</auto_shrink>
+  <auto_shrink>True</auto_shrink>
 
   <widget>
     <class>GtkVBox</class>
     <child_name>GnomeDock:contents</child_name>
-    <name>vbox2</name>
+    <name>window_vbox</name>
     <homogeneous>False</homogeneous>
     <spacing>0</spacing>
 
     <widget>
       <class>GtkHandleBox</class>
-      <name>handlebox2</name>
+      <name>menubar_handlebox</name>
       <shadow_type>GTK_SHADOW_OUT</shadow_type>
       <handle_position>GTK_POS_LEFT</handle_position>
       <snap_edge>GTK_POS_TOP</snap_edge>
@@ -62,7 +64,7 @@
 
       <widget>
        <class>GtkMenuBar</class>
-       <name>menubar1</name>
+       <name>menubar</name>
        <shadow_type>GTK_SHADOW_OUT</shadow_type>
 
        <widget>
@@ -86,8 +88,9 @@
              </accelerator>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_open_activate</handler>
-               <last_modification_time>Sun, 04 Mar 2001 21:00:32 GMT</last_modification_time>
+               <handler>GtkFileOpenActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:27:36 GMT</last_modification_time>
              </signal>
              <label>_Open File...</label>
              <right_justify>False</right_justify>
              </accelerator>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_disc_activate</handler>
-               <last_modification_time>Sun, 04 Mar 2001 02:53:25 GMT</last_modification_time>
+               <handler>GtkDiscOpenActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:27:47 GMT</last_modification_time>
              </signal>
              <label>Open _Disc...</label>
              <right_justify>False</right_justify>
              </accelerator>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_network_activate</handler>
-               <last_modification_time>Mon, 12 Mar 2001 21:55:15 GMT</last_modification_time>
+               <handler>GtkNetworkOpenActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:28:06 GMT</last_modification_time>
              </signal>
              <label>_Network Stream...</label>
              <right_justify>False</right_justify>
              </accelerator>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_exit_activate</handler>
-               <last_modification_time>Wed, 21 Feb 2001 08:29:47 GMT</last_modification_time>
+               <handler>GtkExitActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:28:20 GMT</last_modification_time>
              </signal>
              <label>E_xit</label>
              <right_justify>False</right_justify>
            <class>GtkMenu</class>
            <name>menubar_view_menu</name>
 
+           <widget>
+             <class>GtkMenuItem</class>
+             <name>menubar_interface_hide</name>
+             <tooltip>Hide the main interface window</tooltip>
+             <signal>
+               <name>activate</name>
+               <handler>GtkWindowToggleActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:32:49 GMT</last_modification_time>
+             </signal>
+             <label>_Hide interface</label>
+             <right_justify>False</right_justify>
+           </widget>
+
            <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>
+               <handler>GtkFullscreenActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:29:21 GMT</last_modification_time>
              </signal>
              <label>_Fullscreen</label>
              <active>False</active>
            <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>
+             <sensitive>False</sensitive>
              <label>An_gle</label>
              <right_justify>False</right_justify>
            </widget>
              <tooltip>Open the playlist window</tooltip>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_playlist_activate</handler>
-               <last_modification_time>Wed, 21 Feb 2001 08:35:16 GMT</last_modification_time>
+               <handler>GtkPlaylistActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:29:34 GMT</last_modification_time>
              </signal>
              <label>_Playlist...</label>
              <right_justify>False</right_justify>
              <tooltip>Open the plugin manager</tooltip>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_modules_activate</handler>
-               <last_modification_time>Wed, 21 Feb 2001 08:35:16 GMT</last_modification_time>
+               <handler>GtkModulesActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:29:44 GMT</last_modification_time>
              </signal>
              <label>_Modules...</label>
              <right_justify>False</right_justify>
            <class>GtkMenu</class>
            <name>menubar_settings_menu</name>
 
-           <widget>
-             <class>GtkMenuItem</class>
-             <name>separator7</name>
-             <right_justify>False</right_justify>
-           </widget>
-
            <widget>
              <class>GtkMenuItem</class>
              <name>menubar_audio</name>
            <widget>
              <class>GtkMenuItem</class>
              <name>menubar_preferences</name>
-             <sensitive>False</sensitive>
              <tooltip>Configure the application</tooltip>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_preferences_activate</handler>
-               <last_modification_time>Wed, 21 Feb 2001 08:39:39 GMT</last_modification_time>
+               <handler>GtkPreferencesActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:30:02 GMT</last_modification_time>
              </signal>
              <label>_Preferences...</label>
              <right_justify>False</right_justify>
              <tooltip>About this application</tooltip>
              <signal>
                <name>activate</name>
-               <handler>on_menubar_about_activate</handler>
-               <last_modification_time>Wed, 21 Feb 2001 08:39:39 GMT</last_modification_time>
+               <handler>GtkAboutActivate</handler>
+               <data>&quot;intf_window&quot;</data>
+               <last_modification_time>Mon, 14 May 2001 21:30:15 GMT</last_modification_time>
              </signal>
              <label>_About...</label>
              <right_justify>False</right_justify>
 
     <widget>
       <class>GtkHandleBox</class>
-      <name>handlebox1</name>
+      <name>toolbar_handlebox</name>
       <shadow_type>GTK_SHADOW_OUT</shadow_type>
       <handle_position>GTK_POS_LEFT</handle_position>
       <snap_edge>GTK_POS_TOP</snap_edge>
          <name>toolbar_open</name>
          <tooltip>Open a File</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_open_clicked</handler>
-           <last_modification_time>Sun, 04 Mar 2001 21:01:03 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkFileOpenShow</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:10:21 GMT</last_modification_time>
          </signal>
          <label>File</label>
        </widget>
          <name>toolbar_disc</name>
          <tooltip>Open a DVD or VCD</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_disc_clicked</handler>
-           <last_modification_time>Sun, 04 Mar 2001 02:55:35 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkDiscOpenShow</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:10:30 GMT</last_modification_time>
          </signal>
          <label>Disc</label>
        </widget>
          <name>toolbar_network</name>
          <tooltip>Select a Network Stream</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_network_clicked</handler>
-           <last_modification_time>Sun, 04 Mar 2001 02:55:35 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkNetworkOpenShow</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:10:37 GMT</last_modification_time>
          </signal>
          <label>Net</label>
        </widget>
          <sensitive>False</sensitive>
          <tooltip>Go Backwards</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_back_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:28 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkControlBack</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:10:47 GMT</last_modification_time>
          </signal>
          <label>Back</label>
          <child>
          <sensitive>False</sensitive>
          <tooltip>Stop Stream</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_stop_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:33 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkControlStop</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:10:57 GMT</last_modification_time>
          </signal>
          <label>Stop</label>
        </widget>
          <name>toolbar_play</name>
          <tooltip>Play Stream</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_play_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:39 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkControlPlay</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:06 GMT</last_modification_time>
          </signal>
          <label>Play</label>
        </widget>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_pause</name>
+         <sensitive>False</sensitive>
          <tooltip>Pause Stream</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_pause_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:43 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkControlPause</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:13 GMT</last_modification_time>
          </signal>
          <label>Pause</label>
        </widget>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_slow</name>
+         <sensitive>False</sensitive>
          <tooltip>Play Slower</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_slow_clicked</handler>
-           <last_modification_time>Mon, 12 Feb 2001 07:20:42 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkControlSlow</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:20 GMT</last_modification_time>
          </signal>
          <label>Slow</label>
        </widget>
          <class>GtkButton</class>
          <child_name>Toolbar:button</child_name>
          <name>toolbar_fast</name>
+         <sensitive>False</sensitive>
          <tooltip>Play Faster</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_fast_clicked</handler>
-           <last_modification_time>Mon, 12 Feb 2001 07:20:48 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkControlFast</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:31 GMT</last_modification_time>
          </signal>
          <label>Fast</label>
        </widget>
          <name>toolbar_playlist</name>
          <tooltip>Open Playlist</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_playlist_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:48 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkPlaylistShow</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:38 GMT</last_modification_time>
          </signal>
          <label>Playlist</label>
          <child>
          <name>toolbar_prev</name>
          <tooltip>Previous File</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_prev_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:52 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkPlaylistPrev</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:45 GMT</last_modification_time>
          </signal>
          <label>Prev</label>
        </widget>
          <name>toolbar_next</name>
          <tooltip>Next File</tooltip>
          <signal>
-           <name>clicked</name>
-           <handler>on_toolbar_next_clicked</handler>
-           <last_modification_time>Sun, 11 Feb 2001 17:06:56 GMT</last_modification_time>
+           <name>button_press_event</name>
+           <handler>GtkPlaylistNext</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 15:11:58 GMT</last_modification_time>
          </signal>
          <label>Next</label>
        </widget>
     </widget>
 
     <widget>
-      <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>
+      <class>GtkFrame</class>
+      <name>slider_frame</name>
+      <visible>False</visible>
+      <label>-:--:--</label>
+      <label_xalign>0.05</label_xalign>
+      <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
       <child>
        <padding>0</padding>
        <expand>True</expand>
       </child>
 
       <widget>
-       <class>GtkFrame</class>
-       <name>slider_frame</name>
-       <visible>False</visible>
-       <label>-:--:--</label>
-       <label_xalign>0.05</label_xalign>
-       <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-
-       <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>
+       <class>GtkHScale</class>
+       <name>slider</name>
+       <width>500</width>
+       <height>15</height>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>button_release_event</name>
+         <handler>GtkSliderRelease</handler>
+         <data>&quot;intf_window&quot;</data>
+         <last_modification_time>Sun, 13 May 2001 14:40:22 GMT</last_modification_time>
+       </signal>
+       <signal>
+         <name>button_press_event</name>
+         <handler>GtkSliderPress</handler>
+         <data>&quot;intf_window&quot;</data>
+         <last_modification_time>Sun, 13 May 2001 14:40:38 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>
-      <class>Placeholder</class>
-    </widget>
-
-    <widget>
-      <class>Placeholder</class>
-    </widget>
+      <class>GtkHBox</class>
+      <name>file_box</name>
+      <width>500</width>
+      <height>24</height>
+      <homogeneous>False</homogeneous>
+      <spacing>0</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
 
-    <widget>
-      <class>Placeholder</class>
+      <widget>
+       <class>GtkLabel</class>
+       <name>label_status</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>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
     </widget>
 
     <widget>
-      <class>GtkStatusbar</class>
-      <name>intf_statusbar</name>
+      <class>GtkHBox</class>
+      <name>dvd_box</name>
+      <width>500</width>
+      <height>24</height>
+      <visible>False</visible>
+      <homogeneous>False</homogeneous>
+      <spacing>0</spacing>
       <child>
        <padding>0</padding>
-       <expand>False</expand>
-       <fill>False</fill>
+       <expand>True</expand>
+       <fill>True</fill>
       </child>
-    </widget>
-  </widget>
-</widget>
 
-<widget>
-  <class>GtkMenu</class>
-  <name>intf_popup</name>
+      <widget>
+       <class>GtkLabel</class>
+       <name>dvd_label</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>GtkMenuItem</class>
-    <name>popup_play</name>
-    <signal>
-      <name>activate</name>
-      <handler>on_popup_play_activate</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:31:57 GMT</last_modification_time>
-    </signal>
-    <label>_Play</label>
-    <right_justify>False</right_justify>
-  </widget>
+      <widget>
+       <class>GtkHBox</class>
+       <name>title_box</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>popup_pause</name>
-    <signal>
-      <name>activate</name>
-      <handler>on_popup_pause_activate</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:41:04 GMT</last_modification_time>
-    </signal>
-    <label>Pause</label>
-    <right_justify>False</right_justify>
-  </widget>
+       <widget>
+         <class>GtkLabel</class>
+         <name>title</name>
+         <label>Title:  </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>
+         </child>
+       </widget>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>popup_slow</name>
-    <signal>
-      <name>activate</name>
-      <handler>on_popup_slow_activate</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:41:04 GMT</last_modification_time>
-    </signal>
-    <label>Slow</label>
-    <right_justify>False</right_justify>
-  </widget>
+       <widget>
+         <class>GtkLabel</class>
+         <name>title_label</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>
+         </child>
+       </widget>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>popup_fast</name>
-    <signal>
-      <name>activate</name>
-      <handler>on_popup_fast_activate</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:41:04 GMT</last_modification_time>
-    </signal>
-    <label>Fast</label>
-    <right_justify>False</right_justify>
-  </widget>
+       <widget>
+         <class>GtkButton</class>
+         <name>title_prev_button</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>GtkTitlePrev</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:41:41 GMT</last_modification_time>
+         </signal>
+         <label>Prev</label>
+         <relief>GTK_RELIEF_NONE</relief>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>separator6</name>
-    <right_justify>False</right_justify>
-  </widget>
+       <widget>
+         <class>GtkButton</class>
+         <name>title_next_button</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>GtkTitleNext</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:42:00 GMT</last_modification_time>
+         </signal>
+         <label>Next</label>
+         <relief>GTK_RELIEF_NONE</relief>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+      </widget>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>main_window_toggle</name>
-    <signal>
-      <name>activate</name>
-      <handler>on_main_window_toggle</handler>
-      <last_modification_time>Thu, 08 Mar 2001 10:37:08 GMT</last_modification_time>
-    </signal>
-    <label>Toggle _Interface</label>
-    <right_justify>False</right_justify>
-  </widget>
+      <widget>
+       <class>GtkVSeparator</class>
+       <name>dvd_separator</name>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>separator5</name>
-    <right_justify>False</right_justify>
-  </widget>
+      <widget>
+       <class>GtkHBox</class>
+       <name>chapter_box</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
 
-  <widget>
-    <class>GtkMenuItem</class>
-    <name>popup_navigation</name>
+       <widget>
+         <class>GtkLabel</class>
+         <name>chapter</name>
+         <label>Chapter:  </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>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>chapter_label</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>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>chapter_prev_button</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>GtkChapterPrev</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:42:25 GMT</last_modification_time>
+         </signal>
+         <label>Prev</label>
+         <relief>GTK_RELIEF_NONE</relief>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>chapter_next_button</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>GtkChapterNext</handler>
+           <data>&quot;intf_window&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:42:42 GMT</last_modification_time>
+         </signal>
+         <label>Next</label>
+         <relief>GTK_RELIEF_NONE</relief>
+         <child>
+           <padding>5</padding>
+           <expand>False</expand>
+           <fill>False</fill>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkHBox</class>
+      <name>network_box</name>
+      <width>500</width>
+      <height>24</height>
+      <visible>False</visible>
+      <homogeneous>False</homogeneous>
+      <spacing>0</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkLabel</class>
+       <name>network_address</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>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkHBox</class>
+       <name>network_channel_box</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>False</fill>
+       </child>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>channel_label</name>
+         <label>Channel:  </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>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkSpinButton</class>
+         <name>channel_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>1</value>
+         <lower>0</lower>
+         <upper>100</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkStatusbar</class>
+      <name>intf_statusbar</name>
+      <width>500</width>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>False</fill>
+      </child>
+    </widget>
+  </widget>
+</widget>
+
+<widget>
+  <class>GtkMenu</class>
+  <name>intf_popup</name>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_play</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkPlayActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:30:37 GMT</last_modification_time>
+    </signal>
+    <label>_Play</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_pause</name>
+    <sensitive>False</sensitive>
+    <signal>
+      <name>activate</name>
+      <handler>GtkPauseActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:30:47 GMT</last_modification_time>
+    </signal>
+    <label>Pause</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_stop</name>
+    <sensitive>False</sensitive>
+    <signal>
+      <name>activate</name>
+      <handler>GtKStopActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:31:03 GMT</last_modification_time>
+    </signal>
+    <label>Stop</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_back</name>
+    <sensitive>False</sensitive>
+    <signal>
+      <name>activate</name>
+      <handler>GtkBackActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:31:13 GMT</last_modification_time>
+    </signal>
+    <label>Back</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_slow</name>
+    <sensitive>False</sensitive>
+    <signal>
+      <name>activate</name>
+      <handler>GtkSlowActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:31:22 GMT</last_modification_time>
+    </signal>
+    <label>Slow</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_fast</name>
+    <sensitive>False</sensitive>
+    <signal>
+      <name>activate</name>
+      <handler>GtkFastActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:31:33 GMT</last_modification_time>
+    </signal>
+    <label>Fast</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>separator6</name>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkCheckMenuItem</class>
+    <name>popup_interface_toggle</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkWindowToggleActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:32:18 GMT</last_modification_time>
+    </signal>
+    <label>Toggle _Interface</label>
+    <active>True</active>
+    <always_show_toggle>True</always_show_toggle>
+  </widget>
+
+  <widget>
+    <class>GtkCheckMenuItem</class>
+    <name>popup_fullscreen</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkFullscreenActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:32:30 GMT</last_modification_time>
+    </signal>
+    <label>_Fullscreen</label>
+    <active>False</active>
+    <always_show_toggle>True</always_show_toggle>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>separator5</name>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_next</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkNextActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:33:12 GMT</last_modification_time>
+    </signal>
+    <label>Next</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_prev</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkPrevActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:33:25 GMT</last_modification_time>
+    </signal>
+    <label>Prev</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_jump</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkJumpActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:33:37 GMT</last_modification_time>
+    </signal>
+    <label>_Jump...</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_navigation</name>
     <sensitive>False</sensitive>
     <label>_Navigation</label>
     <right_justify>False</right_justify>
   </widget>
 
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_angle</name>
+    <sensitive>False</sensitive>
+    <label>An_gle</label>
+    <right_justify>False</right_justify>
+  </widget>
+
   <widget>
     <class>GtkMenuItem</class>
     <name>popup_audio</name>
 
   <widget>
     <class>GtkMenuItem</class>
-    <name>popup_file</name>
+    <name>popup_open</name>
     <label>_File</label>
     <right_justify>False</right_justify>
 
     <widget>
       <class>GtkMenu</class>
-      <name>popup_file_menu</name>
+      <name>popup_open_menu</name>
 
       <widget>
        <class>GtkMenuItem</class>
-       <name>popup_open</name>
+       <name>popup_file</name>
        <tooltip>Open a File</tooltip>
        <signal>
          <name>activate</name>
-         <handler>on_popup_open_activate</handler>
-         <last_modification_time>Sun, 04 Mar 2001 21:00:48 GMT</last_modification_time>
+         <handler>GtkFileOpenActivate</handler>
+         <data>&quot;intf_popup&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:33:55 GMT</last_modification_time>
        </signal>
        <label>_Open File...</label>
        <right_justify>False</right_justify>
        <tooltip>Open a DVD or VCD</tooltip>
        <signal>
          <name>activate</name>
-         <handler>on_popup_disc_activate</handler>
-         <last_modification_time>Sun, 04 Mar 2001 03:04:11 GMT</last_modification_time>
+         <handler>GtkDiscOpenActivate</handler>
+         <data>&quot;intf_popup&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:34:09 GMT</last_modification_time>
        </signal>
        <label>Open _Disc...</label>
        <right_justify>False</right_justify>
        <tooltip>Select a Network Stream</tooltip>
        <signal>
          <name>activate</name>
-         <handler>on_popup_network_activate</handler>
-         <last_modification_time>Mon, 12 Mar 2001 21:57:31 GMT</last_modification_time>
+         <handler>GtkNetworkOpenActivate</handler>
+         <data>&quot;intf_popup&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:34:23 GMT</last_modification_time>
        </signal>
        <label>_Network Stream...</label>
        <right_justify>False</right_justify>
        <name>popup_about</name>
        <signal>
          <name>activate</name>
-         <handler>on_popup_about_activate</handler>
-         <last_modification_time>Wed, 21 Feb 2001 08:41:04 GMT</last_modification_time>
+         <handler>GtkAboutActivate</handler>
+         <data>&quot;intf_popup&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:34:54 GMT</last_modification_time>
        </signal>
        <label>_About...</label>
        <right_justify>False</right_justify>
 
   <widget>
     <class>GtkMenuItem</class>
-    <name>separator9</name>
-    <right_justify>False</right_justify>
-  </widget>
+    <name>popup_playlist</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkPlaylistActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:35:07 GMT</last_modification_time>
+    </signal>
+    <label>Playlist...</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>popup_preferences</name>
+    <signal>
+      <name>activate</name>
+      <handler>GtkPreferencesActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:35:18 GMT</last_modification_time>
+    </signal>
+    <label>_Preferences...</label>
+    <right_justify>False</right_justify>
+  </widget>
+
+  <widget>
+    <class>GtkMenuItem</class>
+    <name>separator9</name>
+    <right_justify>False</right_justify>
+  </widget>
 
   <widget>
     <class>GtkMenuItem</class>
     <name>popup_exit</name>
     <signal>
       <name>activate</name>
-      <handler>on_popup_exit_activate</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:31:57 GMT</last_modification_time>
+      <handler>GtkExitActivate</handler>
+      <data>&quot;intf_popup&quot;</data>
+      <last_modification_time>Mon, 14 May 2001 21:35:31 GMT</last_modification_time>
     </signal>
     <label>E_xit</label>
     <right_justify>False</right_justify>
        <can_focus>True</can_focus>
        <signal>
          <name>clicked</name>
-         <handler>on_about_ok_clicked</handler>
-         <last_modification_time>Wed, 21 Feb 2001 08:51:07 GMT</last_modification_time>
+         <handler>GtkAboutOk</handler>
+         <data>&quot;intf_about&quot;</data>
+         <last_modification_time>Sun, 13 May 2001 14:47:20 GMT</last_modification_time>
        </signal>
        <label>OK</label>
        <relief>GTK_RELIEF_NORMAL</relief>
@@ -945,11 +1414,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
   <class>GtkFileSelection</class>
   <name>intf_fileopen</name>
   <border_width>10</border_width>
-  <signal>
-    <name>destroy</name>
-    <handler>on_intf_fileopen_destroy</handler>
-    <last_modification_time>Wed, 21 Feb 2001 08:53:18 GMT</last_modification_time>
-  </signal>
   <title>Select File</title>
   <type>GTK_WINDOW_TOPLEVEL</type>
   <position>GTK_WIN_POS_NONE</position>
@@ -967,8 +1431,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
     <can_focus>True</can_focus>
     <signal>
       <name>clicked</name>
-      <handler>on_fileopen_ok_clicked</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:55:12 GMT</last_modification_time>
+      <handler>GtkFileOpenOk</handler>
+      <data>&quot;intf_fileopen&quot;</data>
+      <last_modification_time>Sun, 13 May 2001 14:47:46 GMT</last_modification_time>
     </signal>
     <label>OK</label>
     <relief>GTK_RELIEF_NORMAL</relief>
@@ -982,8 +1447,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
     <can_focus>True</can_focus>
     <signal>
       <name>clicked</name>
-      <handler>on_fileopen_cancel_clicked</handler>
-      <last_modification_time>Wed, 21 Feb 2001 08:55:06 GMT</last_modification_time>
+      <handler>GtkFileOpenCancel</handler>
+      <data>&quot;intf_fileopen&quot;</data>
+      <last_modification_time>Sun, 13 May 2001 14:47:55 GMT</last_modification_time>
     </signal>
     <label>Cancel</label>
     <relief>GTK_RELIEF_NORMAL</relief>
@@ -1041,8 +1507,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
          <can_focus>True</can_focus>
          <signal>
            <name>clicked</name>
-           <handler>on_disc_ok_clicked</handler>
-           <last_modification_time>Sun, 04 Mar 2001 02:45:24 GMT</last_modification_time>
+           <handler>GtkDiscOpenOk</handler>
+           <data>&quot;intf_disc&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:48:09 GMT</last_modification_time>
          </signal>
          <label>OK</label>
          <relief>GTK_RELIEF_NORMAL</relief>
@@ -1059,8 +1526,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
          <can_focus>True</can_focus>
          <signal>
            <name>clicked</name>
-           <handler>on_disc_cancel_clicked</handler>
-           <last_modification_time>Sun, 04 Mar 2001 02:45:45 GMT</last_modification_time>
+           <handler>GtkDiscOpenCancel</handler>
+           <data>&quot;intf_disc&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:48:17 GMT</last_modification_time>
          </signal>
          <label>Cancel</label>
          <relief>GTK_RELIEF_NORMAL</relief>
@@ -1120,8 +1588,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
              <can_focus>True</can_focus>
              <signal>
                <name>toggled</name>
-               <handler>on_disc_dvd_toggled</handler>
-               <last_modification_time>Sun, 04 Mar 2001 02:50:56 GMT</last_modification_time>
+               <handler>GtkDiscOpenDvd</handler>
+               <data>&quot;intf_disc&quot;</data>
+               <last_modification_time>Sun, 13 May 2001 14:48:29 GMT</last_modification_time>
              </signal>
              <label>DVD</label>
              <active>False</active>
@@ -1141,8 +1610,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
              <can_focus>True</can_focus>
              <signal>
                <name>toggled</name>
-               <handler>on_disc_vcd_toggled</handler>
-               <last_modification_time>Sun, 04 Mar 2001 02:51:00 GMT</last_modification_time>
+               <handler>GtkDiscOpenVcd</handler>
+               <data>&quot;intf_disc&quot;</data>
+               <last_modification_time>Sun, 13 May 2001 14:48:39 GMT</last_modification_time>
              </signal>
              <label>VCD</label>
              <active>False</active>
@@ -1346,109 +1816,96 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
 </widget>
 
 <widget>
-  <class>GtkWindow</class>
-  <name>intf_playlist</name>
-  <signal>
-    <name>delete_event</name>
-    <handler>on_intf_playlist_destroy_event</handler>
-    <last_modification_time>Thu, 08 Mar 2001 10:16:44 GMT</last_modification_time>
-  </signal>
-  <title>Playlist</title>
+  <class>GtkDialog</class>
+  <name>intf_network</name>
+  <title>Open Network</title>
   <type>GTK_WINDOW_TOPLEVEL</type>
   <position>GTK_WIN_POS_NONE</position>
-  <modal>False</modal>
-  <default_width>386</default_width>
-  <default_height>200</default_height>
+  <modal>True</modal>
   <allow_shrink>False</allow_shrink>
-  <allow_grow>True</allow_grow>
+  <allow_grow>False</allow_grow>
   <auto_shrink>False</auto_shrink>
 
   <widget>
     <class>GtkVBox</class>
-    <name>vbox6</name>
+    <child_name>Dialog:vbox</child_name>
+    <name>vbox7</name>
+    <border_width>5</border_width>
     <homogeneous>False</homogeneous>
     <spacing>0</spacing>
 
     <widget>
-      <class>GtkMenuBar</class>
-      <name>menubar2</name>
-      <shadow_type>GTK_SHADOW_OUT</shadow_type>
+      <class>GtkHBox</class>
+      <child_name>Dialog:action_area</child_name>
+      <name>hbox4</name>
+      <border_width>5</border_width>
+      <homogeneous>True</homogeneous>
+      <spacing>5</spacing>
       <child>
        <padding>0</padding>
        <expand>False</expand>
-       <fill>False</fill>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
       </child>
 
       <widget>
-       <class>GtkMenuItem</class>
-       <name>add1</name>
-       <label>Add</label>
-       <right_justify>False</right_justify>
-      </widget>
-
-      <widget>
-       <class>GtkMenuItem</class>
-       <name>delete1</name>
-       <label>Delete</label>
-       <right_justify>False</right_justify>
+       <class>GtkHBox</class>
+       <name>hbox5</name>
+       <homogeneous>True</homogeneous>
+       <spacing>5</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>False</expand>
+         <fill>True</fill>
+         <pack>GTK_PACK_END</pack>
+       </child>
 
        <widget>
-         <class>GtkMenu</class>
-         <name>delete1_menu</name>
-
-         <widget>
-           <class>GtkMenuItem</class>
-           <name>crop1</name>
-           <signal>
-             <name>activate</name>
-             <handler>on_crop_activate</handler>
-             <last_modification_time>Thu, 08 Mar 2001 15:12:17 GMT</last_modification_time>
-           </signal>
-           <label>_crop</label>
-           <right_justify>False</right_justify>
-         </widget>
-
-         <widget>
-           <class>GtkMenuItem</class>
-           <name>invert1</name>
-           <signal>
-             <name>activate</name>
-             <handler>on_invertselection_clicked</handler>
-             <last_modification_time>Thu, 08 Mar 2001 15:12:17 GMT</last_modification_time>
-           </signal>
-           <label>_invert</label>
-           <right_justify>False</right_justify>
-         </widget>
-
-         <widget>
-           <class>GtkMenuItem</class>
-           <name>selection</name>
-           <signal>
-             <name>activate</name>
-             <handler>on_delete_clicked</handler>
-             <last_modification_time>Thu, 08 Mar 2001 11:12:03 GMT</last_modification_time>
-           </signal>
-           <label>_selection</label>
-           <right_justify>False</right_justify>
-         </widget>
+         <class>GtkButton</class>
+         <name>network_ok</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>GtkNetworkOpenOk</handler>
+           <data>&quot;intf_network&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:49:35 GMT</last_modification_time>
+         </signal>
+         <label>OK</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+         </child>
        </widget>
-      </widget>
 
-      <widget>
-       <class>GtkMenuItem</class>
-       <name>selection1</name>
-       <label>Selection</label>
-       <right_justify>False</right_justify>
+       <widget>
+         <class>GtkButton</class>
+         <name>network_cancel</name>
+         <can_focus>True</can_focus>
+         <signal>
+           <name>clicked</name>
+           <handler>GtkNetworkOpenCancel</handler>
+           <data>&quot;intf_network&quot;</data>
+           <last_modification_time>Sun, 13 May 2001 14:49:44 GMT</last_modification_time>
+         </signal>
+         <label>Cancel</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+         </child>
+       </widget>
       </widget>
     </widget>
 
     <widget>
-      <class>GtkScrolledWindow</class>
-      <name>scrolledwindow1</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>
+      <class>GtkVBox</class>
+      <name>vbox8</name>
+      <border_width>5</border_width>
+      <homogeneous>False</homogeneous>
+      <spacing>5</spacing>
       <child>
        <padding>0</padding>
        <expand>True</expand>
@@ -1456,295 +1913,2582 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
       </child>
 
       <widget>
-       <class>GtkCList</class>
-       <name>playlist_clist</name>
-       <border_width>1</border_width>
-       <can_focus>True</can_focus>
-       <signal>
-         <name>event</name>
-         <handler>on_playlist_clist_event</handler>
-         <last_modification_time>Thu, 08 Mar 2001 22:18:03 GMT</last_modification_time>
-       </signal>
-       <signal>
-         <name>drag_data_received</name>
-         <handler>on_intf_playlist_drag_data_received</handler>
-         <last_modification_time>Thu, 08 Mar 2001 12:00:13 GMT</last_modification_time>
-       </signal>
-       <signal>
-         <name>drag_motion</name>
-         <handler>on_playlist_clist_drag_motion</handler>
-         <last_modification_time>Fri, 09 Mar 2001 18:32:47 GMT</last_modification_time>
-       </signal>
-       <columns>2</columns>
-       <column_widths>257,80</column_widths>
-       <selection_mode>GTK_SELECTION_EXTENDED</selection_mode>
-       <show_titles>True</show_titles>
-       <shadow_type>GTK_SHADOW_OUT</shadow_type>
+       <class>GtkHBox</class>
+       <name>hbox6</name>
+       <homogeneous>False</homogeneous>
+       <spacing>5</spacing>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
 
        <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label22</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>
+         <class>GtkFrame</class>
+         <name>frame4</name>
+         <label>Protocol</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <child>
+           <padding>0</padding>
+           <expand>True</expand>
+           <fill>True</fill>
+         </child>
 
-       <widget>
-         <class>GtkLabel</class>
-         <child_name>CList:title</child_name>
-         <name>label23</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>GtkVBox</class>
+           <name>vbox9</name>
+           <homogeneous>False</homogeneous>
+           <spacing>0</spacing>
 
-<widget>
-  <class>GtkDialog</class>
-  <name>intf_network</name>
-  <signal>
-    <name>destroy</name>
-    <handler>on_intf_network_destroy</handler>
-    <last_modification_time>Mon, 12 Mar 2001 21:45:22 GMT</last_modification_time>
-  </signal>
-  <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>
+           <widget>
+             <class>GtkRadioButton</class>
+             <name>network_ts</name>
+             <can_focus>True</can_focus>
+             <label>TS</label>
+             <active>False</active>
+             <draw_indicator>True</draw_indicator>
+             <group>network</group>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
+           </widget>
 
-  <widget>
-    <class>GtkVBox</class>
-    <child_name>Dialog:vbox</child_name>
-    <name>vbox7</name>
-    <border_width>5</border_width>
-    <homogeneous>False</homogeneous>
-    <spacing>0</spacing>
+           <widget>
+             <class>GtkRadioButton</class>
+             <name>network_rtp</name>
+             <sensitive>False</sensitive>
+             <can_focus>True</can_focus>
+             <label>RTP</label>
+             <active>False</active>
+             <draw_indicator>True</draw_indicator>
+             <group>network</group>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
+           </widget>
+
+           <widget>
+             <class>GtkRadioButton</class>
+             <name>network_http</name>
+             <sensitive>False</sensitive>
+             <can_focus>True</can_focus>
+             <label>HTTP</label>
+             <active>False</active>
+             <draw_indicator>True</draw_indicator>
+             <group>network</group>
+             <child>
+               <padding>0</padding>
+               <expand>False</expand>
+               <fill>False</fill>
+             </child>
+           </widget>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkFrame</class>
+         <name>frame5</name>
+         <label>Server</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <child>
+           <padding>0</padding>
+           <expand>True</expand>
+           <fill>True</fill>
+         </child>
+
+         <widget>
+           <class>GtkTable</class>
+           <name>table2</name>
+           <border_width>5</border_width>
+           <rows>3</rows>
+           <columns>2</columns>
+           <homogeneous>False</homogeneous>
+           <row_spacing>5</row_spacing>
+           <column_spacing>5</column_spacing>
+
+           <widget>
+             <class>GtkSpinButton</class>
+             <name>network_port</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>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>False</yfill>
+             </child>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <name>label24</name>
+             <label>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>False</xexpand>
+               <yexpand>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>False</yfill>
+             </child>
+           </widget>
+
+           <widget>
+             <class>GtkLabel</class>
+             <name>label25</name>
+             <label>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>0</top_attach>
+               <bottom_attach>1</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>GtkCheckButton</class>
+             <name>broadcast_check</name>
+             <can_focus>True</can_focus>
+             <signal>
+               <name>toggled</name>
+               <handler>GtkNetworkOpenBroadcast</handler>
+               <data>&quot;intf_network&quot;</data>
+               <last_modification_time>Sun, 13 May 2001 14:52:49 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>GtkCombo</class>
+             <name>network_broadcast_combo</name>
+             <sensitive>False</sensitive>
+             <value_in_list>False</value_in_list>
+             <ok_if_empty>True</ok_if_empty>
+             <case_sensitive>False</case_sensitive>
+             <use_arrows>True</use_arrows>
+             <use_arrows_always>False</use_arrows_always>
+             <items></items>
+             <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>GtkCombo: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>GtkCombo</class>
+             <name>network_server_combo</name>
+             <value_in_list>False</value_in_list>
+             <ok_if_empty>True</ok_if_empty>
+             <case_sensitive>False</case_sensitive>
+             <use_arrows>True</use_arrows>
+             <use_arrows_always>False</use_arrows_always>
+             <items>vls
+</items>
+             <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>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>False</yfill>
+             </child>
+
+             <widget>
+               <class>GtkEntry</class>
+               <child_name>GtkCombo: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>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
+<widget>
+  <class>GtkDialog</class>
+  <name>intf_jump</name>
+  <title>Jump</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>True</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>Dialog:vbox</child_name>
+    <name>dialog-vbox3</name>
+    <homogeneous>False</homogeneous>
+    <spacing>0</spacing>
+
+    <widget>
+      <class>GtkHBox</class>
+      <child_name>Dialog:action_area</child_name>
+      <name>dialog-action_area2</name>
+      <border_width>10</border_width>
+      <homogeneous>True</homogeneous>
+      <spacing>5</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>jump_ok_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkJumpOk</handler>
+         <data>&quot;intf_jump&quot;</data>
+         <last_modification_time>Sun, 13 May 2001 14:53:19 GMT</last_modification_time>
+       </signal>
+       <label>Ok</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>jump_cancel_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkJumpCancel</handler>
+         <data>&quot;intf_jump&quot;</data>
+         <last_modification_time>Sun, 13 May 2001 14:53:43 GMT</last_modification_time>
+       </signal>
+       <label>Cancel</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkFrame</class>
+      <name>jump_frame</name>
+      <border_width>5</border_width>
+      <label>Go to:</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>GtkHBox</class>
+       <name>hbox13</name>
+       <homogeneous>False</homogeneous>
+       <spacing>0</spacing>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>jump_seconde_label</name>
+         <label>s.</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_seconde_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>60</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>jump_minute_label</name>
+         <label>m:</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>60</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>jump_hour_label</name>
+         <label>h:</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>12</upper>
+         <step>1</step>
+         <page>10</page>
+         <page_size>10</page_size>
+         <child>
+           <padding>0</padding>
+           <expand>False</expand>
+           <fill>True</fill>
+           <pack>GTK_PACK_END</pack>
+         </child>
+       </widget>
+      </widget>
+    </widget>
+  </widget>
+</widget>
+
+<widget>
+  <class>GtkDialog</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>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>Dialog:vbox</child_name>
+    <name>dialog-vbox4</name>
+    <homogeneous>False</homogeneous>
+    <spacing>5</spacing>
+
+    <widget>
+      <class>GtkHBox</class>
+      <child_name>Dialog:action_area</child_name>
+      <name>dialog-action_area3</name>
+      <border_width>10</border_width>
+      <homogeneous>True</homogeneous>
+      <spacing>5</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>playlist_ok_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkPlaylistOk</handler>
+         <data>&quot;intf_playlist&quot;</data>
+         <last_modification_time>Sat, 12 May 2001 21:16:09 GMT</last_modification_time>
+       </signal>
+       <label>Ok</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>playlist_cancel_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkPlaylistCancel</handler>
+         <data>&quot;intf_playlist&quot;</data>
+         <last_modification_time>Sat, 12 May 2001 21:16:20 GMT</last_modification_time>
+       </signal>
+       <label>Cancel</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </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>GtkDiscOpenActivate</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Mon, 14 May 2001 21:59:32 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>GtkFileOpenActivate</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Mon, 14 May 2001 21:59:48 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>GtkNetworkOpenActivate</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Mon, 14 May 2001 22:00:03 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>GtkPlaylistAddUrl</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Mon, 14 May 2001 22:00:22 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>GtkPlaylistDeleteAll</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Sat, 12 May 2001 21:13:11 GMT</last_modification_time>
+           </signal>
+           <label>All</label>
+           <right_justify>False</right_justify>
+         </widget>
+
+         <widget>
+           <class>GtkMenuItem</class>
+           <name>playlist_delete_selected</name>
+           <signal>
+             <name>activate</name>
+             <handler>GtkPlaylistDeleteSelected</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Sat, 12 May 2001 21:12:58 GMT</last_modification_time>
+           </signal>
+           <label>Selected</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>GtkPlaylistCrop</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Sat, 12 May 2001 21:13:47 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>GtkPlaylistInvert</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Sat, 12 May 2001 21:13:55 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>GtkPlaylistSelect</handler>
+             <data>&quot;intf_playlist&quot;</data>
+             <last_modification_time>Sat, 12 May 2001 21:14:04 GMT</last_modification_time>
+           </signal>
+           <label>_Select</label>
+           <right_justify>False</right_justify>
+         </widget>
+       </widget>
+      </widget>
+    </widget>
+
+    <widget>
+      <class>GtkScrolledWindow</class>
+      <name>scrolledwindow1</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>GtkCList</class>
+       <name>playlist_clist</name>
+       <border_width>5</border_width>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>event</name>
+         <handler>GtkPlaylistEvent</handler>
+         <data>&quot;intf_playlist&quot;</data>
+         <last_modification_time>Sat, 12 May 2001 21:25:20 GMT</last_modification_time>
+       </signal>
+       <signal>
+         <name>drag_data_received</name>
+         <handler>GtkPlaylistDragData</handler>
+         <data>&quot;intf_playlist&quot;</data>
+         <last_modification_time>Sat, 12 May 2001 21:25:53 GMT</last_modification_time>
+       </signal>
+       <signal>
+         <name>drag_motion</name>
+         <handler>GtkPlaylistDragMotion</handler>
+         <data>&quot;intf_playlist&quot;</data>
+         <last_modification_time>Sat, 12 May 2001 21:26:23 GMT</last_modification_time>
+       </signal>
+       <columns>2</columns>
+       <column_widths>257,80</column_widths>
+       <selection_mode>GTK_SELECTION_EXTENDED</selection_mode>
+       <show_titles>True</show_titles>
+       <shadow_type>GTK_SHADOW_OUT</shadow_type>
+
+       <widget>
+         <class>GtkLabel</class>
+         <child_name>CList:title</child_name>
+         <name>label22</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>GtkLabel</class>
+         <child_name>CList:title</child_name>
+         <name>label23</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>GtkDialog</class>
+  <name>intf_preferences</name>
+  <title>Preferences</title>
+  <type>GTK_WINDOW_TOPLEVEL</type>
+  <position>GTK_WIN_POS_NONE</position>
+  <modal>False</modal>
+  <allow_shrink>True</allow_shrink>
+  <allow_grow>True</allow_grow>
+  <auto_shrink>False</auto_shrink>
+
+  <widget>
+    <class>GtkVBox</class>
+    <child_name>Dialog:vbox</child_name>
+    <name>dialog-vbox5</name>
+    <border_width>5</border_width>
+    <homogeneous>False</homogeneous>
+    <spacing>5</spacing>
+
+    <widget>
+      <class>GtkHBox</class>
+      <child_name>Dialog:action_area</child_name>
+      <name>dialog-action_area4</name>
+      <border_width>10</border_width>
+      <homogeneous>True</homogeneous>
+      <spacing>5</spacing>
+      <child>
+       <padding>0</padding>
+       <expand>False</expand>
+       <fill>True</fill>
+       <pack>GTK_PACK_END</pack>
+      </child>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>preferences_ok_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkPreferencesOk</handler>
+         <data>&quot;intf_preferences&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:21:39 GMT</last_modification_time>
+       </signal>
+       <label>Ok</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>preferences_apply_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkPreferencesApply</handler>
+         <data>&quot;intf_preferences&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:22:10 GMT</last_modification_time>
+       </signal>
+       <label>Apply</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+
+      <widget>
+       <class>GtkButton</class>
+       <name>preferences_cancel_button</name>
+       <can_focus>True</can_focus>
+       <signal>
+         <name>clicked</name>
+         <handler>GtkPreferencesCancel</handler>
+         <data>&quot;intf_preferences&quot;</data>
+         <last_modification_time>Mon, 14 May 2001 21:22:46 GMT</last_modification_time>
+       </signal>
+       <label>Cancel</label>
+       <relief>GTK_RELIEF_NORMAL</relief>
+       <child>
+         <padding>0</padding>
+         <expand>True</expand>
+         <fill>True</fill>
+       </child>
+      </widget>
+    </widget>
+
+    <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>
+      <child>
+       <padding>0</padding>
+       <expand>True</expand>
+       <fill>True</fill>
+      </child>
+
+      <widget>
+       <class>GtkTable</class>
+       <name>preferences_file_table</name>
+       <border_width>5</border_width>
+       <rows>1</rows>
+       <columns>3</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
+
+       <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>False</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>False</yfill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_file_path_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items></items>
+         <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>GtkCombo:entry</child_name>
+           <name>preferences_file_path_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>GtkButton</class>
+         <name>preferences_file_path_button</name>
+         <can_focus>True</can_focus>
+         <label>Browse</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <left_attach>2</left_attach>
+           <right_attach>3</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>
+      </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>
+       <border_width>5</border_width>
+       <rows>2</rows>
+       <columns>3</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
+
+       <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>False</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>False</yfill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkLabel</class>
+         <name>preference_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>False</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</xfill>
+           <yfill>False</yfill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_disc_dvd_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>/dev/dvd
+</items>
+         <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>GtkCombo: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>/dev/dvd</text>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_disc_vcd_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>/dev/cdrom
+</items>
+         <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>GtkCombo: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>/dev/cdrom</text>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>preferences_disc_dvd_browse_button</name>
+         <can_focus>True</can_focus>
+         <label>Browse</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <left_attach>2</left_attach>
+           <right_attach>3</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>
+
+       <widget>
+         <class>GtkButton</class>
+         <name>preferences_disc_vcd_browse_button</name>
+         <can_focus>True</can_focus>
+         <label>Browse</label>
+         <relief>GTK_RELIEF_NORMAL</relief>
+         <child>
+           <left_attach>2</left_attach>
+           <right_attach>3</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>
+
+      <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>
+       <border_width>5</border_width>
+       <rows>7</rows>
+       <columns>2</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_network_server_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items></items>
+         <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>GtkCombo: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>GtkCombo</class>
+         <name>preferences_network_broadcast_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items></items>
+         <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>GtkCombo: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>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>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>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>GtkCheckButton</class>
+         <name>preferences_network_broadcast_checkbutton</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>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>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>True</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</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>True</xexpand>
+           <yexpand>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</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>True</xexpand>
+           <yexpand>True</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_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_interface_table</name>
+       <border_width>5</border_width>
+       <rows>1</rows>
+       <columns>2</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_interface_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>Gtk+
+Gnome
+</items>
+         <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>GtkCombo:entry</child_name>
+           <name>preferences_interface_entry</name>
+           <can_focus>True</can_focus>
+           <editable>True</editable>
+           <text_visible>True</text_visible>
+           <text_max_length>0</text_max_length>
+           <text>Gtk+</text>
+         </widget>
+       </widget>
+
+       <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>False</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_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>
+       <border_width>5</border_width>
+       <rows>7</rows>
+       <columns>2</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_video_output_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>sdl
+xvideo
+x11
+</items>
+         <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>GtkCombo: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>sdl</text>
+         </widget>
+       </widget>
+
+       <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_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>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>1200</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_height_label</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>GtkOptionMenu</class>
+         <name>preferences_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_depth_label</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>GtkLabel</class>
+         <name>preferences_video_fullscreen_depth_label</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>False</yfill>
+         </child>
+       </widget>
+
+       <widget>
+         <class>GtkSpinButton</class>
+         <name>preferences_video_gamma_spinbutton</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>10</upper>
+         <step>0.1</step>
+         <page>1</page>
+         <page_size>1</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>True</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</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>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>
+
+      <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>preferences_audio_table</name>
+       <border_width>5</border_width>
+       <rows>6</rows>
+       <columns>2</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
+
+       <widget>
+         <class>GtkOptionMenu</class>
+         <name>preferences_audio_quality_optionmenu</name>
+         <can_focus>True</can_focus>
+         <items>8 bits
+16 bits
+</items>
+         <initial_choice>1</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>False</xexpand>
+           <yexpand>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>True</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
+</items>
+         <initial_choice>0</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>
+         <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>4</top_attach>
+           <bottom_attach>5</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>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>GtkLabel</class>
+         <name>preferences_audio_device_label</name>
+         <label>Default device:</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>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>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>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>GtkLabel</class>
+         <name>preferences_audio_channel_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>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>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>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>GtkCombo</class>
+         <name>preferences_audio_output_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>dsp
+alsa
+</items>
+         <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>GtkCombo: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>dsp</text>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkCombo</class>
+         <name>preferences_audio_device_combo</name>
+         <value_in_list>False</value_in_list>
+         <ok_if_empty>True</ok_if_empty>
+         <case_sensitive>False</case_sensitive>
+         <use_arrows>True</use_arrows>
+         <use_arrows_always>False</use_arrows_always>
+         <items>/dev/dsp
+</items>
+         <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>GtkCombo:entry</child_name>
+           <name>preferences_audio_device_entry</name>
+           <can_focus>True</can_focus>
+           <editable>True</editable>
+           <text_visible>True</text_visible>
+           <text_max_length>0</text_max_length>
+           <text>/dev/dsp</text>
+         </widget>
+       </widget>
+      </widget>
 
-    <widget>
-      <class>GtkHBox</class>
-      <child_name>Dialog:action_area</child_name>
-      <name>hbox4</name>
-      <border_width>5</border_width>
-      <homogeneous>True</homogeneous>
-      <spacing>5</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>False</expand>
-       <fill>True</fill>
-       <pack>GTK_PACK_END</pack>
-      </child>
+      <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>GtkHBox</class>
-       <name>hbox5</name>
-       <homogeneous>True</homogeneous>
-       <spacing>5</spacing>
-       <child>
-         <padding>0</padding>
-         <expand>False</expand>
-         <fill>True</fill>
-         <pack>GTK_PACK_END</pack>
-       </child>
+       <class>GtkTable</class>
+       <name>preferences_playlist_table</name>
+       <border_width>5</border_width>
+       <rows>3</rows>
+       <columns>1</columns>
+       <homogeneous>False</homogeneous>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
 
        <widget>
-         <class>GtkButton</class>
-         <name>network_ok</name>
+         <class>GtkCheckButton</class>
+         <name>preferences_playlist_startup_checkbutton</name>
          <can_focus>True</can_focus>
-         <signal>
-           <name>clicked</name>
-           <handler>on_network_ok_clicked</handler>
-           <last_modification_time>Mon, 12 Mar 2001 21:45:01 GMT</last_modification_time>
-         </signal>
-         <label>OK</label>
-         <relief>GTK_RELIEF_NORMAL</relief>
+         <label>Launch on startup</label>
+         <active>False</active>
+         <draw_indicator>True</draw_indicator>
          <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>True</fill>
+           <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>GtkButton</class>
-         <name>network_cancel</name>
+         <class>GtkCheckButton</class>
+         <name>preferences_playlist_enqueue_checkbutton</name>
          <can_focus>True</can_focus>
-         <signal>
-           <name>clicked</name>
-           <handler>on_network_cancel_clicked</handler>
-           <last_modification_time>Mon, 12 Mar 2001 21:44:52 GMT</last_modification_time>
-         </signal>
-         <label>Cancel</label>
-         <relief>GTK_RELIEF_NORMAL</relief>
+         <label>Enqueue as default</label>
+         <active>False</active>
+         <draw_indicator>True</draw_indicator>
          <child>
-           <padding>0</padding>
-           <expand>False</expand>
-           <fill>True</fill>
+           <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>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>
-    </widget>
 
-    <widget>
-      <class>GtkVBox</class>
-      <name>vbox8</name>
-      <border_width>5</border_width>
-      <homogeneous>False</homogeneous>
-      <spacing>5</spacing>
-      <child>
-       <padding>0</padding>
-       <expand>True</expand>
-       <fill>True</fill>
-      </child>
+      <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>GtkHBox</class>
-       <name>hbox6</name>
+       <class>GtkTable</class>
+       <name>preferences_misc_table</name>
+       <border_width>5</border_width>
+       <rows>1</rows>
+       <columns>2</columns>
        <homogeneous>False</homogeneous>
-       <spacing>5</spacing>
-       <child>
-         <padding>0</padding>
-         <expand>True</expand>
-         <fill>True</fill>
-       </child>
+       <row_spacing>5</row_spacing>
+       <column_spacing>5</column_spacing>
 
        <widget>
          <class>GtkFrame</class>
-         <name>frame4</name>
-         <label>Protocol</label>
+         <name>preferences_misc_associated_frame</name>
+         <label>Types associated with vlc</label>
          <label_xalign>0</label_xalign>
          <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
          <child>
-           <padding>0</padding>
-           <expand>True</expand>
-           <fill>True</fill>
+           <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>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>False</xfill>
+           <yfill>True</yfill>
          </child>
 
          <widget>
-           <class>GtkVBox</class>
-           <name>vbox9</name>
+           <class>GtkTable</class>
+           <name>preferences_misc_associated_table</name>
+           <rows>4</rows>
+           <columns>1</columns>
            <homogeneous>False</homogeneous>
-           <spacing>0</spacing>
+           <row_spacing>0</row_spacing>
+           <column_spacing>0</column_spacing>
 
            <widget>
-             <class>GtkRadioButton</class>
-             <name>network_ts</name>
+             <class>GtkCheckButton</class>
+             <name>preferences_misc_associated_checkbutton</name>
              <can_focus>True</can_focus>
-             <signal>
-               <name>toggled</name>
-               <handler>on_disc_dvd_toggled</handler>
-               <last_modification_time>Sun, 04 Mar 2001 02:50:56 GMT</last_modification_time>
-             </signal>
-             <label>TS</label>
+             <label>mpeg</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
-             <group>network</group>
              <child>
-               <padding>0</padding>
-               <expand>False</expand>
-               <fill>False</fill>
+               <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>False</xexpand>
+               <yexpand>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>False</yfill>
              </child>
            </widget>
 
            <widget>
-             <class>GtkRadioButton</class>
-             <name>network_rtp</name>
-             <sensitive>False</sensitive>
+             <class>GtkCheckButton</class>
+             <name>preferences_misc_mp2_checkbutton</name>
              <can_focus>True</can_focus>
-             <signal>
-               <name>toggled</name>
-               <handler>on_disc_vcd_toggled</handler>
-               <last_modification_time>Sun, 04 Mar 2001 02:51:00 GMT</last_modification_time>
-             </signal>
-             <label>RTP</label>
+             <label>mp2</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
-             <group>network</group>
              <child>
-               <padding>0</padding>
-               <expand>False</expand>
-               <fill>False</fill>
+               <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>False</xexpand>
+               <yexpand>False</yexpand>
+               <xshrink>False</xshrink>
+               <yshrink>False</yshrink>
+               <xfill>True</xfill>
+               <yfill>False</yfill>
              </child>
            </widget>
 
            <widget>
-             <class>GtkRadioButton</class>
-             <name>network_http</name>
-             <sensitive>False</sensitive>
+             <class>GtkCheckButton</class>
+             <name>preferences_misc_vob_checkbutton</name>
              <can_focus>True</can_focus>
-             <label>HTTP</label>
+             <label>vob</label>
              <active>False</active>
              <draw_indicator>True</draw_indicator>
-             <group>network</group>
-             <child>
-               <padding>0</padding>
-               <expand>False</expand>
-               <fill>False</fill>
-             </child>
-           </widget>
-         </widget>
-       </widget>
-
-       <widget>
-         <class>GtkFrame</class>
-         <name>frame5</name>
-         <label>Server</label>
-         <label_xalign>0</label_xalign>
-         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
-         <child>
-           <padding>0</padding>
-           <expand>True</expand>
-           <fill>True</fill>
-         </child>
-
-         <widget>
-           <class>GtkTable</class>
-           <name>table2</name>
-           <border_width>5</border_width>
-           <rows>2</rows>
-           <columns>2</columns>
-           <homogeneous>False</homogeneous>
-           <row_spacing>5</row_spacing>
-           <column_spacing>5</column_spacing>
-
-           <widget>
-             <class>GtkSpinButton</class>
-             <name>network_port</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>
+               <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>
+               <xexpand>False</xexpand>
                <yexpand>False</yexpand>
                <xshrink>False</xshrink>
                <yshrink>False</yshrink>
@@ -1754,20 +4498,17 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
            </widget>
 
            <widget>
-             <class>GtkLabel</class>
-             <name>label24</name>
-             <label>Port</label>
-             <justify>GTK_JUSTIFY_CENTER</justify>
-             <wrap>False</wrap>
-             <xalign>0</xalign>
-             <yalign>0.5</yalign>
-             <xpad>0</xpad>
-             <ypad>0</ypad>
+             <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>
                <left_attach>0</left_attach>
                <right_attach>1</right_attach>
-               <top_attach>1</top_attach>
-               <bottom_attach>2</bottom_attach>
+               <top_attach>3</top_attach>
+               <bottom_attach>4</bottom_attach>
                <xpad>0</xpad>
                <ypad>0</ypad>
                <xexpand>False</xexpand>
@@ -1778,11 +4519,43 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
                <yfill>False</yfill>
              </child>
            </widget>
+         </widget>
+       </widget>
+
+       <widget>
+         <class>GtkFrame</class>
+         <name>preferences_misc_message_frame</name>
+         <label>Messages</label>
+         <label_xalign>0</label_xalign>
+         <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+         <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>False</yexpand>
+           <xshrink>False</xshrink>
+           <yshrink>False</yshrink>
+           <xfill>False</xfill>
+           <yfill>True</yfill>
+         </child>
+
+         <widget>
+           <class>GtkTable</class>
+           <name>preferences_misc_messages_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>label25</name>
-             <label>Address</label>
+             <name>preferences_misc_messages_label</name>
+             <label>Warning level: </label>
              <justify>GTK_JUSTIFY_CENTER</justify>
              <wrap>False</wrap>
              <xalign>0</xalign>
@@ -1806,13 +4579,21 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
            </widget>
 
            <widget>
-             <class>GtkEntry</class>
-             <name>network_server</name>
+             <class>GtkSpinButton</class>
+             <name>preferences_misc_messages_spinbutton</name>
              <can_focus>True</can_focus>
-             <editable>True</editable>
-             <text_visible>True</text_visible>
-             <text_max_length>0</text_max_length>
-             <text>vls</text>
+             <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>
                <left_attach>1</left_attach>
                <right_attach>2</right_attach>
@@ -1824,13 +4605,26 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;</label>
                <yexpand>False</yexpand>
                <xshrink>False</xshrink>
                <yshrink>False</yshrink>
-               <xfill>True</xfill>
+               <xfill>False</xfill>
                <yfill>False</yfill>
              </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>
index 364785fa1b7bfee27a0ae83c9086874425d56de1..ad34512fae85924a13ab25a7e4e7a728cb5fc32d 100644 (file)
@@ -2,7 +2,7 @@
  * intf_gtk.h: private Gtk+ interface description
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gtk.h,v 1.3 2001/05/06 18:32:30 stef Exp $
+ * $Id: intf_gtk.h,v 1.4 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
  *****************************************************************************/
 #define GTK_MENU_LABEL_SIZE 64
 
+/*****************************************************************************
+ * Convert user_data structures to title and chapter information
+ *****************************************************************************/
+#define DATA2TITLE( user_data )    ( (gint)(user_data) >> 16 )
+#define DATA2CHAPTER( user_data )  ( (gint)(user_data) & 0xffff )
+#define POS2DATA( title, chapter ) ( ((title) << 16) | ((chapter) & 0xffff) )
+
 /*****************************************************************************
  * Useful inline function
  ****************************************************************************/
@@ -53,10 +60,13 @@ typedef struct intf_sys_s
     boolean_t           b_menus_update;              /* menus have changed ? */
     boolean_t           b_slider_free;                      /* slider status */
 
-    int                 i_list_timeout;
-
-    /* Playlist selected item */
-    int                 i_playing;
+    /* menus handlers */
+    boolean_t           b_title_update;  /* do we need to update title menus */
+    boolean_t           b_chapter_update;            /* do we need to update
+                                                               chapter menus */
+    boolean_t           b_angle_update;  /* do we need to update angle menus */
+    boolean_t           b_audio_update;  /* do we need to update audio menus */
+    boolean_t           b_spu_update;      /* do we need to update spu menus */
 
     /* windows and widgets */
     GtkWidget *         p_window;                             /* main window */
@@ -67,15 +77,43 @@ 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 */
 
+    /* Playlist management */
+    int                 i_playing;                 /* playlist selected item */
+
+    /* The window labels for DVD mode */
+    GtkLabel *          p_label_title;
+    GtkLabel *          p_label_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;
 
+/****************************************************************************
+ * Prototypes
+ ****************************************************************************/
+
+/*
+ * from gtk_menu.c
+ */
+gint GtkSetupMenu( intf_thread_t * );
+
+/*
+ * from gtk_playlist.c
+ */
+void    GtkDropDataReceived ( intf_thread_t *, GtkSelectionData *,
+                                guint, int );
+int     GtkAppendList       ( playlist_t *, int, GList * );
+void    GtkRebuildCList     ( GtkCList *, playlist_t * );
+void    GtkPlayListManage   ( intf_thread_t * );
+
index f2d03761a85994454980f1cef3ac6386f45630f3..da45b8feab841e8b99146345130a40b10bb30b14 100644 (file)
@@ -2,7 +2,7 @@
  * aout_spdif: ac3 passthrough output
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: aout_spdif.c,v 1.4 2001/05/07 03:14:09 stef Exp $
+ * $Id: aout_spdif.c,v 1.5 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -98,7 +98,9 @@ void aout_SpdifThread( aout_thread_t * p_aout )
                 }
                 else if( !AOUT_FIFO_ISEMPTY( p_aout->fifo[i_fifo] ) )
                 {
-                    vlc_mutex_unlock( &p_aout->fifo[i_fifo].data_lock );
+//                    vlc_mutex_unlock( &p_aout->fifo[i_fifo].data_lock );
+//fprintf(stderr, "delay %lld\n",p_aout->fifo[i_fifo].date[p_aout->fifo[i_fifo].l_start_frame]  -mdate() );
+                   
                     /* play spdif frame to the external decoder */
                     p_aout->pf_play( p_aout,
                                      p_aout->fifo[i_fifo].buffer +
index 4fcafac52eab5d6e489db82210ca67443c1ff4b2..5985370de5b84bbb6573d85dc12314d3d06af13d 100644 (file)
@@ -4,7 +4,7 @@
  * interface, such as command line.
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: interface.c,v 1.77 2001/05/07 03:14:09 stef Exp $
+ * $Id: interface.c,v 1.78 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -154,20 +154,37 @@ static void intf_Manage( intf_thread_t *p_intf )
     /* If no stream is being played, try to find one */
     if( p_intf->p_input == NULL && !p_intf->b_die )
     {
-        /* Select the next playlist item */
-        intf_PlaylistNext( p_main->p_playlist );
-
-        if( p_main->p_playlist->i_index == -1 )
+        if( !p_main->p_playlist->b_stopped )
         {
-            /*    FIXME: wait for user to add stuff to playlist ? */
-#if 0
-            p_intf->b_die = 1;
-#endif
+            /* Select the next playlist item */
+            intf_PlaylistNext( p_main->p_playlist );
+
+            /* don't loop by default: stop at playlist end */
+            if( p_main->p_playlist->i_index == -1 )
+            {
+                p_main->p_playlist->b_stopped = 1;
+            }
+            else
+            {
+                p_main->p_playlist->b_stopped = 0;
+                p_intf->p_input =
+                    input_CreateThread( &p_main->p_playlist->current, NULL );
+            }
         }
         else
         {
-            p_intf->p_input =
-                input_CreateThread( &p_main->p_playlist->current, NULL );
+            /* playing has been stopped: we no longer need outputs */
+            if( p_aout_bank->i_count )
+            {
+                /* FIXME kludge that does not work with several outputs */
+                aout_DestroyThread( p_aout_bank->pp_aout[0], NULL );
+                p_aout_bank->i_count--;
+            }
+            if( p_vout_bank->i_count )
+            {
+                vout_DestroyThread( p_vout_bank->pp_vout[0], NULL );
+                p_vout_bank->i_count--;
+            }
         }
     }
 }
index d6ddf72ae61f63c2bf10bc2d9014a1a88e497c04..6971aee1028ab1ff4827d7679be3829593d11011 100644 (file)
@@ -2,7 +2,7 @@
  * intf_playlist.c : Playlist management functions
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_playlist.c,v 1.4 2001/05/07 03:14:09 stef Exp $
+ * $Id: intf_playlist.c,v 1.5 2001/05/15 01:01:44 stef Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -77,6 +77,7 @@ void intf_PlaylistInit ( playlist_t * p_playlist )
 
     p_playlist->i_mode = PLAYLIST_FORWARD;
     p_playlist->i_seed = 0;
+    p_playlist->b_stopped = 0;
 
     /* There is no current item */
     p_playlist->current.i_type = 0;
@@ -246,7 +247,9 @@ void intf_PlaylistDestroy( playlist_t * p_playlist )
 }
 
 /*****************************************************************************
- * intf_PlaylistJumpto
+ * intf_PlaylistJumpto: go to a specified position in playlist.
+ *****************************************************************************
+ * Note that this function does NOT take the lock
  *****************************************************************************/
 void intf_PlaylistJumpto( playlist_t * p_playlist , int i_pos)
 {
@@ -260,10 +263,12 @@ void intf_PlaylistJumpto( playlist_t * p_playlist , int i_pos)
         {
             free( p_playlist->current.psz_name );
         }
+
         p_playlist->current = p_playlist->p_item[ p_playlist->i_index ];
         p_playlist->current.psz_name
                             = strdup( p_playlist->current.psz_name );
-        }
+
+    }
 
     vlc_mutex_unlock( &p_playlist->change_lock );
 }