Commit bc118e19 authored by Stéphane Borel's avatar Stéphane Borel

*Much work on the gnome interface: added oct's playlist from gtk plugin,

tuned appearence, added preferences window (with no features yet), jump
window to go to specified time (not functionnal yet), and fixed some
bugs.

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

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

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

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