Commit 72ca0539 authored by Stéphane Borel's avatar Stéphane Borel

-changes in gnome interface

-bugfix in input dvd
parent 1843a615
......@@ -4,7 +4,7 @@
* control the pace of reading.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: input_ext-intf.h,v 1.29 2001/04/01 07:31:38 stef Exp $
* $Id: input_ext-intf.h,v 1.30 2001/04/08 07:24:47 stef Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
......@@ -52,7 +52,8 @@ typedef struct es_descriptor_s
boolean_t b_audio; /* is the stream an audio stream that
* will need to be discarded with
* fast forward and slow motion ? */
boolean_t b_spu;
u8 i_cat; /* stream category: video, audio,
* spu, other */
char psz_desc[20]; /* description of ES: audio language
* for instance ; NULL if not
......@@ -96,6 +97,12 @@ typedef struct es_descriptor_s
#define LPCM_AUDIO_ES 0x83
#define UNKNOWN_ES 0xFF
/* ES Categories */
#define VIDEO_ES 0x00
#define AUDIO_ES 0x01
#define SPU_ES 0x02
#define NAV_ES 0x03
#define UNKNOWN_ES 0xFF
/*****************************************************************************
* pgrm_descriptor_t
*****************************************************************************
......@@ -352,7 +359,7 @@ void input_SetRate ( struct input_thread_s *, int );
void input_Seek ( struct input_thread_s *, off_t );
void input_DumpStream( struct input_thread_s * );
char * input_OffsetToTime( struct input_thread_s *, char * psz_buffer, off_t );
int input_ChangeES ( struct input_thread_s *, struct es_descriptor_s *, int );
int input_ChangeES ( struct input_thread_s *, struct es_descriptor_s *, u8 );
int input_ToggleES ( struct input_thread_s *,
struct es_descriptor_s *,
boolean_t );
......@@ -2,7 +2,7 @@
* dvd_ifo.c: Functions for ifo parsing
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: dvd_ifo.c,v 1.16 2001/04/01 07:31:38 stef Exp $
* $Id: dvd_ifo.c,v 1.17 2001/04/08 07:24:47 stef Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
......@@ -539,11 +539,19 @@ FLUSH(2);
{
GETLL( &i_temp );
//fprintf( stderr, "Audio %d: %llx\n", i, i_temp );
i_temp >>= 32;
i_temp >>= 8;
manager_inf.p_audio_attr[i].i_bar = i_temp & 0xff;
i_temp >>= 8;
manager_inf.p_audio_attr[i].i_caption = i_temp & 0xff;
i_temp >>= 8;
manager_inf.p_audio_attr[i].i_foo = i_temp & 0xff;
i_temp >>= 8;
manager_inf.p_audio_attr[i].i_lang_code = i_temp & 0xffff;
i_temp >>= 16;
manager_inf.p_audio_attr[i].i_num_channels = i_temp & 0x7;
i_temp >>= 4;
i_temp >>= 3;
manager_inf.p_audio_attr[i].i_test = i_temp & 0x1;
i_temp >>= 1;
manager_inf.p_audio_attr[i].i_sample_freq = i_temp & 0x3;
i_temp >>= 2;
manager_inf.p_audio_attr[i].i_quantization = i_temp & 0x3;
......
......@@ -2,7 +2,7 @@
* dvd_ifo.h: Structures for ifo parsing
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: dvd_ifo.h,v 1.10 2001/04/04 02:49:18 sam Exp $
* $Id: dvd_ifo.h,v 1.11 2001/04/08 07:24:47 stef Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
......@@ -57,7 +57,7 @@ typedef struct ifo_audio_s
u8 i_quantization ;// 2;
u8 i_sample_freq ;// 2;
// u8 ;// 1;
u8 i_test ;// 1;
u8 i_num_channels ;// 3;
u16 i_lang_code ;// 16; // <char> description
u8 i_foo ;// 8; // 0x00000000 ?
......
......@@ -10,7 +10,7 @@
* -dvd_udf to find files
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
* $Id: input_dvd.c,v 1.37 2001/04/03 03:39:41 stef Exp $
* $Id: input_dvd.c,v 1.38 2001/04/08 07:24:47 stef Exp $
*
* Author: Stphane Borel <stef@via.ecp.fr>
*
......@@ -365,6 +365,7 @@ static int DVDFindCell( thread_dvd_data_t * p_dvd )
if( i_cell == cell.i_cell_nb )
{
intf_ErrMsg( "dvd error: can't find cell" );
return -1;
}
else
......@@ -392,6 +393,7 @@ static int DVDFindSector( thread_dvd_data_t * p_dvd )
if( DVDFindCell( p_dvd ) < 0 )
{
intf_ErrMsg( "dvd error: can't find sector" );
return -1;
}
......@@ -421,6 +423,7 @@ static int DVDChapterSelect( thread_dvd_data_t * p_dvd, int i_chapter )
/* Find cell index in Program chain for current chapter */
p_dvd->i_prg_cell = title.chapter_map.pi_start_cell[i_chapter-1] - 1;
p_dvd->i_cell = 0;
p_dvd->i_sector = 0;
/* Search for cell_index in cell adress_table and initialize start sector */
DVDFindSector( p_dvd );
......@@ -561,12 +564,17 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
input_AddProgram( p_input, 0, sizeof( stream_ps_data_t ) );
/* No PSM to read in DVD mode, we already have all information */
p_input->stream.pp_programs[0]->b_is_ok = 1;
p_input->stream.pp_programs[0]->i_synchro_state = SYNCHRO_START;
p_es = NULL;
/* ES 0 -> video MPEG2 */
p_es = input_AddES( p_input, p_input->stream.pp_programs[0], 0xe0, 0 );
p_es->i_stream_id = 0xe0;
p_es->i_type = MPEG2_VIDEO_ES;
p_es->i_cat = VIDEO_ES;
input_SelectES( p_input, p_es );
intf_WarnMsg( 1, "dvd info: video MPEG2 stream" );
......@@ -579,15 +587,15 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
{
#ifdef DEBUG
intf_DbgMsg( "Audio %d: %x %x %x %x %x %x %x %x %x %x %x %x\n", i,
intf_WarnMsg( 1, "Audio %d: %x %x %x %x %x %x %x %x %x %x %x %x", i,
vts.manager_inf.p_audio_attr[i-1].i_num_channels,
vts.manager_inf.p_audio_attr[i-1].i_coding_mode,
vts.manager_inf.p_audio_attr[i-1].i_multichannel_extension,
vts.manager_inf.p_audio_attr[i-1].i_type,
vts.manager_inf.p_audio_attr[i-1].i_appl_mode,
vts.manager_inf.p_audio_attr[i-1].i_foo,
vts.manager_inf.p_audio_attr[i-1].i_test,
vts.manager_inf.p_audio_attr[i-1].i_bar,
vts.manager_inf.p_audio_attr[i-1].i_appl_mode,
vts.manager_inf.p_audio_attr[i-1].i_quantization,
vts.manager_inf.p_audio_attr[i-1].i_sample_freq,
vts.manager_inf.p_audio_attr[i-1].i_lang_code,
......@@ -603,8 +611,10 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
p_es->i_stream_id = 0xbd;
p_es->i_type = AC3_AUDIO_ES;
p_es->b_audio = 1;
p_es->i_cat = AUDIO_ES;
strcpy( p_es->psz_desc, Language( hton16(
vts.manager_inf.p_audio_attr[i-1].i_lang_code ) ) );
strcat( p_es->psz_desc, " (ac3)" );
intf_WarnMsg( 1, "dvd info: audio stream %d %s\t(0x%x)",
i, p_es->psz_desc, i_id );
......@@ -618,8 +628,10 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
p_es->i_stream_id = i_id;
p_es->i_type = MPEG2_AUDIO_ES;
p_es->b_audio = 1;
p_es->i_cat = AUDIO_ES;
strcpy( p_es->psz_desc, Language( hton16(
vts.manager_inf.p_audio_attr[i-1].i_lang_code ) ) );
strcat( p_es->psz_desc, " (mpeg)" );
intf_WarnMsg( 1, "dvd info: audio stream %d %s\t(0x%x)",
i, p_es->psz_desc, i_id );
......@@ -655,7 +667,7 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
p_input->stream.pp_programs[0], i_id, 0 );
p_es->i_stream_id = 0xbd;
p_es->i_type = DVD_SPU_ES;
p_es->b_spu = 1;
p_es->i_cat = SPU_ES;
strcpy( p_es->psz_desc, Language( hton16(
vts.manager_inf.p_spu_attr[i-1].i_lang_code ) ) );
intf_WarnMsg( 1, "dvd info: spu stream %d %s\t(0x%x)",
......@@ -674,7 +686,7 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
main_PutIntVariable( INPUT_CHANNEL_VAR, 1 );
i_audio = 1;
}
if( i_audio > 0 )
if( i_audio > 0 && vts.manager_inf.i_audio_nb > 0 )
{
input_SelectES( p_input, p_input->stream.pp_es[i_audio] );
}
......@@ -686,7 +698,7 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
main_PutIntVariable( INPUT_CHANNEL_VAR, 1 );
i_spu = 0;
}
if( i_spu > 0 )
if( i_spu > 0 && vts.manager_inf.i_spu_nb > 0 )
{
i_spu += vts.manager_inf.i_audio_nb;
input_SelectES( p_input, p_input->stream.pp_es[i_spu] );
......@@ -714,10 +726,6 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
p_area->i_part, p_area->i_tell );
}
/* No PSM to read in DVD mode, we already have all information */
p_input->stream.pp_programs[0]->b_is_ok = 1;
p_input->stream.pp_programs[0]->i_synchro_state = SYNCHRO_START;
vlc_mutex_unlock( &p_input->stream.stream_lock );
#undef vts
#undef vmg
......
......@@ -2,7 +2,7 @@
* gnome_callbacks.c : Callbacks for the Gnome plugin.
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
* $Id: gnome_callbacks.c,v 1.20 2001/04/03 03:39:41 stef Exp $
* $Id: gnome_callbacks.c,v 1.21 2001/04/08 07:24:47 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr>
......@@ -160,6 +160,54 @@ on_intf_window_drag_data_received (GtkWidget *widget,
}
void
on_button_title_prev_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf;
input_area_t * p_area;
int i_id;
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
i_id = p_intf->p_input->stream.p_selected_area->i_id - 1;
if( i_id >= 0 )
{
p_area = p_intf->p_input->stream.pp_areas[i_id];
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_menus_update = 1;
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
}
void
on_button_title_next_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf;
input_area_t * p_area;
int i_id;
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
i_id = p_intf->p_input->stream.p_selected_area->i_id + 1;
if( i_id < p_intf->p_input->stream.i_area_nb )
{
p_area = p_intf->p_input->stream.pp_areas[i_id];
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_menus_update = 1;
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
}
void
on_button_chapter_prev_clicked (GtkButton *button,
gpointer user_data)
......@@ -170,11 +218,14 @@ on_button_chapter_prev_clicked (GtkButton *button,
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
p_area = p_intf->p_input->stream.p_selected_area;
if( p_area->i_part - 1 >= 0 )
if( p_area->i_part > 0 )
{
p_area->i_part--;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
}
......@@ -189,11 +240,14 @@ on_button_chapter_next_clicked (GtkButton *button,
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
p_area = p_intf->p_input->stream.p_selected_area;
if( p_area->i_part + 1 < p_area->i_part_nb )
if( p_area->i_part < p_area->i_part_nb )
{
p_area->i_part++;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
}
......@@ -278,13 +332,13 @@ void
on_menubar_audio_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
intf_thread_t * p_intf;
es_descriptor_t * p_es;
p_es = (es_descriptor_t*)user_data;
if( p_intf->p_sys->b_menus_ready )
if( !p_intf->p_sys->b_menus_update )
{
p_es = (es_descriptor_t*)user_data;
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
}
}
......@@ -294,13 +348,15 @@ void
on_menubar_subtitle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
intf_thread_t * p_intf;
es_descriptor_t * p_es;
p_es = (es_descriptor_t*)user_data;
p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
if( p_intf->p_sys->b_menus_ready )
if( !p_intf->p_sys->b_menus_update )
{
p_es = (es_descriptor_t*)user_data;
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
}
}
......@@ -310,14 +366,16 @@ void
on_menubar_title_toggle (GtkCheckMenuItem *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" );
if( menuitem->active && p_intf->p_sys->b_menus_ready )
if( menuitem->active && !p_intf->p_sys->b_menus_update )
{
p_intf->p_input->pf_set_area( p_intf->p_input,
(input_area_t*)user_data );
p_intf->p_sys->b_menus_update = 1;
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
}
......@@ -329,14 +387,21 @@ 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];
if( menuitem->active && p_intf->p_sys->b_menus_ready )
if( menuitem->active && !p_intf->p_sys->b_menus_update )
{
p_area->i_part = i_chapter;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
snprintf( psz_chapter, 3, "%02d", p_area->i_part );
gtk_label_set_text( p_intf->p_sys->p_label_chapter, psz_chapter );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
}
void
......@@ -526,6 +591,8 @@ on_toolbar_prev_clicked (GtkButton *button,
intf_PlaylistPrev( p_main->p_playlist );
p_intf->p_input->b_eof = 1;
}
p_intf->p_sys->b_mode_changed = 1;
}
......@@ -540,48 +607,8 @@ on_toolbar_next_clicked (GtkButton *button,
/* FIXME: temporary hack */
p_intf->p_input->b_eof = 1;
}
}
void
on_toolbar_prev_title_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf;
input_area_t * p_area;
int i_id;
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
i_id = p_intf->p_input->stream.p_selected_area->i_id - 1;
if( i_id >= 0 )
{
p_area = p_intf->p_input->stream.pp_areas[i_id];
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_menus_update = 1;
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
}
}
void
on_toolbar_next_title_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf;
input_area_t * p_area;
int i_id;
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
i_id = p_intf->p_input->stream.p_selected_area->i_id + 1;
if( i_id < p_intf->p_input->stream.i_area_nb )
{
p_area = p_intf->p_input->stream.pp_areas[i_id];
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_menus_update = 1;
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
}
p_intf->p_sys->b_mode_changed = 1;
}
......@@ -652,7 +679,7 @@ on_popup_audio_toggle (GtkCheckMenuItem *menuitem,
p_es = (es_descriptor_t*)user_data;
if( p_intf->p_sys->b_menus_ready )
if( !p_intf->p_sys->b_menus_update )
{
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
}
......@@ -668,7 +695,7 @@ on_popup_subtitle_toggle (GtkCheckMenuItem *menuitem,
p_es = (es_descriptor_t*)user_data;
if( p_intf->p_sys->b_menus_ready )
if( !p_intf->p_sys->b_menus_update )
{
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
}
......@@ -681,7 +708,7 @@ on_popup_navigation_toggle (GtkCheckMenuItem *menuitem,
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( menuitem->active && p_intf->p_sys->b_menus_ready )
if( menuitem->active && !p_intf->p_sys->b_menus_update )
{
input_area_t * p_area;
gint i_title;
......@@ -690,16 +717,14 @@ on_popup_navigation_toggle (GtkCheckMenuItem *menuitem,
i_title = (gint)(user_data) / 100;
i_chapter = (gint)(user_data) - ( 100 * i_title );
if( i_title != p_intf->p_input->stream.p_selected_area->i_id )
{
p_intf->p_sys->b_menus_update = 1;
}
p_area = p_intf->p_input->stream.pp_areas[i_title];
p_area->i_part = i_chapter;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_menus_update = 1;
}
}
......@@ -793,6 +818,8 @@ void
on_fileopen_ok_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_fileopen" );
GtkWidget *filesel;
gchar *filename;
......@@ -801,6 +828,13 @@ on_fileopen_ok_clicked (GtkButton *button,
filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (filesel));
intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, (char*)filename );
/* Select added item and switch to file 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->i_intf_mode = FILE_MODE;
p_intf->p_sys->b_mode_changed = 1;
}
......@@ -937,7 +971,6 @@ on_disc_ok_clicked (GtkButton *button,
{
psz_method = "dvd";
p_intf->p_sys->i_intf_mode = DVD_MODE;
p_intf->p_sys->b_mode_changed = 1;
}
else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
"disc_vcd" ) )->active )
......@@ -965,6 +998,12 @@ on_disc_ok_clicked (GtkButton *button,
intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
free( psz_source );
/* 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 );
}
......@@ -1030,6 +1069,13 @@ on_network_ok_clicked (GtkButton *button,
intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
free( psz_source );
/* 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;
p_intf->p_sys->i_intf_mode = NET_MODE;
gtk_widget_hide( p_intf->p_sys->p_network );
}
......
......@@ -2,7 +2,7 @@
* gnome_callbacks.h : Callbacks for the Gnome plugin.
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
* $Id: gnome_callbacks.h,v 1.13 2001/04/03 03:39:41 stef Exp $
* $Id: gnome_callbacks.h,v 1.14 2001/04/08 07:24:47 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
......@@ -86,14 +86,6 @@ void
on_toolbar_next_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_prev_title_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_next_title_clicked (GtkButton *button,
gpointer user_data);
void
on_popup_play_activate (GtkMenuItem *menuitem,
gpointer user_data);
......@@ -289,3 +281,11 @@ on_button_chapter_prev_clicked (GtkButton *button,
void
on_button_chapter_next_clicked (GtkButton *button,
gpointer user_data);
void
on_button_title_prev_clicked (GtkButton *button,
gpointer user_data);
void
on_button_title_next_clicked (GtkButton *button,
gpointer user_data);
......@@ -140,12 +140,27 @@ create_intf_window (void)
GtkWidget *label_status;
GtkWidget *label_bar;
GtkWidget *slider;
GtkWidget *file_box;
GtkWidget *label_file;
GtkWidget *dvd_box;
GtkWidget *title_chapter_box;
GtkWidget *label19;
GtkWidget *label_title;
GtkWidget *hbox6;
GtkWidget *button_chapter_prev;
GtkWidget *button_title_prev;
GtkWidget *button_title_next;
GtkWidget *dvd_chapter_box;
GtkWidget *label20;
GtkWidget *label_chapter;
GtkWidget *button_chapter_prev;
GtkWidget *button_chapter_next;
GtkWidget *network_box;
GtkWidget *label_network;
GtkWidget *button_network_channel_1;
GtkWidget *button_network_channel_2;
GtkWidget *button_network_channel_3;
GtkWidget *button_network_channel_4;
GtkWidget *button_network_channel_5;
GtkWidget *button_network_channel_6;
GtkWidget *appbar;
GtkTooltips *tooltips;
......@@ -471,51 +486,173 @@ create_intf_window (void)
gtk_scale_set_draw_value (GTK_SCALE (slider), FALSE);
gtk_scale_set_digits (GTK_SCALE (slider), 3);
file_box = gtk_hbox_new (FALSE, 0);
gtk_widget_ref (file_box);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "file_box", file_box,