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

-Unification of gnome/gtk intefaces: now all the file are in plugin/gtk.

Specific files are glade generated files and intf_* files. All the
remainders are common to gtk and gnome and contain all the callbacks for
both interfaces.
parent 5ae87b7e
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# All possible plugin directories, needed for make clean # All possible plugin directories, needed for make clean
# #
PLUGINS_DIR := alsa beos darwin dsp dummy \ PLUGINS_DIR := alsa beos darwin dsp dummy \
dvd esd fb ggi glide gnome gtk \ dvd esd fb ggi glide gtk \
downmix idct imdct \ downmix idct imdct \
macosx mga \ macosx mga \
motion \ motion \
...@@ -23,7 +23,7 @@ PLUGINS_DIR := alsa beos darwin dsp dummy \ ...@@ -23,7 +23,7 @@ PLUGINS_DIR := alsa beos darwin dsp dummy \
# All possible plugin objects # All possible plugin objects
# #
PLUGINS_TARGETS := alsa/alsa beos/beos darwin/darwin dsp/dsp dummy/dummy \ PLUGINS_TARGETS := alsa/alsa beos/beos darwin/darwin dsp/dsp dummy/dummy \
dvd/dvd esd/esd fb/fb ggi/ggi glide/glide gnome/gnome gtk/gtk \ dvd/dvd esd/esd fb/fb ggi/ggi glide/glide gtk/gnome gtk/gtk \
downmix/downmix downmix/downmixsse downmix/downmix3dn \ downmix/downmix downmix/downmixsse downmix/downmix3dn \
idct/idct idct/idctclassic idct/idctmmx idct/idctmmxext \ idct/idct idct/idctclassic idct/idctmmx idct/idctmmxext \
imdct/imdct imdct/imdct3dn imdct/imdctsse \ imdct/imdct imdct/imdct3dn imdct/imdctsse \
...@@ -76,8 +76,7 @@ AC3_DECODER = src/ac3_decoder/ac3_decoder_thread.o \ ...@@ -76,8 +76,7 @@ AC3_DECODER = src/ac3_decoder/ac3_decoder_thread.o \
AC3_SPDIF = src/ac3_spdif/ac3_spdif.o \ AC3_SPDIF = src/ac3_spdif/ac3_spdif.o \
src/ac3_spdif/ac3_iec958.o src/ac3_spdif/ac3_iec958.o
LPCM_DECODER = src/lpcm_decoder/lpcm_decoder_thread.o \ LPCM_DECODER = src/lpcm_decoder/lpcm_decoder_thread.o
src/lpcm_decoder/lpcm_decoder.o
AUDIO_DECODER = src/audio_decoder/audio_decoder.o \ AUDIO_DECODER = src/audio_decoder/audio_decoder.o \
src/audio_decoder/adec_generic.o \ src/audio_decoder/adec_generic.o \
......
###############################################################################
# vlc (VideoLAN Client) gnome module Makefile
# (c)2001 VideoLAN
###############################################################################
#
# Objects
#
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)
#
# Virtual targets
#
include ../../Makefile.modules
$(PLUGIN_GNOME): %.o: .dep/%.d
$(PLUGIN_GNOME): %.o: %.c
$(CC) $(CFLAGS) $(PCFLAGS) `gnome-config --cflags gtk gnomeui` -c -o $@ $<
$(BUILTIN_GNOME): BUILTIN_%.o: .dep/%.d
$(BUILTIN_GNOME): BUILTIN_%.o: %.c
$(CC) $(CFLAGS) -DBUILTIN `gnome-config --cflags gtk gnomeui` -c -o $@ $<
#
# Real targets
#
../../lib/gnome.so: $(PLUGIN_GNOME)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GNOME)
../../lib/gnome.a: $(BUILTIN_GNOME)
ar r $@ $^
$(RANLIB) $@
/*****************************************************************************
* gnome_callbacks.c : Callbacks for the Gnome plugin.
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
* $Id: gnome_callbacks.c,v 1.29 2001/05/15 01:01:44 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#define MODULE_NAME gnome
#include "modules_inner.h"
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "defs.h"
#include <gnome.h>
#include "config.h"
#include "common.h"
#include "threads.h"
#include "mtime.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "interface.h"
#include "intf_playlist.h"
#include "intf_msg.h"
#include "video.h"
#include "video_output.h"
#include "audio_output.h"
#include "gnome_callbacks.h"
#include "gnome_playlist.h"
#include "gnome_interface.h"
#include "gnome_support.h"
#include "intf_gnome.h"
#include "main.h"
/*****************************************************************************
* Interface callbacks
*****************************************************************************
* The following callbacks are related to the main interface window.
*****************************************************************************/
void
on_intf_window_destroy (GtkObject *object,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(object), "intf_window" );
vlc_mutex_lock( &p_intf->change_lock );
p_intf->b_die = 1;
vlc_mutex_unlock( &p_intf->change_lock );
}
gboolean
on_slider_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
vlc_mutex_lock( &p_intf->change_lock );
p_intf->p_sys->b_slider_free = 0;
vlc_mutex_unlock( &p_intf->change_lock );
return FALSE;
}
gboolean
on_slider_button_release_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_window" );
vlc_mutex_lock( &p_intf->change_lock );
p_intf->p_sys->b_slider_free = 1;
vlc_mutex_unlock( &p_intf->change_lock );
return FALSE;
}
void
on_intf_window_drag_data_received (GtkWidget *widget,
GdkDragContext *drag_context,
gint x,
gint y,
GtkSelectionData *data,
guint info,
guint time,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET( widget ), "intf_window" );
int 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 );
p_main->p_playlist->b_stopped = 0;
}
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;
/* Disallow area 0 since it is used for video_ts.vob */
if( i_id > 0 )
{
p_area = p_intf->p_input->stream.pp_areas[i_id];
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_title_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 );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_title_update = 1;
}
}
void
on_button_chapter_prev_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf;
input_area_t * p_area;
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
p_area = p_intf->p_input->stream.p_selected_area;
if( p_area->i_part > 0 )
{
p_area->i_part--;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_chapter_update = 1;
}
}
void
on_button_chapter_next_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf;
input_area_t * p_area;
p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
p_area = p_intf->p_input->stream.p_selected_area;
if( p_area->i_part < p_area->i_part_nb )
{
p_area->i_part++;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_chapter_update = 1;
}
}
/*****************************************************************************
* Menubar callbacks
*****************************************************************************
* The following callbacks are related to the menubar of the main
* interface window.
*****************************************************************************/
void
on_menubar_open_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
/* If we have never used the file selector, open it */
if( !GTK_IS_WIDGET( p_intf->p_sys->p_fileopen ) )
{
p_intf->p_sys->p_fileopen = create_intf_fileopen();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
"p_intf", p_intf );
gtk_file_selection_set_filename ( GTK_FILE_SELECTION(
p_intf->p_sys->p_fileopen ),
main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) );
}
gtk_widget_show( p_intf->p_sys->p_fileopen );
gdk_window_raise( p_intf->p_sys->p_fileopen->window );
}
void
on_menubar_disc_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_disc ) )
{
p_intf->p_sys->p_disc = create_intf_disc();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_disc ),
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_disc );
gdk_window_raise( p_intf->p_sys->p_disc->window );
}
void
on_menubar_network_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_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 );
}
void
on_menubar_exit_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
vlc_mutex_lock( &p_intf->change_lock );
p_intf->b_die = 1;
vlc_mutex_unlock( &p_intf->change_lock );
}
void
on_menubar_playlist_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
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 ) )
{
p_intf->p_sys->p_playlist = create_intf_playlist();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_playlist ),
"p_intf", p_intf );
}
vlc_mutex_lock( &p_main->p_playlist->change_lock );
if( p_main->p_playlist->i_size > 0 )
{
p_playlist = p_main->p_playlist;
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 );
}
void
on_menubar_audio_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t * p_intf;
es_descriptor_t * p_es;
p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
if( !p_intf->p_sys->b_audio_update )
{
p_es = (es_descriptor_t*)user_data;
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
p_intf->p_sys->b_audio_update = menuitem->active;
}
}
void
on_menubar_subtitle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t * p_intf;
es_descriptor_t * p_es;
p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
if( !p_intf->p_sys->b_spu_update )
{
p_es = (es_descriptor_t*)user_data;
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
p_intf->p_sys->b_spu_update = menuitem->active;
}
}
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)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
if( menuitem->active && !p_intf->p_sys->b_title_update )
{
gint i_title = (gint)user_data;
p_intf->p_input->pf_set_area( p_intf->p_input,
p_intf->p_input->stream.pp_areas[i_title] );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_title_update = 1;
}
}
void
on_menubar_chapter_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
input_area_t * p_area = p_intf->p_input->stream.p_selected_area;
gint i_chapter = (gint)user_data;
char psz_chapter[5];
if( menuitem->active && !p_intf->p_sys->b_chapter_update )
{
p_area->i_part = i_chapter;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
snprintf( psz_chapter, 3, "%02d", p_area->i_part );
gtk_label_set_text( p_intf->p_sys->p_label_chapter, psz_chapter );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_intf->p_sys->b_chapter_update = 1;
}
}
void
on_menubar_angle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
input_area_t * p_area = p_intf->p_input->stream.p_selected_area;
gint i_angle = (gint)user_data;
if( menuitem->active && !p_intf->p_sys->b_angle_update )
{
p_area->i_angle = i_angle;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_angle_update = 1;
}
}
void
on_menubar_modules_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
if( !GTK_IS_WIDGET( p_intf->p_sys->p_modules ) )
{
p_intf->p_sys->p_modules = create_intf_modules();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_modules ),
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_modules );
gdk_window_raise( p_intf->p_sys->p_modules->window );
}
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 );
#if 1
#define ASSIGN_PSZ_ENTRY( var, default, name ) \
gtk_entry_set_text( GTK_ENTRY( gtk_object_get_data( GTK_OBJECT( \
p_intf->p_sys->p_preferences ), name ) ), \
main_GetPszVariable( var, default ) )
#define ASSIGN_INT_VALUE( var, default, name ) \
gtk_spin_button_set_value( GTK_SPIN_BUTTON( gtk_object_get_data( \
GTK_OBJECT( p_intf->p_sys->p_preferences ), name ) ), \
main_GetIntVariable( var, default ) )
#define ASSIGN_INT_TOGGLE( var, default, name ) \
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( gtk_object_get_data( \
GTK_OBJECT( p_intf->p_sys->p_preferences ), name ) ), \
main_GetIntVariable( var, default ) )
/* Default path */
ASSIGN_PSZ_ENTRY( INTF_PATH_VAR, INTF_PATH_DEFAULT,
"preferences_file_entry" );
/* Default DVD */
ASSIGN_PSZ_ENTRY( INPUT_DVD_DEVICE_VAR,INPUT_DVD_DEVICE_DEFAULT,
"preferences_disc_dvd_entry" );
/* Default VCD */
ASSIGN_PSZ_ENTRY( INPUT_VCD_DEVICE_VAR, INPUT_VCD_DEVICE_DEFAULT,
"preferences_disc_vcd_entry" );
/* Default server */
ASSIGN_PSZ_ENTRY( INPUT_SERVER_VAR, INPUT_SERVER_DEFAULT,
"preferences_network_server_entry" );
/* Default port */
ASSIGN_INT_VALUE( INPUT_PORT_VAR, INPUT_PORT_DEFAULT,
"preferences_network_port_spinbutton" );
/* Broadcast address */
ASSIGN_PSZ_ENTRY( INPUT_BCAST_ADRR_VAR, INPUT_BCAST_ADDR_DEFAULT,
"preferences_network_broadcast_entry" );
/* Broadcast stream by default ? */
ASSIGN_INT_TOGGLE( INPUT_BROADCAST_VAR, INPUT_BROADCAST_DEFAULT,
"preferences_network_broadcast_checkbutton" );
/* XXX Protocol */
/* Default interface */
ASSIGN_PSZ_ENTRY( INTF_METHOD_VAR, INTF_METHOD_DEFAULT,
"preferences_interface_entry" );
/* Default video output */
ASSIGN_PSZ_ENTRY( VOUT_METHOD_VAR, VOUT_METHOD_DEFAULT,
"preferences_video_output_entry" );
/* Default output width */
ASSIGN_INT_VALUE( VOUT_WIDTH_VAR, VOUT_WIDTH_DEFAULT,
"preferences_video_width_spinbutton" );
/* Default output height */
ASSIGN_INT_VALUE( VOUT_HEIGHT_VAR, VOUT_HEIGHT_DEFAULT,
"preferences_video_height_spinbutton" );
/* XXX Default screen depth */
/* XXX Default fullscreen depth */
/* XXX Default gamma */
/* Fullscreen on play */
ASSIGN_INT_TOGGLE( VOUT_FULLSCREEN_VAR, VOUT_FULLSCREEN_DEFAULT,
"preferences_video_fullscreen_checkbutton" );
/* Grayscale display */
ASSIGN_INT_TOGGLE( VOUT_GRAYSCALE_VAR, VOUT_GRAYSCALE_DEFAULT,
"preferences_video_grayscale_checkbutton" );
/* Default audio output */
ASSIGN_PSZ_ENTRY( AOUT_METHOD_VAR, AOUT_METHOD_DEFAULT,
"preferences_audio_output_entry" );
/* Default audio device */
ASSIGN_PSZ_ENTRY( AOUT_DSP_VAR, AOUT_DSP_DEFAULT,
"preferences_audio_device_entry" );
/* XXX Default frequency */
/* XXX Default quality */
/* XXX Default number of channels */
/* Use spdif output ? */
ASSIGN_INT_TOGGLE( AOUT_SPDIF_VAR, AOUT_SPDIF_DEFAULT,
"preferences_audio_spdif_checkbutton" );
/* Launch playlist on startup */
ASSIGN_INT_TOGGLE( PLAYLIST_STARTUP_VAR, PLAYLIST_STARTUP_DEFAULT,
"preferences_playlist_launch_on_startup_checkbutton" );
/* Enqueue drag'n dropped item as default */
ASSIGN_INT_TOGGLE( PLAYLIST_ENQUEUE_VAR, PLAYLIST_ENQUEUE_DEFAULT,
"preferences_playlist_enqueue_as_default_checkbutton" );
/* Loop on playlist end */
ASSIGN_INT_TOGGLE( PLAYLIST_LOOP_VAR, PLAYLIST_LOOP_DEFAULT,
"preferences_playlist_loop_checkbutton" );
/* Verbosity of warning messages */
ASSIGN_INT_VALUE( INTF_WARNING_VAR, INTF_WARNING_DEFAULT,
"preferences_misc_messages_spinbutton" );
#undef ASSIGN_PSZ_ENTRY
#undef ASSIGN_INT_VALUE
#undef ASSIGN_INT_TOGGLE
#endif
}
gtk_widget_show( p_intf->p_sys->p_preferences );
gdk_window_raise( p_intf->p_sys->p_preferences->window );
}
void
on_menubar_about_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
if( !GTK_IS_WIDGET( p_intf->p_sys->p_about ) )
{
p_intf->p_sys->p_about = create_intf_about();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_about ),
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_about );
gdk_window_raise( p_intf->p_sys->p_about->window );
}
/*****************************************************************************
* Toolbar callbacks
*****************************************************************************
* The following callbacks are related to the toolbar of the main
* interface window.
*****************************************************************************/
void
on_toolbar_open_clicked (GtkButton *button,
gpointer user_data)
{
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_fileopen ) )
{
p_intf->p_sys->p_fileopen = create_intf_fileopen();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
"p_intf", p_intf );
if( main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) != NULL )
{
gtk_file_selection_set_filename( GTK_FILE_SELECTION(
p_intf->p_sys->p_fileopen ),
main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) );
}
}
gtk_widget_show( p_intf->p_sys->p_fileopen );
gdk_window_raise( p_intf->p_sys->p_fileopen->window );
}
void
on_toolbar_disc_clicked (GtkButton *button,
gpointer user_data)
{
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 );
}
void
on_toolbar_network_clicked (GtkButton *button,
gpointer user_data)
{
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 );
}
void
on_toolbar_back_clicked (GtkButton *button,
gpointer user_data)
{
}
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_intf->p_input->b_eof = 1;
p_main->p_playlist->i_index--;
}
p_main->p_playlist->b_stopped = 1;
}
void
on_toolbar_play_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
}
else if( p_main->p_playlist->b_stopped )
{
if( p_main->p_playlist->i_size )
{
intf_PlaylistJumpto( p_main->p_playlist,
p_main->p_playlist->i_index );
p_main->p_playlist->b_stopped = 0;
}
else
{
on_toolbar_open_clicked( button, user_data );
}
}
}
void
on_toolbar_pause_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_PAUSE );
}
}
void
on_toolbar_slow_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_SLOWER );
}
}
void
on_toolbar_fast_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_FASTER );
}
}
void
on_toolbar_playlist_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( !GTK_IS_WIDGET( p_intf->p_sys->p_playlist ) )
{
p_intf->p_sys->p_playlist = create_intf_playlist();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_playlist ),
"p_intf", p_intf );
}
if( GTK_WIDGET_VISIBLE( p_intf->p_sys->p_playlist ) )
{
gtk_widget_hide( p_intf->p_sys->p_playlist );
}
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 );
}
}
void
on_toolbar_prev_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( p_intf->p_input != NULL )
{
/* FIXME: temporary hack */
intf_PlaylistPrev( p_main->p_playlist );
intf_PlaylistPrev( p_main->p_playlist );
p_intf->p_input->b_eof = 1;
}
p_intf->p_sys->b_mode_changed = 1;
}
void
on_toolbar_next_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_window" );
if( p_intf->p_input != NULL )
{
/* FIXME: temporary hack */
p_intf->p_input->b_eof = 1;
}
p_intf->p_sys->b_mode_changed = 1;
}
/*****************************************************************************
* Popup callbacks
*****************************************************************************
* The following callbacks are related to the popup menu. The popup
* menu is activated when right-clicking on the video output window.
*****************************************************************************/
void
on_popup_play_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
p_main->p_playlist->b_stopped = 0;
}
}
void
on_popup_back_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
}
void
on_popup_pause_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_PAUSE );
}
}
void
on_popup_slow_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_SLOWER );
}
}
void
on_popup_fast_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( p_intf->p_input != NULL )
{
input_SetStatus( p_intf->p_input, INPUT_STATUS_FASTER );
}
}
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)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
es_descriptor_t * p_es;
p_es = (es_descriptor_t*)user_data;
if( !p_intf->p_sys->b_audio_update )
{
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
p_intf->p_sys->b_audio_update = menuitem->active;
}
}
void
on_popup_subtitle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
es_descriptor_t * p_es;
p_es = (es_descriptor_t*)user_data;
if( !p_intf->p_sys->b_spu_update )
{
input_ToggleES( p_intf->p_input, p_es, menuitem->active );
p_intf->p_sys->b_spu_update = menuitem->active;
}
}
void
on_popup_navigation_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( menuitem->active &&
!p_intf->p_sys->b_title_update &&
!p_intf->p_sys->b_chapter_update )
{
input_area_t *p_area = p_intf->p_input->stream.p_selected_area;
gint i_title = DATA2TITLE( user_data );
gint i_chapter = DATA2CHAPTER( user_data );
if( p_area != p_intf->p_input->stream.pp_areas[i_title] )
{
p_area = p_intf->p_input->stream.pp_areas[i_title];
p_intf->p_sys->b_title_update = 1;
}
p_area->i_part = i_chapter;
p_intf->p_sys->b_chapter_update = 1;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
}
}
void
on_popup_angle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
input_area_t * p_area = p_intf->p_input->stream.p_selected_area;
gint i_angle = (gint)user_data;
if( menuitem->active && !p_intf->p_sys->b_angle_update )
{
p_area->i_angle = i_angle;
p_intf->p_input->pf_set_area( p_intf->p_input, (input_area_t*)p_area );
p_intf->p_sys->b_angle_update = 1;
}
}
void
on_popup_open_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
/* If we have never used the file selector, open it */
if( !GTK_IS_WIDGET( p_intf->p_sys->p_fileopen ) )
{
p_intf->p_sys->p_fileopen = create_intf_fileopen();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
"p_intf", p_intf );
if( main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) != NULL )
{
gtk_file_selection_set_filename( GTK_FILE_SELECTION(
p_intf->p_sys->p_fileopen ),
main_GetPszVariable( INTF_PATH_VAR, INTF_PATH_DEFAULT ) );
}
}
gtk_widget_show( p_intf->p_sys->p_fileopen );
gdk_window_raise( p_intf->p_sys->p_fileopen->window );
}
void
on_popup_disc_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
gtk_widget_show( p_intf->p_sys->p_disc );
gdk_window_raise( p_intf->p_sys->p_disc->window );
}
void
on_popup_network_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
gtk_widget_show( p_intf->p_sys->p_network );
gdk_window_raise( p_intf->p_sys->p_network->window );
}
void
on_popup_about_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( !GTK_IS_WIDGET( p_intf->p_sys->p_about ) )
{
p_intf->p_sys->p_about = create_intf_about();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_about ),
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_about );
gdk_window_raise( p_intf->p_sys->p_about->window );
}
void
on_popup_exit_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
vlc_mutex_lock( &p_intf->change_lock );
p_intf->b_die = 1;
vlc_mutex_unlock( &p_intf->change_lock );
}
void
on_popup_stop_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
if( p_intf->p_input != NULL )
{
p_intf->p_input->b_die = 1;
}
}
void
on_popup_playlist_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
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 );
}
void
on_popup_jump_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
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 );
}
gtk_widget_show( p_intf->p_sys->p_jump );
gdk_window_raise( p_intf->p_sys->p_jump->window );
}
void
on_popup_preferences_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_popup" );
gtk_widget_show( p_intf->p_sys->p_preferences );
gdk_window_raise( p_intf->p_sys->p_preferences->window );
}
/*****************************************************************************
* Fileopen callbacks
*****************************************************************************
* The following callbacks are related to the file requester.
*****************************************************************************/
void
on_intf_fileopen_destroy (GtkObject *object,
gpointer user_data)
{
gtk_widget_hide( GTK_WIDGET( object ) );
}
void
on_fileopen_ok_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_fileopen" );
GtkCList * p_playlist_clist;
GtkWidget * p_filesel;
gchar * psz_filename;
int i_end = p_main->p_playlist->i_size;
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;
}
intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
p_main->p_playlist->b_stopped = 0;
}
void
on_fileopen_cancel_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
/*****************************************************************************
* Module manager callbacks
*****************************************************************************
* The following callbacks are related to the module manager.
*****************************************************************************/
void
on_intf_modules_destroy (GtkObject *object,
gpointer user_data)
{
}
void
on_modules_ok_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_modules" );
gtk_widget_hide( p_intf->p_sys->p_modules );
}
void
on_modules_apply_clicked (GtkButton *button,
gpointer user_data)
{
}
void
on_modules_cancel_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
/*****************************************************************************
* Open disc callbacks
*****************************************************************************
* The following callbacks are related to the disc manager.
*****************************************************************************/
void
on_disc_dvd_toggled (GtkToggleButton *togglebutton,
gpointer user_data)
{
if( togglebutton->active )
{
gtk_entry_set_text( GTK_ENTRY( lookup_widget(
GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/dvd" );
}
}
void
on_disc_vcd_toggled (GtkToggleButton *togglebutton,
gpointer user_data)
{
if( togglebutton->active )
{
gtk_entry_set_text( GTK_ENTRY( lookup_widget(
GTK_WIDGET(togglebutton), "disc_name" ) ), "/dev/cdrom" );
}
}
void
on_disc_ok_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_disc" );
GtkCList * p_playlist_clist;
char * psz_device, *psz_source, *psz_method;
int i_end = p_main->p_playlist->i_size;
gtk_widget_hide( p_intf->p_sys->p_disc );
psz_device = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
GTK_WIDGET(button), "disc_name" ) ) );
/* "dvd:foo" has size 5 + strlen(foo) */
psz_source = malloc( 3 /* "dvd" */ + 1 /* ":" */
+ strlen( psz_device ) + 1 /* "\0" */ );
if( psz_source == NULL )
{
return;
}
/* Check which method was activated */
if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
"disc_dvd" ) )->active )
{
psz_method = "dvd";
p_intf->p_sys->i_intf_mode = DVD_MODE;
}
else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
"disc_vcd" ) )->active )
{
psz_method = "vcd";
}
else
{
intf_ErrMsg( "intf error: unknown disc type toggle button position" );
free( psz_source );
return;
}
/* Select title and chapter */
main_PutIntVariable( INPUT_TITLE_VAR, gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON( lookup_widget(
GTK_WIDGET(button), "disc_title" ) ) ) );
main_PutIntVariable( INPUT_CHAPTER_VAR, gtk_spin_button_get_value_as_int(
GTK_SPIN_BUTTON( lookup_widget(
GTK_WIDGET(button), "disc_chapter" ) ) ) );
/* Build source name and add it to playlist */
sprintf( psz_source, "%s:%s", psz_method, psz_device );
intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
free( psz_source );
/* catch the GTK CList */
p_playlist_clist = GTK_CLIST( gtk_object_get_data(
GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
/* update the display */
GnomeRebuildCList( p_playlist_clist, p_main->p_playlist );
/* Select added item and switch to DVD interface */
if( p_intf->p_input != NULL )
{
p_intf->p_input->b_eof = 1;
}
intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
p_main->p_playlist->b_stopped = 0;
}
void
on_disc_cancel_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
/*****************************************************************************
* Network stream callbacks
*****************************************************************************
* The following callbacks are related to the network stream manager.
*****************************************************************************/
void
on_network_ok_clicked (GtkButton *button,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(button), "intf_network" );
GtkCList * p_playlist_clist;
char * psz_source, *psz_server, *psz_protocol;
unsigned int i_port;
boolean_t b_broadcast;
int i_end = p_main->p_playlist->i_size;
gtk_widget_hide( p_intf->p_sys->p_network );
psz_server = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
GTK_WIDGET(button), "network_server" ) ) );
/* Check which protocol was activated */
if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
"network_ts" ) )->active )
{
psz_protocol = "ts";
}
else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button),
"network_rtp" ) )->active )
{
psz_protocol = "rtp";
}
else
{
intf_ErrMsg( "intf error: unknown protocol toggle button position" );
return;
}
/* Get the port number and make sure it will not overflow 5 characters */
i_port = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(
lookup_widget( GTK_WIDGET(button), "network_port" ) ) );
if( i_port > 65535 )
{
intf_ErrMsg( "intf error: invalid port %i", i_port );
}
/* do we have a broadcast address */
b_broadcast = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
lookup_widget( GTK_WIDGET(button), "broadcast_check" ) ) );
if( b_broadcast )
{
char * psz_broadcast;
psz_broadcast = gtk_entry_get_text( GTK_ENTRY( lookup_widget(
GTK_WIDGET(button), "network_broadcast" ) ) );
/* Allocate room for "protocol://server:port" */
psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
+ strlen( psz_server ) + 1 /* ":" */
+ 5 /* 0-65535 */
+ strlen( psz_broadcast ) + 2 /* "::" */
+ 1 /* "\0" */ );
if( psz_source == NULL )
{
return;
}
/* Build source name and add it to playlist */
sprintf( psz_source, "%s://%s:%i::%s", psz_protocol,
psz_server,
i_port,
psz_broadcast );
}
else
{
/* Allocate room for "protocol://server:port" */
psz_source = malloc( strlen( psz_protocol ) + 3 /* "://" */
+ strlen( psz_server ) + 1 /* ":" */
+ 5 /* 0-65535 */ + 1 /* "\0" */ );
if( psz_source == NULL )
{
return;
}
/* Build source name and add it to playlist */
sprintf( psz_source, "%s://%s:%i", psz_protocol, psz_server, i_port );
}
intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, psz_source );
free( psz_source );
/* catch the GTK CList */
p_playlist_clist = GTK_CLIST( gtk_object_get_data(
GTK_OBJECT( p_intf->p_sys->p_playlist ), "playlist_clist" ) );
/* update the display */
GnomeRebuildCList( p_playlist_clist, p_main->p_playlist );
/* Select added item and switch to network interface */
if( p_intf->p_input != NULL )
{
p_intf->p_input->b_eof = 1;
}
intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
p_main->p_playlist->b_stopped = 0;
}
void
on_network_cancel_clicked (GtkButton *button,
gpointer user_data)
{
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)
{
on_jump_apply_clicked( button, user_data );
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
void
on_jump_apply_clicked (GtkButton *button,
gpointer user_data)
{
#if 1
intf_thread_t * p_intf;
off_t i_seek;
off_t i_size;
int i_hours;
int i_minutes;
int i_seconds;
p_intf = GetIntf( GTK_WIDGET( button ), "intf_jump" );
#define GET_VALUE( name ) \
gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( gtk_object_get_data( \
GTK_OBJECT( p_intf->p_sys->p_jump ), name ) ) )
i_hours = GET_VALUE( "jump_hour_spinbutton" );
i_minutes = GET_VALUE( "jump_minute_spinbutton" );
i_seconds = GET_VALUE( "jump_second_spinbutton" );
#undef GET_VALUE
i_seconds += 60 *i_minutes + 3600* i_hours;
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
i_seek = i_seconds * 50 * p_intf->p_input->stream.i_mux_rate;
i_size = p_intf->p_input->stream.p_selected_area->i_size;
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
if( i_seek < i_size )
{
input_Seek( p_intf->p_input, i_seek );
}
p_main->p_playlist->b_stopped = 0;
#endif
}
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)
{
on_preferences_apply_clicked( button, user_data );
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
void
on_preferences_apply_clicked (GtkButton *button,
gpointer user_data)
{
#if 1
GtkWidget * p_preferences;
/* get preferences window */
p_preferences = gtk_widget_get_toplevel( GTK_WIDGET( button ) );
#define ASSIGN_PSZ_ENTRY( var, name ) \
main_PutPszVariable( var, gtk_entry_get_text( \
GTK_ENTRY( gtk_object_get_data( GTK_OBJECT( p_preferences ), name ) ) ) )
#define ASSIGN_INT_VALUE( var, name ) \
main_PutIntVariable( var, gtk_spin_button_get_value_as_int( \
GTK_SPIN_BUTTON( gtk_object_get_data( GTK_OBJECT( p_preferences ), \
name ) ) ) )
#define ASSIGN_INT_TOGGLE( var, name ) \
main_PutIntVariable( var, gtk_toggle_button_get_active( \
GTK_TOGGLE_BUTTON( gtk_object_get_data( GTK_OBJECT( p_preferences ), \
name ) ) ) )
/* Default path */
ASSIGN_PSZ_ENTRY( INTF_PATH_VAR, "preferences_file_entry" );
/* Default DVD */
ASSIGN_PSZ_ENTRY( INPUT_DVD_DEVICE_VAR, "preferences_disc_dvd_entry" );
/* Default VCD */
ASSIGN_PSZ_ENTRY( INPUT_VCD_DEVICE_VAR, "preferences_disc_vcd_entry" );
/* Default server */
ASSIGN_PSZ_ENTRY( INPUT_SERVER_VAR, "preferences_network_server_entry" );
/* Default port */
ASSIGN_INT_VALUE( INPUT_PORT_VAR, "preferences_network_port_spinbutton" );
/* Broadcast address */
ASSIGN_PSZ_ENTRY( INPUT_BCAST_ADRR_VAR,
"preferences_network_broadcast_entry" );
/* Broadcast stream by default ? */
ASSIGN_INT_TOGGLE( INPUT_BROADCAST_VAR,
"preferences_network_broadcast_checkbutton" );
/* XXX Protocol */
/* Default interface */
ASSIGN_PSZ_ENTRY( INTF_METHOD_VAR, "preferences_interface_entry" );
/* Default video output */
ASSIGN_PSZ_ENTRY( VOUT_METHOD_VAR, "preferences_video_output_entry" );
/* Default output width */
ASSIGN_INT_VALUE( VOUT_WIDTH_VAR, "preferences_video_width_spinbutton" );
/* Default output height */
ASSIGN_INT_VALUE( VOUT_HEIGHT_VAR, "preferences_video_height_spinbutton" );
/* XXX Default screen depth */
/* XXX Default fullscreen depth */
/* XXX Default gamma */
/* Fullscreen on play */
ASSIGN_INT_TOGGLE( VOUT_FULLSCREEN_VAR,
"preferences_video_fullscreen_checkbutton" );
/* Grayscale display */
ASSIGN_INT_TOGGLE( VOUT_GRAYSCALE_VAR,
"preferences_video_grayscale_checkbutton" );
/* Default audio output */
ASSIGN_PSZ_ENTRY( AOUT_METHOD_VAR, "preferences_audio_output_entry" );
/* Default audio device */
ASSIGN_PSZ_ENTRY( AOUT_DSP_VAR, "preferences_audio_device_entry" );
/* XXX Default frequency */
/* XXX Default quality */
/* XXX Default number of channels */
/* Use spdif output ? */
ASSIGN_INT_TOGGLE( AOUT_SPDIF_VAR, "preferences_audio_spdif_checkbutton" );
/* Launch playlist on startup */
ASSIGN_INT_TOGGLE( PLAYLIST_STARTUP_VAR,
"preferences_playlist_launch_on_startup_checkbutton" );
/* Enqueue drag'n dropped item as default */
ASSIGN_INT_TOGGLE( PLAYLIST_ENQUEUE_VAR,
"preferences_playlist_enqueue_as_default_checkbutton" );
/* Loop on playlist end */
ASSIGN_INT_TOGGLE( PLAYLIST_LOOP_VAR,
"preferences_playlist_loop_checkbutton" );
/* Verbosity of warning messages */
ASSIGN_INT_VALUE( INTF_WARNING_VAR,
"preferences_misc_messages_spinbutton" );
#undef ASSIGN_PSZ_ENTRY
#undef ASSIGN_INT_VALUE
#undef ASSIGN_INT_TOGGLE
#endif
}
void
on_preferences_cancel_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
/*****************************************************************************
* gnome_callbacks.h : Callbacks for the Gnome plugin.
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
* $Id: gnome_callbacks.h,v 1.17 2001/05/15 01:01:44 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "config.h"
#include <gnome.h>
/*****************************************************************************
* Callback prototypes
*****************************************************************************/
void
on_menubar_open_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_exit_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_playlist_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_plugins_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_preferences_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_about_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_toolbar_open_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_back_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_stop_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_play_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_pause_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_playlist_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_prev_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_next_clicked (GtkButton *button,
gpointer user_data);
void
on_popup_play_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_popup_pause_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_popup_exit_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_intf_window_destroy (GtkObject *object,
gpointer user_data);
void
on_fileopen_ok_clicked (GtkButton *button,
gpointer user_data);
void
on_fileopen_cancel_clicked (GtkButton *button,
gpointer user_data);
void
on_intf_fileopen_destroy (GtkObject *object,
gpointer user_data);
void
on_popup_open_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_popup_about_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_popup_slow_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_popup_fast_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_toolbar_slow_clicked (GtkButton *button,
gpointer user_data);
void
on_toolbar_fast_clicked (GtkButton *button,
gpointer user_data);
void
on_intf_modules_destroy (GtkObject *object,
gpointer user_data);
void
on_modules_ok_clicked (GtkButton *button,
gpointer user_data);
void
on_modules_apply_clicked (GtkButton *button,
gpointer user_data);
void
on_modules_cancel_clicked (GtkButton *button,
gpointer user_data);
void
on_menubar_modules_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_intf_window_drag_data_received (GtkWidget *widget,
GdkDragContext *drag_context,
gint x,
gint y,
GtkSelectionData *data,
guint info,
guint time,
gpointer user_data);
void
on_menubar_audio_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_disc_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_toolbar_disc_clicked (GtkButton *button,
gpointer user_data);
void
on_disc_ok_clicked (GtkButton *button,
gpointer user_data);
void
on_disc_cancel_clicked (GtkButton *button,
gpointer user_data);
void
on_disc_dvd_toggled (GtkToggleButton *togglebutton,
gpointer user_data);
void
on_disc_vcd_toggled (GtkToggleButton *togglebutton,
gpointer user_data);
void
on_popup_disc_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_menubar_audio_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_menubar_subtitle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_popup_audio_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_popup_subtitle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_popup_navigation_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_menubar_title_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_menubar_network_activate (GtkMenuItem *menuitem,
gpointer user_data);
void
on_toolbar_network_clicked (GtkButton *button,
gpointer user_data);
void
on_network_ok_clicked (GtkButton *button,
gpointer user_data);
void
on_network_cancel_clicked (GtkButton *button,
gpointer user_data);
void
on_popup_network_activate (GtkMenuItem *menuitem,
gpointer user_data);
gboolean
on_slider_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);
gboolean
on_slider_button_release_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);
void
on_menubar_chapter_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
void
on_button_chapter_prev_clicked (GtkButton *button,
gpointer user_data);
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);
void
on_menubar_angle_toggle (GtkCheckMenuItem *menuitem,
gpointer user_data);
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);
void
on_playlist_destroy (GtkObject *object,
gpointer user_data);
/*****************************************************************************
* gnome_playlist.c : Interface for the playlist dialog
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: gnome_playlist.c,v 1.3 2001/05/15 01:01:44 stef Exp $
*
* Authors: Pierre Baillet <oct@zoy.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#define MODULE_NAME gnome
#include "modules_inner.h"
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "defs.h"
#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>
#include <sys/types.h> /* for readdir and stat stuff */
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include "config.h"
#include "common.h"
#include "threads.h"
#include "mtime.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "interface.h"
#include "intf_playlist.h"
#include "intf_msg.h"
#include "intf_urldecode.h"
#include "gnome_callbacks.h"
#include "gnome_interface.h"
#include "gnome_support.h"
#include "gnome_playlist.h"
#include "intf_gnome.h"
#include "main.h"
/*****************************************************************************
* Playlist callbacks
*****************************************************************************
* The following callbacks are related to the playlist.
*****************************************************************************/
void
on_playlist_destroy (GtkObject *object,
gpointer user_data)
{
gtk_widget_hide( GTK_WIDGET(object));
}
void
on_playlist_ok_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
void
on_playlist_apply_clicked (GtkButton *button,
gpointer user_data)
{
}
void
on_playlist_cancel_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
void
on_playlist_close_clicked (GtkButton *button,
gpointer user_data)
{
gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) );
}
void
on_playlist_disc_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_playlist" );
/* 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 );
}
void
on_playlist_file_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_playlist" );
/* If we have never used the file selector, open it */
if( !GTK_IS_WIDGET( p_intf->p_sys->p_fileopen ) )
{
p_intf->p_sys->p_fileopen = create_intf_fileopen();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_fileopen ),
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_fileopen );
gdk_window_raise( p_intf->p_sys->p_fileopen->window );
}
void
on_playlist_network_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_playlist" );
/* 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 );
}
void
on_playlist_url_activate (GtkMenuItem *menuitem,
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)
{
/* user wants to delete a file in the queue */
GList * p_selection;
GtkCList * p_clist;
playlist_t *p_playlist;
/* catch the thread back */
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_playlist" );
p_playlist = p_main->p_playlist;
/* lock the struct */
vlc_mutex_lock( &p_intf->change_lock );
p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_playlist ), "playlist_clist" ) );
/* I use UNDOCUMENTED features to retrieve the selection... */
p_selection = p_clist->selection;
if( g_list_length( p_selection ) > 0 )
{
/* reverse-sort so that we can delete from the furthest
* to the closest item to delete...
*/
p_selection = g_list_sort( p_selection, GnomeCompareItems );
g_list_foreach( p_selection, GnomeDeleteGListItem, p_intf );
/* rebuild the CList */
GnomeRebuildCList( p_clist, p_playlist );
}
vlc_mutex_unlock( &p_intf->change_lock );
}
void
on_playlist_crop_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
/* Ok, this is a really small thing, but, hey, it works and
might be useful, who knows ? */
on_playlist_invert_activate( menuitem, user_data );
on_playlist_delete_item_activate( menuitem, user_data );
}
void
on_playlist_invert_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
playlist_t *p_playlist;
GtkCList * p_clist;
int * pi_selected;
int i_sel_l;
int i_dummy;
/* catch the thread back */
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_playlist" );
p_playlist = p_main->p_playlist;
/* lock the struct */
vlc_mutex_lock( &p_intf->change_lock );
p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_playlist ), "playlist_clist" ) );
/* have to copy the selection to an int *
I wasn't able to copy the g_list to another g_list
glib only does pointer copies, not real copies :( */
pi_selected = malloc( sizeof(int) *g_list_length( p_clist->selection ) );
i_sel_l = g_list_length( p_clist->selection );
for( i_dummy = 0 ; i_dummy < i_sel_l ; i_dummy++)
{
pi_selected[i_dummy] = (int)g_list_nth_data( p_clist->selection,
i_dummy );
}
gtk_clist_freeze( p_clist );
gtk_clist_select_all( p_clist );
for( i_dummy = 0; i_dummy < i_sel_l; i_dummy++)
{
gtk_clist_unselect_row( p_clist, pi_selected[i_dummy], 0 );
gtk_clist_unselect_row( p_clist, pi_selected[i_dummy], 1 );
}
free( pi_selected );
gtk_clist_thaw( p_clist );
vlc_mutex_unlock( &p_intf->change_lock );
}
void
on_playlist_select_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
}
gboolean
on_playlist_clist_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
{
intf_thread_t * p_intf = GetIntf( GTK_WIDGET( widget ), "intf_playlist" );
if( ( event->button ).type == GDK_2BUTTON_PRESS )
{
GtkCList * p_clist;
gint i_row;
gint i_col;
p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_playlist ), "playlist_clist" ) );
if( gtk_clist_get_selection_info( p_clist, (event->button).x,
(event->button).y, &i_row, &i_col ) == 1 )
{
/* clicked is in range. */
if( p_intf->p_input != NULL )
{
/* FIXME: temporary hack */
p_intf->p_input->b_eof = 1;
}
intf_PlaylistJumpto( p_main->p_playlist, i_row - 1 );
p_main->p_playlist->b_stopped = 0;
}
return TRUE;
}
return FALSE;
}
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)
{
/* catch the interface back */
intf_thread_t * p_intf = GetIntf( GTK_WIDGET(widget), "intf_playlist" );
GtkCList * p_clist;
gint i_row;
gint i_col;
int i_end = p_main->p_playlist->i_size;
p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_playlist ), "playlist_clist" ) );
if( gtk_clist_get_selection_info( p_clist, x, y, &i_row, &i_col ) == 1 )
{
/* we are dropping somewhere into the clist items */
GnomeDropDataReceived( p_intf, data, info, i_row );
}
else
{
/* else, put that at the end of the playlist */
GnomeDropDataReceived( p_intf, data, info, PLAYLIST_END );
}
intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );
p_main->p_playlist->b_stopped = 0;
}
gboolean
on_playlist_clist_drag_motion (GtkWidget *widget,
GdkDragContext *drag_context,
gint x,
gint y,
guint time,
gpointer user_data)
{
GtkCList * p_clist;
gint i_row;
gint i_col;
int i_dummy;
GdkColor color;
intf_thread_t *p_intf = GetIntf( GTK_WIDGET(widget), "intf_playlist" );
p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_playlist ), "playlist_clist" ) );
if( !GTK_WIDGET_TOPLEVEL(widget) )
{
gdk_window_raise( p_intf->p_sys->p_playlist->window );
}
color.red = 0xffff;
color.blue = 0xffff;
color.green = 0xffff;
gtk_clist_freeze( p_clist );
for( i_dummy = 0; i_dummy < p_clist->rows; i_dummy++)
{
gtk_clist_set_background ( p_clist, i_dummy , &color);
}
color.red = 0xffff;
color.blue = 0;
color.green = 0;
gtk_clist_set_background( p_clist, p_main->p_playlist->i_index , &color );
if( gtk_clist_get_selection_info( p_clist, x, y, &i_row, &i_col ) == 1)
{
color.red = 0;
color.blue = 0xf000;
color.green = 0x9000;
gtk_clist_set_background ( p_clist, i_row - 1, &color);
gtk_clist_set_background ( p_clist, i_row, &color);
}
gtk_clist_thaw( p_clist );
return TRUE;
}
void GnomeDropDataReceived( intf_thread_t * p_intf,
GtkSelectionData * p_data, guint i_info, int i_position)
{
/* first we'll have to split against all the '\n' we have */
gchar * p_protocol;
gchar * p_temp;
gchar * p_string = p_data->data ;
GList * p_files = NULL;
GtkCList * p_clist;
/* catch the playlist back */
playlist_t * p_playlist = p_main->p_playlist;
/* if this has been URLencoded, decode it
*
* Is it a good thing to do it in place ?
* probably not...
*/
if( i_info == DROP_ACCEPT_TEXT_URI_LIST )
{
urldecode_path( p_string );
}
/* this cuts string into single file drops */
/* this code was borrowed from xmms, thx guys :) */
while( *p_string)
{
p_temp = strchr( p_string, '\n' );
if( p_temp )
{
if( *( p_temp - 1 ) == '\r' )
{
*( p_temp - 1) = '\0';
}
*p_temp = '\0';
}
/* do we have a protocol or something ? */
p_protocol = strstr( p_string, ":/" );
if( p_protocol != NULL )
{
p_protocol = calloc( p_protocol - p_string + 2, sizeof(char) );
p_protocol = strncpy( p_protocol, p_string,
strstr( p_string, ":/" ) + 1 - p_string );
intf_WarnMsg( 4, "Protocol dropped is %s", p_protocol );
p_string += strlen( p_protocol );
/* Allowed things are proto: or proto:// */
if( p_string[0] == '/' && p_string[1] == '/')
{
/* eat one '/' */
p_string++;
}
intf_WarnMsg( 4, " Dropped %s", p_string );
}
else
{
p_protocol = strdup( "" );
}
/* if it uses the file protocol we can do something, else, sorry :(
* I think this is a good choice for now, as we don't have any
* ability to read http:// or ftp:// files
* what about adding dvd:// to the list of authorized proto ? */
if( strcmp( p_protocol, "file:" ) == 0 )
{
p_files = g_list_concat( p_files, GnomeReadFiles( p_string ) );
}
/* free the malloc and go on... */
free( p_protocol );
if( !p_temp )
{
break;
}
p_string = p_temp + 1;
}
/* At this point, we have a nice big list maybe NULL */
if( p_files != NULL )
{
/* lock the interface */
vlc_mutex_lock( &p_intf->change_lock );
intf_WarnMsg( 4, "List has %d elements", g_list_length( p_files ) );
GnomeAppendList( p_playlist, i_position, p_files );
/* get the CList and rebuild it. */
p_clist = GTK_CLIST( lookup_widget( p_intf->p_sys->p_playlist,
"playlist_clist" ) );
GnomeRebuildCList( p_clist , p_playlist );
/* unlock the interface */
vlc_mutex_unlock( &p_intf->change_lock );
p_main->p_playlist->b_stopped = 0;
}
}
void GnomeDeleteGListItem( gpointer data, gpointer param )
{
int i_cur_row = ( int )data;
intf_thread_t * p_intf = param;
intf_PlaylistDelete( p_main->p_playlist, i_cur_row );
/* are we deleting the current played stream */
if( p_intf->p_sys->i_playing == i_cur_row )
{
/* next ! */
p_intf->p_input->b_eof = 1;
/* this has to set the slider to 0 */
/* step minus one */
p_intf->p_sys->i_playing-- ;
p_main->p_playlist->i_index-- ;
}
}
gint GnomeCompareItems( gconstpointer a, gconstpointer b )
{
return b - a;
}
/* check a file (string) against supposed valid extension */
int GnomeHasValidExtension( gchar * psz_filename )
{
char * ppsz_ext[6] = { "mpg", "mpeg", "vob", "mp2", "ts", "ps" };
int i_ext = 6;
int i_dummy;
gchar * psz_ext = strrchr( psz_filename, '.' ) + sizeof( char );
for( i_dummy = 0 ; i_dummy < i_ext ; i_dummy++ )
{
if( strcmp( psz_ext, ppsz_ext[i_dummy] ) == 0 )
{
return 1;
}
}
return 0;
}
/* recursive function: descend into folders and build a list of
* valid filenames */
GList * GnomeReadFiles( gchar * psz_fsname )
{
struct stat statbuf;
GList * p_current = NULL;
/* get the attributes of this file */
stat( psz_fsname, &statbuf );
/* is it a regular file ? */
if( S_ISREG( statbuf.st_mode ) )
{
if( GnomeHasValidExtension( psz_fsname ) )
{
intf_WarnMsg( 2, "%s is a valid file. Stacking on the playlist",
psz_fsname );
return g_list_append( NULL, g_strdup( psz_fsname ) );
}
else
{
return NULL;
}
}
/* is it a directory (should we check for symlinks ?) */
else if( S_ISDIR( statbuf.st_mode ) )
{
/* have to cd into this dir */
DIR * p_current_dir = opendir( psz_fsname );
struct dirent * p_dir_content;
intf_WarnMsg( 2, "%s is a folder.", psz_fsname );
if( p_current_dir == NULL )
{
/* something went bad, get out of here ! */
return p_current;
}
p_dir_content = readdir( p_current_dir );
/* while we still have entries in the directory */
while( p_dir_content != NULL )
{
/* if it is "." or "..", forget it */
if( ( strcmp( p_dir_content->d_name, "." ) != 0 ) &&
( strcmp( p_dir_content->d_name, ".." ) != 0 ) )
{
/* else build the new directory by adding
fsname "/" and the current entry name
(kludgy :()
*/
char * psz_newfs = malloc ( 2 + strlen( psz_fsname ) +
strlen( p_dir_content->d_name ) * sizeof(char) );
strcpy( psz_newfs, psz_fsname );
strcpy( psz_newfs + strlen( psz_fsname ) + 1,
p_dir_content->d_name );
psz_newfs[strlen( psz_fsname )] = '/';
p_current = g_list_concat( p_current,
GnomeReadFiles( psz_newfs ) );
g_free( psz_newfs );
}
p_dir_content = readdir( p_current_dir );
}
return p_current;
}
return NULL;
}
/* add items in a playlist
* when i_pos==-1 add to the end of the list...
*/
int GnomeAppendList( playlist_t * p_playlist, int i_pos, GList * p_list )
{
guint i_dummy;
guint i_length;
i_length = g_list_length( p_list );
for( i_dummy = 0; i_dummy < i_length ; i_dummy++ )
{
intf_PlaylistAdd( p_playlist,
/* ok; this is a really nasty trick to insert
the item where they are suppose to go but, hey
this works :P (btw, you are really nasty too) */
i_pos==PLAYLIST_END?PLAYLIST_END:( i_pos + i_dummy ),
g_list_nth_data( p_list, i_dummy ) );
}
return 0;
}
/* statis timeouted function */
void GnomePlayListManage( intf_thread_t * p_intf )
{
/* this thing really sucks for now :( */
/* TODO speak more with interface/intf_playlist.c */
playlist_t * p_playlist = p_main->p_playlist ;
GtkCList * p_clist;
p_clist = GTK_CLIST( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_playlist ), "playlist_clist" ) );
if( p_intf->p_sys->i_playing != p_playlist->i_index )
{
GdkColor color;
color.red = 0xffff;
color.blue = 0;
color.green = 0;
gtk_clist_set_background( p_clist, p_playlist->i_index, &color );
if( p_intf->p_sys->i_playing != -1 )
{
color.red = 0xffff;
color.blue = 0xffff;
color.green = 0xffff;
gtk_clist_set_background( p_clist, p_intf->p_sys->i_playing,
&color);
}
p_intf->p_sys->i_playing = p_playlist->i_index;
}
}
void GnomeRebuildCList( GtkCList * p_clist, playlist_t * p_playlist )
{
int i_dummy;
gchar * ppsz_text[2];
GdkColor red;
red.red = 65535;
red.blue = 0;
red.green = 0;
gtk_clist_freeze( p_clist );
gtk_clist_clear( p_clist );
for( i_dummy = 0; i_dummy < p_playlist->i_size ; i_dummy++ )
{
#ifdef WIN32 /* WIN32 HACK */
ppsz_text[0] = g_strdup( "" );
#else
ppsz_text[0] = g_strdup( rindex( (char *)(p_playlist->p_item[
p_playlist->i_size - 1 - i_dummy].psz_name ), '/' ) + 1 );
#endif
ppsz_text[1] = g_strdup( "no info");
gtk_clist_insert( p_clist, 0, ppsz_text );
free( ppsz_text[0] );
free( ppsz_text[1] );
}
gtk_clist_set_background( p_clist, p_playlist->i_index, &red);
gtk_clist_thaw( p_clist );
}
/*****************************************************************************
* intf_gnome.c: Gnome interface
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: intf_gnome.c,v 1.39 2001/05/15 01:01:44 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#define MODULE_NAME gnome
#include "modules_inner.h"
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "defs.h"
#include <errno.h> /* ENOMEM */
#include <stdlib.h> /* free() */
#include <string.h> /* strerror() */
#include <stdio.h>
#include <gnome.h>
#include "config.h"
#include "common.h"
#include "threads.h"
#include "mtime.h"
#include "tests.h"
#include "modules.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "intf_msg.h"
#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"
#include "main.h"
/*****************************************************************************
* Local prototypes.
*****************************************************************************/
static int intf_Probe ( probedata_t *p_data );
static int intf_Open ( intf_thread_t *p_intf );
static void intf_Close ( intf_thread_t *p_intf );
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 GnomeTitleMenu ( gpointer, GtkWidget *,
void (*pf_toggle)(GtkCheckMenuItem *, gpointer) );
static gint GnomeSetupMenu ( intf_thread_t * p_intf );
static void GnomeDisplayDate ( GtkAdjustment *p_adj );
static gint GnomeModeManage ( intf_thread_t * p_intf );
/*****************************************************************************
* g_atexit: kludge to avoid the Gnome thread to segfault at exit
*****************************************************************************
* gtk_init() makes several calls to g_atexit() which calls atexit() to
* register tidying callbacks to be called at program exit. Since the Gnome
* plugin is likely to be unloaded at program exit, we have to export this
* symbol to intercept the g_atexit() calls. Talk about crude hack.
*****************************************************************************/
void g_atexit( GVoidFunc func )
{
intf_thread_t *p_intf = p_main->p_intf;
if( p_intf->p_sys->pf_gdk_callback == NULL )
{
p_intf->p_sys->pf_gdk_callback = func;
}
else if( p_intf->p_sys->pf_gtk_callback == NULL )
{
p_intf->p_sys->pf_gtk_callback = func;
}
/* else nothing, but we could do something here */
return;
}
/*****************************************************************************
* Functions exported as capabilities. They are declared as static so that
* we don't pollute the namespace too much.
*****************************************************************************/
void _M( intf_getfunctions )( function_list_t * p_function_list )
{
p_function_list->pf_probe = intf_Probe;
p_function_list->functions.intf.pf_open = intf_Open;
p_function_list->functions.intf.pf_close = intf_Close;
p_function_list->functions.intf.pf_run = intf_Run;
}
/*****************************************************************************
* intf_Probe: probe the interface and return a score
*****************************************************************************
* This function tries to initialize Gnome and returns a score to the
* plugin manager so that it can select the best plugin.
*****************************************************************************/
static int intf_Probe( probedata_t *p_data )
{
if( TestMethod( INTF_METHOD_VAR, "gnome" ) )
{
return( 999 );
}
if( TestProgram( "gnome-vlc" ) )
{
return( 200 );
}
return( 100 );
}
/*****************************************************************************
* intf_Open: initialize and create window
*****************************************************************************/
static int intf_Open( intf_thread_t *p_intf )
{
/* Allocate instance and initialize some members */
p_intf->p_sys = malloc( sizeof( intf_sys_t ) );
if( p_intf->p_sys == NULL )
{
intf_ErrMsg("error: %s", strerror(ENOMEM));
return( 1 );
}
/* Initialize Gnome thread */
p_intf->p_sys->b_popup_changed = 0;
p_intf->p_sys->b_window_changed = 0;
p_intf->p_sys->b_playlist_changed = 0;
p_intf->p_sys->b_slider_free = 1;
p_intf->p_sys->b_mode_changed = 1;
p_intf->p_sys->i_intf_mode = FILE_MODE;
p_intf->p_sys->pf_gtk_callback = NULL;
p_intf->p_sys->pf_gdk_callback = NULL;
return( 0 );
}
/*****************************************************************************
* intf_Close: destroy interface window
*****************************************************************************/
static void intf_Close( intf_thread_t *p_intf )
{
/* Destroy structure */
free( p_intf->p_sys );
}
/*****************************************************************************
* intf_Run: Gnome thread
*****************************************************************************
* this part of the interface is in a separate thread so that we can call
* gtk_main() from within it without annoying the rest of the program.
* XXX: the approach may look kludgy, and probably is, but I could not find
* a better way to dynamically load a Gnome interface at runtime.
*****************************************************************************/
static void intf_Run( intf_thread_t *p_intf )
{
/* gnome_init needs to know the command line. We don't care, so we
* give it an empty one */
char *p_args[] = { "" };
int i_args = 1;
/* The data types we are allowed to receive */
static GtkTargetEntry target_table[] =
{
{ "text/uri-list", 0, DROP_ACCEPT_TEXT_URI_LIST },
{ "text/plain", 0, DROP_ACCEPT_TEXT_PLAIN }
};
/* intf_Manage callback timeout */
int i_timeout;
/* Initialize Gnome */
gnome_init( p_main->psz_arg0, VERSION, i_args, p_args );
/* 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_playlist = create_intf_playlist();
/* Set the title of the main window */
gtk_window_set_title( GTK_WINDOW(p_intf->p_sys->p_window),
VOUT_TITLE " (Gnome interface)");
/* Accept file drops on the main window */
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_title = P_LABEL( "label_title" );
p_intf->p_sys->p_label_chapter = P_LABEL( "label_chapter" );
#undef P_LABEL
/* Connect the date display to the slider */
#define P_SLIDER GTK_RANGE( gtk_object_get_data( \
GTK_OBJECT( p_intf->p_sys->p_window ), "slider" ) )
p_intf->p_sys->p_adj = gtk_range_get_adjustment( P_SLIDER );
gtk_signal_connect ( GTK_OBJECT( p_intf->p_sys->p_adj ), "value_changed",
GTK_SIGNAL_FUNC( GnomeDisplayDate ), NULL );
p_intf->p_sys->f_adj_oldvalue = 0;
#undef P_SLIDER
/* We don't create these ones yet because we perhaps won't need them */
p_intf->p_sys->p_about = NULL;
p_intf->p_sys->p_modules = NULL;
p_intf->p_sys->p_fileopen = NULL;
p_intf->p_sys->p_disc = NULL;
p_intf->p_sys->p_network = NULL;
p_intf->p_sys->p_preferences = NULL;
p_intf->p_sys->p_jump = NULL;
/* Store p_intf to keep an eye on it */
gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),
"p_intf", 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_playlist ),
"p_intf", p_intf );
gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_adj),
"p_intf", p_intf );
/* Show the control window */
gtk_widget_show( p_intf->p_sys->p_window );
/* Sleep to avoid using all CPU - since some interfaces needs to access
* keyboard events, a 100ms delay is a good compromise */
i_timeout = gtk_timeout_add( INTF_IDLE_SLEEP / 1000, GnomeManage, p_intf );
/* Enter gnome mode */
gtk_main();
/* Remove the timeout */
gtk_timeout_remove( i_timeout );
/* Get rid of stored callbacks so we can unload the plugin */
if( p_intf->p_sys->pf_gtk_callback != NULL )
{
p_intf->p_sys->pf_gtk_callback( );
p_intf->p_sys->pf_gtk_callback = NULL;
}
if( p_intf->p_sys->pf_gdk_callback != NULL )
{
p_intf->p_sys->pf_gdk_callback( );
p_intf->p_sys->pf_gdk_callback = NULL;
}
}
/* following functions are local */
/*****************************************************************************
* GnomeManage: manage main thread messages
*****************************************************************************
* In this function, called approx. 10 times a second, we check what the
* main program wanted to tell us.
*****************************************************************************/
static gint GnomeManage( gpointer p_data )
{
#define p_intf ((intf_thread_t *)p_data)
vlc_mutex_lock( &p_intf->change_lock );
/* If the "display popup" flag has changed */
if( p_intf->b_menu_change )
{
gnome_popup_menu_do_popup( p_intf->p_sys->p_popup,
NULL, NULL, NULL, NULL );
p_intf->b_menu_change = 0;
}
/* update the playlist */
GnomePlayListManage( p_intf );
if( p_intf->p_input != NULL && !p_intf->b_die/*&& !p_intf->p_input->b_die*/ )
{
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 )
{
GnomeModeManage( p_intf );
}
// vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
/* Update language/chapter menus after user request */
GnomeSetupMenu( p_intf );
#define p_area p_intf->p_input->stream.p_selected_area
/* Update menus when chapter changes */
p_intf->p_sys->b_chapter_update =
( p_intf->p_sys->i_part != p_area->i_part );
if( p_intf->p_input->stream.b_seekable )
{
/* Manage the slider */
newvalue = p_intf->p_sys->p_adj->value;
/* If the user hasn't touched the slider since the last time,
* then the input can safely change it */
if( newvalue == p_intf->p_sys->f_adj_oldvalue )
{
/* Update the value */
p_intf->p_sys->p_adj->value = p_intf->p_sys->f_adj_oldvalue =
( 100. * p_area->i_tell ) / p_area->i_size;
gtk_signal_emit_by_name( GTK_OBJECT( p_intf->p_sys->p_adj ),
"value_changed" );
}
/* Otherwise, send message to the input if the user has
* finished dragging the slider */
else if( p_intf->p_sys->b_slider_free )
{
off_t i_seek = ( newvalue * p_area->i_size ) / 100;
input_Seek( p_intf->p_input, i_seek );
/* Update the old value */
p_intf->p_sys->f_adj_oldvalue = newvalue;
}
}
#undef p_area
}
/* Manage core vlc functions through the callback */
p_intf->pf_manage( p_intf );
if( p_intf->b_die )
{
vlc_mutex_unlock( &p_intf->change_lock );
/* Prepare to die, young Skywalker */
gtk_main_quit();
/* Just in case */
return( FALSE );
}
vlc_mutex_unlock( &p_intf->change_lock );
return( TRUE );
#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,
"%ss %d to %d", psz_item_name, i_item + 1, i_item + 10);
psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
p_item_group = gtk_menu_item_new_with_label( psz_name );
gtk_widget_show( p_item_group );
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
*****************************************************************************
* Sets up menus with information from input:
* -languages
* -sub-pictures
* Warning: since this function is designed to be called by management
* function, the interface lock has to be taken
*****************************************************************************/
static gint GnomeLanguageMenus( gpointer p_data,
GtkWidget * p_root,
es_descriptor_t * p_es,
gint i_cat,
void(*pf_toggle )( GtkCheckMenuItem *, gpointer ) )
{
intf_thread_t * p_intf;
GtkWidget * p_menu;
GtkWidget * p_separator;
GtkWidget * p_item;
GtkWidget * p_item_active;
GSList * p_group;
char psz_name[ GNOME_MENU_LABEL_SIZE ];
gint i_item;
gint i;
/* cast */
p_intf = (intf_thread_t *)p_data;
/* temporary hack to avoid blank menu when an open menu is removed */
if( GTK_MENU_ITEM(p_root)->submenu != NULL )
{
gtk_menu_popdown( GTK_MENU( GTK_MENU_ITEM(p_root)->submenu ) );
}
/* removes previous menu */
gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_root ) );
gtk_widget_set_sensitive( p_root, FALSE );
p_group = NULL;
/* menu container */
p_menu = gtk_menu_new();
/* special case for "off" item */
snprintf( psz_name, 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 );
p_group = gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_item ) );
gtk_widget_show( p_item );
/* signal hanling for off */
gtk_signal_connect( GTK_OBJECT( p_item ), "toggled",
GTK_SIGNAL_FUNC ( pf_toggle ), NULL );
gtk_menu_append( GTK_MENU( p_menu ), p_item );
p_separator = gtk_menu_item_new();
gtk_widget_set_sensitive( p_separator, FALSE );
gtk_widget_show( p_separator );
gtk_menu_append( GTK_MENU( p_menu ), p_separator );
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
p_item_active = NULL;
i_item = 0;
/* create a set of language buttons and append them to the container */
for( i = 0 ; i < p_intf->p_input->stream.i_es_number ; i++ )
{
if( p_intf->p_input->stream.pp_es[i]->i_cat == i_cat )
{
i_item++;
strcpy( psz_name, p_intf->p_input->stream.pp_es[i]->psz_desc );
if( psz_name[0] == '\0' )
{
snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
"Language %d", i_item );
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( p_es == p_intf->p_input->stream.pp_es[i] )
{
/* don't lose p_item when we append into menu */
p_item_active = p_item;
}
gtk_widget_show( p_item );
/* setup signal hanling */
gtk_signal_connect( GTK_OBJECT( p_item ), "toggled",
GTK_SIGNAL_FUNC( pf_toggle ),
(gpointer)( p_intf->p_input->stream.pp_es[i] ) );
gtk_menu_append( GTK_MENU( p_menu ), p_item );
}
}
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
/* link the new menu to the menubar item */
gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_root ), p_menu );
/* acitvation will call signals so we can only do it
* when submenu is attached to menu - to get intf_window */
if( p_item_active != NULL )
{
gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_active ),
TRUE );
}
/* be sure that menu is sensitive if non empty */
if( i_item > 0 )
{
gtk_widget_set_sensitive( p_root, TRUE );
}
return TRUE;
}
#if 1
/*****************************************************************************
* GnomeTitleMenu: sets menus for titles and chapters selection
*****************************************************************************
* Generates two types of menus:
* -simple list of titles
* -cascaded lists of chapters for each title
*****************************************************************************/
static gint GnomeTitleMenu( gpointer p_data,
GtkWidget * p_navigation,
void(*pf_toggle )( GtkCheckMenuItem *, gpointer ) )
{
intf_thread_t * p_intf;
char psz_name[ GNOME_MENU_LABEL_SIZE ];
GtkWidget * p_title_menu;
GtkWidget * p_title_submenu;
GtkWidget * p_title_item;
GtkWidget * p_item_active;
GtkWidget * p_chapter_menu;
GtkWidget * p_chapter_submenu;
GtkWidget * p_title_menu_item;
GtkWidget * p_chapter_menu_item;
GtkWidget * p_item;
GSList * p_title_group;
GSList * p_chapter_group;
gint i_title;
gint i_chapter;
gint i_title_nb;
gint i_chapter_nb;
/* cast */
p_intf = (intf_thread_t*)p_data;
/* temporary hack to avoid blank menu when an open menu is removed */
if( GTK_MENU_ITEM(p_navigation)->submenu != NULL )
{
gtk_menu_popdown( GTK_MENU( GTK_MENU_ITEM(p_navigation)->submenu ) );
}
/* removes previous menu */
gtk_menu_item_remove_submenu( GTK_MENU_ITEM( p_navigation ) );
gtk_widget_set_sensitive( p_navigation, FALSE );
p_title_menu = gtk_menu_new();
p_title_group = NULL;
p_title_submenu = NULL;
p_title_menu_item = NULL;
p_chapter_group = NULL;
p_chapter_submenu = NULL;
p_chapter_menu_item = NULL;
p_item_active = NULL;
i_title_nb = p_intf->p_input->stream.i_area_nb;
/* loop on titles */
for( i_title = 1 ; i_title < i_title_nb ; i_title++ )
{
/* we group titles in packets of ten for small screens */
if( ( i_title % 10 == 1 ) && ( i_title_nb > 20 ) )
{
if( i_title != 1 )
{
gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_menu_item ),
p_title_submenu );
gtk_menu_append( GTK_MENU( p_title_menu ), p_title_menu_item );
}
snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
"%d - %d", i_title, i_title + 9 );
psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
p_title_menu_item = gtk_menu_item_new_with_label( psz_name );
gtk_widget_show( p_title_menu_item );
p_title_submenu = gtk_menu_new();
}
snprintf( psz_name, 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,
psz_name );
p_title_group =
gtk_radio_menu_item_group( GTK_RADIO_MENU_ITEM( p_title_item ) );
if( p_intf->p_input->stream.pp_areas[i_title] ==
p_intf->p_input->stream.p_selected_area )
{
p_item_active = p_title_item;
}
/* setup signal hanling */
gtk_signal_connect( GTK_OBJECT( p_title_item ),
"toggled",
GTK_SIGNAL_FUNC( pf_toggle ),
(gpointer)(p_intf->p_input->stream.pp_areas[i_title]) );
if( p_intf->p_input->stream.i_area_nb > 1 )
{
/* be sure that menu is sensitive */
gtk_widget_set_sensitive( p_navigation, TRUE );
}
}
else
#endif
{
p_title_item = gtk_menu_item_new_with_label( psz_name );
#if 1
p_chapter_menu = gtk_menu_new();
i_chapter_nb =
p_intf->p_input->stream.pp_areas[i_title]->i_part_nb;
for( i_chapter = 0 ; i_chapter < i_chapter_nb ; i_chapter++ )
{
/* we group chapters in packets of ten for small screens */
if( ( i_chapter % 10 == 0 ) && ( i_chapter_nb > 20 ) )
{
if( i_chapter != 0 )
{
gtk_menu_item_set_submenu(
GTK_MENU_ITEM( p_chapter_menu_item ),
p_chapter_submenu );
gtk_menu_append( GTK_MENU( p_chapter_menu ),
p_chapter_menu_item );
}
snprintf( psz_name, GNOME_MENU_LABEL_SIZE,
"%d - %d", i_chapter + 1, i_chapter + 10 );
psz_name[ GNOME_MENU_LABEL_SIZE - 1 ] = '\0';
p_chapter_menu_item =
gtk_menu_item_new_with_label( psz_name );
gtk_widget_show( p_chapter_menu_item );
p_chapter_submenu = gtk_menu_new();
}
snprintf( psz_name, 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 ) );
gtk_widget_show( p_item );
#define p_area p_intf->p_input->stream.pp_areas[i_title]
if( ( p_area == p_intf->p_input->stream.p_selected_area ) &&
( p_area->i_part == i_chapter + 1 ) )
{
p_item_active = p_item;
}
#undef p_area
/* setup signal hanling */
gtk_signal_connect( GTK_OBJECT( p_item ),
"toggled",
GTK_SIGNAL_FUNC( pf_toggle ),
(gpointer)POS2DATA( i_title, i_chapter + 1) );
if( i_chapter_nb > 20 )
{
gtk_menu_append( GTK_MENU( p_chapter_submenu ), p_item );
}
else
{
gtk_menu_append( GTK_MENU( p_chapter_menu ), p_item );
}
}
if( i_chapter_nb > 20 )
{
gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_chapter_menu_item ),
p_chapter_submenu );
gtk_menu_append( GTK_MENU( p_chapter_menu ),
p_chapter_menu_item );
}
/* link the new menu to the title menu item */
gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_item ),
p_chapter_menu );
if( p_intf->p_input->stream.pp_areas[i_title]->i_part_nb > 1 )
{
/* be sure that menu is sensitive */
gtk_widget_set_sensitive( p_navigation, TRUE );
}
#else
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 );
if( i_title_nb > 20 )
{
gtk_menu_append( GTK_MENU( p_title_submenu ), p_title_item );
}
else
{
gtk_menu_append( GTK_MENU( p_title_menu ), p_title_item );
}
}
if( i_title_nb > 20 )
{
gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_title_menu_item ),
p_title_submenu );
gtk_menu_append( GTK_MENU( p_title_menu ), p_title_menu_item );
}
/* be sure that menu is sensitive */
gtk_widget_set_sensitive( p_title_menu, TRUE );
/* link the new menu to the menubar item */
gtk_menu_item_set_submenu( GTK_MENU_ITEM( p_navigation ), p_title_menu );
if( p_item_active != NULL )
{
gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( p_item_active ),
TRUE );
}
#if 0
if( p_intf->p_input->stream.i_area_nb > 1 )
{
/* be sure that menu is sensitive */
gtk_widget_set_sensitive( p_navigation, TRUE );
}
#endif
return TRUE;
}
#endif
/*****************************************************************************
* GnomeSetupMenu: function that generates title/chapter/audio/subpic
* menus with help from preceding functions
*****************************************************************************/
static gint GnomeSetupMenu( intf_thread_t * p_intf )
{
es_descriptor_t * p_audio_es;
es_descriptor_t * p_spu_es;
GtkWidget * p_menubar_menu;
GtkWidget * p_popup_menu;
gint i;
p_intf->p_sys->b_chapter_update |= p_intf->p_sys->b_title_update;
p_intf->p_sys->b_angle_update |= p_intf->p_sys->b_title_update;
p_intf->p_sys->b_audio_update |= p_intf->p_sys->b_title_update;
p_intf->p_sys->b_spu_update |= p_intf->p_sys->b_title_update;
if( p_intf->p_sys->b_title_update )
{
char psz_title[5];
p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "menubar_title" ) );
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 );
psz_title[ 4 ] = '\0';
gtk_label_set_text( p_intf->p_sys->p_label_title, psz_title );
p_intf->p_sys->b_title_update = 0;
}
if( p_intf->p_sys->b_chapter_update )
{
char psz_chapter[5];
p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_popup ), "popup_navigation" ) );
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" ) );
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 );
psz_chapter[ 4 ] = '\0';
gtk_label_set_text( p_intf->p_sys->p_label_chapter, psz_chapter );
p_intf->p_sys->i_part =
p_intf->p_input->stream.p_selected_area->i_part;
p_intf->p_sys->b_chapter_update = 0;
}
if( p_intf->p_sys->b_angle_update )
{
p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "menubar_angle" ) );
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" ) );
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;
}
/* look for selected ES */
p_audio_es = NULL;
p_spu_es = NULL;
for( i = 0 ; i < p_intf->p_input->stream.i_selected_es_number ; i++ )
{
if( p_intf->p_input->stream.pp_selected_es[i]->i_cat == AUDIO_ES )
{
p_audio_es = p_intf->p_input->stream.pp_selected_es[i];
}
if( p_intf->p_input->stream.pp_selected_es[i]->i_cat == SPU_ES )
{
p_spu_es = p_intf->p_input->stream.pp_selected_es[i];
}
}
/* audio menus */
if( p_intf->p_sys->b_audio_update )
{
/* find audio root menu */
p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "menubar_audio" ) );
p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_popup ), "popup_audio" ) );
GnomeLanguageMenus( p_intf, p_menubar_menu, p_audio_es, AUDIO_ES,
on_menubar_audio_toggle );
GnomeLanguageMenus( p_intf, p_popup_menu, p_audio_es, AUDIO_ES,
on_popup_audio_toggle );
p_intf->p_sys->b_audio_update = 0;
}
/* sub picture menus */
if( p_intf->p_sys->b_spu_update )
{
/* find spu root menu */
p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "menubar_subtitle" ) );
p_popup_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_popup ), "popup_subtitle" ) );
GnomeLanguageMenus( p_intf, p_menubar_menu, p_spu_es, SPU_ES,
on_menubar_subtitle_toggle );
GnomeLanguageMenus( p_intf, p_popup_menu, p_spu_es, SPU_ES,
on_popup_subtitle_toggle );
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;
}
/*****************************************************************************
* GnomeDisplayDate: display stream date
*****************************************************************************
* This function displays the current date related to the position in
* the stream. It is called whenever the slider changes its value.
*****************************************************************************/
void GnomeDisplayDate( GtkAdjustment *p_adj )
{
intf_thread_t *p_intf;
p_intf = gtk_object_get_data( GTK_OBJECT( p_adj ), "p_intf" );
if( p_intf->p_input != NULL )
{
#define p_area p_intf->p_input->stream.p_selected_area
char psz_time[ OFFSETTOTIME_MAX_SIZE ];
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
gtk_frame_set_label( 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 ) );
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
#undef p_area
}
}
/*****************************************************************************
* GnomeModeManage
*****************************************************************************/
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 ) );
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 ) );
/* 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_slider = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "slider_handlebox" ) );
/* 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"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_play"), TRUE );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_pause"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_slow"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_fast"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_back"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_stop"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_play"), TRUE );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_pause"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_slow"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_fast"), b_control );
/* 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( 3,
"intf info: menus refreshed as stream has changed" );
#undef GETWIDGET
return TRUE;
}
/*****************************************************************************
* intf_gnome.h: private Gnome interface description
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: intf_gnome.h,v 1.11 2001/05/10 06:47:31 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Drag'n'drop stuff
*****************************************************************************/
#define DROP_ACCEPT_TEXT_URI_LIST 0
#define DROP_ACCEPT_TEXT_PLAIN 1
/*****************************************************************************
* Interface modes
*****************************************************************************/
#define FILE_MODE 0
#define NET_MODE 1
#define DVD_MODE 2
#define VCD_MODE 3
/*****************************************************************************
* String sizes
*****************************************************************************/
#define GNOME_MENU_LABEL_SIZE 64
/*****************************************************************************
* Convert user_data structures to title and chapter information
*****************************************************************************/
#define DATA2TITLE( user_data ) ( (gint)(user_data) >> 16 )
#define DATA2CHAPTER( user_data ) ( (gint)(user_data) & 0xffff )
#define POS2DATA( title, chapter ) ( ((title) << 16) | ((chapter) & 0xffff) )
/*****************************************************************************
* 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
*****************************************************************************/
typedef struct intf_sys_s
{
/* special actions */
boolean_t b_popup_changed; /* display menu ? */
boolean_t b_window_changed; /* window display toggled ? */
boolean_t b_playlist_changed; /* playlist display toggled ? */
boolean_t b_slider_free; /* slider status */
boolean_t b_title_update; /* do we need to update title menus */
boolean_t b_chapter_update; /* do we need to update
chapter menus */
boolean_t b_angle_update; /* do we need to update angle menus */
boolean_t b_audio_update; /* do we need to update audio menus */
boolean_t b_spu_update; /* do we need to update spu menus */
/* Windows and widgets */
GtkWidget * p_window; /* main window */
GtkWidget * p_popup; /* popup menu */
GtkWidget * p_playlist; /* playlist */
GtkWidget * p_modules; /* module manager */
GtkWidget * p_about; /* about window */
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_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 */
/* XXX: Ugly kludge, see intf_gnome.c */
void ( *pf_gtk_callback ) ( void );
void ( *pf_gdk_callback ) ( void );
} intf_sys_t;
############################################################################### ###############################################################################
# vlc (VideoLAN Client) gtk module Makefile # vlc (VideoLAN Client) gtk/gnome module Makefile
# (c)2001 VideoLAN # (c)2001 VideoLAN
############################################################################### ###############################################################################
...@@ -7,16 +7,17 @@ ...@@ -7,16 +7,17 @@
# Objects # Objects
# #
PLUGIN_C = gtk.o intf_gtk.o gtk_callbacks.o gtk_interface.o gtk_support.o gtk_open.o gtk_control.o gtk_menu.o gtk_playlist.o gtk_modules.o gtk_preferences.o PLUGIN_GTK = gtk.o intf_gtk.o gtk_interface.o gtk_support.o
BUILTIN_C = $(PLUGIN_C:%.o=BUILTIN_%.o) PLUGIN_GNOME = gnome.o intf_gnome.o gnome_interface.o gnome_support.o gnome_callbacks.o
PLUGIN_GTKCOMMON = gtk_display.o gtk_callbacks.o gtk_open.o gtk_control.o gtk_menu.o gtk_playlist.o gtk_modules.o gtk_preferences.o
ALL_OBJ = $(PLUGIN_C) $(BUILTIN_C) BUILTIN_GTK = $(PLUGIN_GTK:%.o=BUILTIN_GTK_%.o) \
$(PLUGIN_GTKCOMMON:%.o=BUILTIN_GTK_%.o)
BUILTIN_GNOME = $(PLUGIN_GNOME:%.o=BUILTIN_GNOME_%.o) \
$(PLUGIN_GTKCOMMON:%.o=BUILTIN_GNOME_%.o)
# ALL_OBJ = $(PLUGIN_GTK) $(PLUGIN_GNOME) $(PLUGIN_GTKCOMMON) \
# Special plugin modifications $(BUILTIN_GTK) $(BUILTIN_GNOME)
#
CFLAGS += $(CFLAGS_GTK)
# #
# Virtual targets # Virtual targets
...@@ -24,14 +25,42 @@ CFLAGS += $(CFLAGS_GTK) ...@@ -24,14 +25,42 @@ CFLAGS += $(CFLAGS_GTK)
include ../../Makefile.modules include ../../Makefile.modules
$(PLUGIN_GTKCOMMON): %.o: .dep/%.d
$(PLUGIN_GTKCOMMON): %.o: %.c
$(CC) $(CFLAGS) $(PCFLAGS) $(CFLAGS_GTK) -c -o $@ $<
$(PLUGIN_GTK): %.o: .dep/%.d
$(PLUGIN_GTK): %.o: %.c
$(CC) $(CFLAGS) $(PCFLAGS) $(CFLAGS_GTK) -DMODULE_NAME=gtk -c -o $@ $<
$(PLUGIN_GNOME): %.o: .dep/%.d
$(PLUGIN_GNOME): %.o: %.c
$(CC) $(CFLAGS) $(PCFLAGS) -DMODULE_NAME=gnome `gnome-config --cflags gtk gnomeui` -c -o $@ $<
$(BUILTIN_GTK): BUILTIN_GTK_%.o: .dep/%.d
$(BUILTIN_GTK): BUILTIN_GTK_%.o: %.c
$(CC) $(CFLAGS) $(CFLAGS_GTK) -DBUILTIN -DMODULE_NAME=gtk -c -o $@ $<
$(BUILTIN_GNOME): BUILTIN_GNOME_%.o: .dep/%.d
$(BUILTIN_GNOME): BUILTIN_GNOME_%.o: %.c
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=gnome `gnome-config --cflags gtk gnomeui` -c -o $@ $<
# #
# Real targets # Real targets
# #
../../lib/gtk.so: $(PLUGIN_C) ../../lib/gtk.so: $(PLUGIN_GTK) $(PLUGIN_GTKCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GTK) $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GTK)
../../lib/gtk.a: $(BUILTIN_C) ../../lib/gtk.a: $(BUILTIN_GTK)
ar r $@ $^ ar r $@ $^
$(RANLIB) $@ $(RANLIB) $@
../../lib/gnome.so: $(PLUGIN_GNOME) $(PLUGIN_GTKCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GNOME)
../../lib/gnome.a: $(BUILTIN_GNOME)
ar r $@ $^
$(RANLIB) $@
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gnome.c : Gnome plugin for vlc * gnome.c : Gnome plugin for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2000 VideoLAN * Copyright (C) 2000 VideoLAN
* $Id: gnome.c,v 1.7 2001/04/28 03:36:25 sam Exp $ * $Id: gnome.c,v 1.1 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
......
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gnome.h>
#include "gnome_callbacks.h"
#include "gnome_interface.h"
#include "gnome_support.h"
/*
* These wrappers are made necessary by a bug in glade that seems not
* to put user_data in c source of menuitems.
*/
void
GnomeMenubarFileOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkFileOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarDiscOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkDiscOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenbarNetworkOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkNetworkOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarExitActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkExit( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarWindowToggleActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkWindowToggle( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarFullscreenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkFullscreen( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarPlaylistActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkPlaylistShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarModulesActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkModulesShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarPreferencesActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkPreferencesShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomeMenubarAboutActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkAboutShow( GTK_WIDGET( menuitem ), NULL, "intf_window" );
}
void
GnomePopupPlayActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkControlPlay( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupPauseActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkControlPause( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupStopActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkControlStop( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupBackActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkControlBack( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupSlowActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkControlSlow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupFastActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkControlFast( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupWindowToggleActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkWindowToggle( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupFullscreenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkFullscreen( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupNextActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkPlaylistNext( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupPrevActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkPlaylistPrev( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupFileOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkFileOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupDiscOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkDiscOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupNetworkOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkNetworkOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupAboutActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkAboutShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupPlaylistActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkPlaylistShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupPreferencesActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkPreferencesShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePopupExitActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkExit( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
void
GnomePlaylistDiscOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkDiscOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_playlist" );
}
void
GnomePlaylistFileOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkFileOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_playlist" );
}
void
GnomePlaylistNetworkOpenActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkNetworkOpenShow( GTK_WIDGET( menuitem ), NULL, "intf_playlist" );
}
void
GnomePopupJumpActivate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkJumpShow( GTK_WIDGET( menuitem ), NULL, "intf_popup" );
}
#include <gnome.h>
#include "gtk_callbacks.h"
void
GnomeMenubarFileOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarDiscOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenbarNetworkOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarExitActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarWindowToggleActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarFullscreenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarPlaylistActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarModulesActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarPreferencesActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomeMenubarAboutActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupPlayActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupPauseActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupStopActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupBackActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupSlowActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupFastActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupWindowToggleActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupFullscreenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupNextActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupPrevActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupFileOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupDiscOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupNetworkOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupAboutActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupPlaylistActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupPreferencesActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupExitActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePlaylistDiscOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePlaylistFileOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePlaylistNetworkOpenActivate (GtkMenuItem *menuitem,
gpointer user_data);
void
GnomePopupJumpActivate (GtkMenuItem *menuitem,
gpointer user_data);
...@@ -22,35 +22,42 @@ static GnomeUIInfo menubar_file_menu_uiinfo[] = ...@@ -22,35 +22,42 @@ static GnomeUIInfo menubar_file_menu_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("_Open File..."), GNOME_APP_UI_ITEM, N_("_Open File..."),
N_("Open a File"), N_("Open a File"),
(gpointer) on_menubar_open_activate, NULL, NULL, (gpointer) GnomeMenubarFileOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Open _Disc..."), GNOME_APP_UI_ITEM, N_("Open _Disc..."),
N_("Open a DVD or VCD"), N_("Open a DVD or VCD"),
(gpointer) on_menubar_disc_activate, NULL, NULL, (gpointer) GnomeMenubarDiscOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CDROM, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CDROM,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("_Network Stream..."), GNOME_APP_UI_ITEM, N_("_Network Stream..."),
N_("Select a Network Stream"), N_("Select a Network Stream"),
(gpointer) on_menubar_network_activate, NULL, NULL, (gpointer) GnomeMenbarNetworkOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_EXIT_ITEM (on_menubar_exit_activate, NULL), GNOMEUIINFO_MENU_EXIT_ITEM (GnomeMenubarExitActivate, NULL),
GNOMEUIINFO_END GNOMEUIINFO_END
}; };
static GnomeUIInfo menubar_view_menu_uiinfo[] = static GnomeUIInfo menubar_view_menu_uiinfo[] =
{ {
{ {
GNOME_APP_UI_TOGGLEITEM, N_("_Fullscreen"), GNOME_APP_UI_ITEM, N_("_Hide interface"),
NULL, NULL,
(gpointer) on_menubar_fullscreen_activate, NULL, NULL, (gpointer) GnomeMenubarWindowToggleActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL
},
{
GNOME_APP_UI_ITEM, N_("_Fullscreen"),
NULL,
(gpointer) GnomeMenubarFullscreenActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
...@@ -80,14 +87,14 @@ static GnomeUIInfo menubar_view_menu_uiinfo[] = ...@@ -80,14 +87,14 @@ static GnomeUIInfo menubar_view_menu_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("_Playlist..."), GNOME_APP_UI_ITEM, N_("_Playlist..."),
N_("Open the playlist window"), N_("Open the playlist window"),
(gpointer) on_menubar_playlist_activate, NULL, NULL, (gpointer) GnomeMenubarPlaylistActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("_Modules..."), GNOME_APP_UI_ITEM, N_("_Modules..."),
N_("Open the plugin manager"), N_("Open the plugin manager"),
(gpointer) on_menubar_modules_activate, NULL, NULL, (gpointer) GnomeMenubarModulesActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
...@@ -111,13 +118,13 @@ static GnomeUIInfo menubar_settings_menu_uiinfo[] = ...@@ -111,13 +118,13 @@ static GnomeUIInfo menubar_settings_menu_uiinfo[] =
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_PREFERENCES_ITEM (on_menubar_preferences_activate, NULL), GNOMEUIINFO_MENU_PREFERENCES_ITEM (GnomeMenubarPreferencesActivate, NULL),
GNOMEUIINFO_END GNOMEUIINFO_END
}; };
static GnomeUIInfo menubar_help_menu_uiinfo[] = static GnomeUIInfo menubar_help_menu_uiinfo[] =
{ {
GNOMEUIINFO_MENU_ABOUT_ITEM (on_menubar_about_activate, NULL), GNOMEUIINFO_MENU_ABOUT_ITEM (GnomeMenubarAboutActivate, NULL),
GNOMEUIINFO_END GNOMEUIINFO_END
}; };
...@@ -150,7 +157,6 @@ create_intf_window (void) ...@@ -150,7 +157,6 @@ create_intf_window (void)
GtkWidget *toolbar_prev; GtkWidget *toolbar_prev;
GtkWidget *toolbar_next; GtkWidget *toolbar_next;
GtkWidget *vbox8; GtkWidget *vbox8;
GtkWidget *slider_handlebox;
GtkWidget *slider_frame; GtkWidget *slider_frame;
GtkWidget *slider; GtkWidget *slider;
GtkWidget *file_box; GtkWidget *file_box;
...@@ -159,13 +165,13 @@ create_intf_window (void) ...@@ -159,13 +165,13 @@ create_intf_window (void)
GtkWidget *label21; GtkWidget *label21;
GtkWidget *title_chapter_box; GtkWidget *title_chapter_box;
GtkWidget *label19; GtkWidget *label19;
GtkWidget *label_title; GtkWidget *title_label;
GtkWidget *button_title_prev; GtkWidget *button_title_prev;
GtkWidget *button_title_next; GtkWidget *button_title_next;
GtkWidget *vseparator1; GtkWidget *vseparator1;
GtkWidget *dvd_chapter_box; GtkWidget *dvd_chapter_box;
GtkWidget *label20; GtkWidget *label20;
GtkWidget *label_chapter; GtkWidget *chapter_label;
GtkWidget *button_chapter_prev; GtkWidget *button_chapter_prev;
GtkWidget *button_chapter_next; GtkWidget *button_chapter_next;
GtkWidget *network_box; GtkWidget *network_box;
...@@ -227,48 +233,53 @@ create_intf_window (void) ...@@ -227,48 +233,53 @@ create_intf_window (void)
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (menubar_view_menu_uiinfo[0].widget); gtk_widget_ref (menubar_view_menu_uiinfo[0].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_fullscreen", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_hide_interface",
menubar_view_menu_uiinfo[0].widget, menubar_view_menu_uiinfo[0].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (menubar_view_menu_uiinfo[1].widget); gtk_widget_ref (menubar_view_menu_uiinfo[1].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator9", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_fullscreen",
menubar_view_menu_uiinfo[1].widget, menubar_view_menu_uiinfo[1].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (menubar_view_menu_uiinfo[2].widget); gtk_widget_ref (menubar_view_menu_uiinfo[2].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_title", gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator9",
menubar_view_menu_uiinfo[2].widget, menubar_view_menu_uiinfo[2].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_view_menu_uiinfo[2].widget, FALSE);
gtk_widget_ref (menubar_view_menu_uiinfo[3].widget); gtk_widget_ref (menubar_view_menu_uiinfo[3].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_chapter", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_title",
menubar_view_menu_uiinfo[3].widget, menubar_view_menu_uiinfo[3].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_view_menu_uiinfo[3].widget, FALSE); gtk_widget_set_sensitive (menubar_view_menu_uiinfo[3].widget, FALSE);
gtk_widget_ref (menubar_view_menu_uiinfo[4].widget); gtk_widget_ref (menubar_view_menu_uiinfo[4].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_angle", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_chapter",
menubar_view_menu_uiinfo[4].widget, menubar_view_menu_uiinfo[4].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_view_menu_uiinfo[4].widget, FALSE); gtk_widget_set_sensitive (menubar_view_menu_uiinfo[4].widget, FALSE);
gtk_widget_ref (menubar_view_menu_uiinfo[5].widget); gtk_widget_ref (menubar_view_menu_uiinfo[5].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator7", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_angle",
menubar_view_menu_uiinfo[5].widget, menubar_view_menu_uiinfo[5].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_view_menu_uiinfo[5].widget, FALSE);
gtk_widget_ref (menubar_view_menu_uiinfo[6].widget); gtk_widget_ref (menubar_view_menu_uiinfo[6].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_playlist", gtk_object_set_data_full (GTK_OBJECT (intf_window), "separator7",
menubar_view_menu_uiinfo[6].widget, menubar_view_menu_uiinfo[6].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (menubar_view_menu_uiinfo[7].widget); gtk_widget_ref (menubar_view_menu_uiinfo[7].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_modules", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_playlist",
menubar_view_menu_uiinfo[7].widget, menubar_view_menu_uiinfo[7].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_view_menu_uiinfo[7].widget, FALSE);
gtk_widget_ref (menubar_view_menu_uiinfo[8].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_modules",
menubar_view_menu_uiinfo[8].widget,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_view_menu_uiinfo[8].widget, FALSE);
gtk_widget_ref (menubar_uiinfo[2].widget); gtk_widget_ref (menubar_uiinfo[2].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_settings", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_settings",
...@@ -282,7 +293,7 @@ create_intf_window (void) ...@@ -282,7 +293,7 @@ create_intf_window (void)
gtk_widget_set_sensitive (menubar_settings_menu_uiinfo[0].widget, FALSE); gtk_widget_set_sensitive (menubar_settings_menu_uiinfo[0].widget, FALSE);
gtk_widget_ref (menubar_settings_menu_uiinfo[1].widget); gtk_widget_ref (menubar_settings_menu_uiinfo[1].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_subtitle", gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_subpictures",
menubar_settings_menu_uiinfo[1].widget, menubar_settings_menu_uiinfo[1].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (menubar_settings_menu_uiinfo[1].widget, FALSE); gtk_widget_set_sensitive (menubar_settings_menu_uiinfo[1].widget, FALSE);
...@@ -394,7 +405,6 @@ create_intf_window (void) ...@@ -394,7 +405,6 @@ create_intf_window (void)
gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_play", toolbar_play, gtk_object_set_data_full (GTK_OBJECT (intf_window), "toolbar_play", toolbar_play,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (toolbar_play); gtk_widget_show (toolbar_play);
gtk_widget_set_sensitive (toolbar_play, FALSE);
tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_BOTTOM); tmp_toolbar_icon = gnome_stock_pixmap_widget (intf_window, GNOME_STOCK_PIXMAP_BOTTOM);
toolbar_pause = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar), toolbar_pause = gtk_toolbar_append_element (GTK_TOOLBAR (toolbar),
...@@ -480,18 +490,11 @@ create_intf_window (void) ...@@ -480,18 +490,11 @@ create_intf_window (void)
gtk_widget_show (vbox8); gtk_widget_show (vbox8);
gnome_app_set_contents (GNOME_APP (intf_window), vbox8); gnome_app_set_contents (GNOME_APP (intf_window), vbox8);
slider_handlebox = gtk_handle_box_new ();
gtk_widget_ref (slider_handlebox);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider_handlebox", slider_handlebox,
(GtkDestroyNotify) gtk_widget_unref);
gtk_box_pack_start (GTK_BOX (vbox8), slider_handlebox, TRUE, TRUE, 0);
slider_frame = gtk_frame_new (_("-:--:--")); slider_frame = gtk_frame_new (_("-:--:--"));
gtk_widget_ref (slider_frame); gtk_widget_ref (slider_frame);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider_frame", slider_frame, gtk_object_set_data_full (GTK_OBJECT (intf_window), "slider_frame", slider_frame,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (slider_frame); gtk_box_pack_start (GTK_BOX (vbox8), slider_frame, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (slider_handlebox), slider_frame);
gtk_frame_set_label_align (GTK_FRAME (slider_frame), 0.05, 0.5); 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))); slider = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 6.25, 0)));
...@@ -544,12 +547,12 @@ create_intf_window (void) ...@@ -544,12 +547,12 @@ create_intf_window (void)
gtk_widget_show (label19); gtk_widget_show (label19);
gtk_box_pack_start (GTK_BOX (title_chapter_box), label19, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (title_chapter_box), label19, FALSE, FALSE, 0);
label_title = gtk_label_new (_("--")); title_label = gtk_label_new (_("--"));
gtk_widget_ref (label_title); gtk_widget_ref (title_label);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_title", label_title, gtk_object_set_data_full (GTK_OBJECT (intf_window), "title_label", title_label,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (label_title); gtk_widget_show (title_label);
gtk_box_pack_start (GTK_BOX (title_chapter_box), label_title, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (title_chapter_box), title_label, FALSE, FALSE, 0);
button_title_prev = gnome_stock_button (GNOME_STOCK_BUTTON_PREV); button_title_prev = gnome_stock_button (GNOME_STOCK_BUTTON_PREV);
gtk_widget_ref (button_title_prev); gtk_widget_ref (button_title_prev);
...@@ -558,7 +561,6 @@ create_intf_window (void) ...@@ -558,7 +561,6 @@ create_intf_window (void)
gtk_widget_show (button_title_prev); gtk_widget_show (button_title_prev);
gtk_box_pack_start (GTK_BOX (title_chapter_box), button_title_prev, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (title_chapter_box), button_title_prev, FALSE, FALSE, 0);
gtk_tooltips_set_tip (tooltips, button_title_prev, _("Select previous title"), NULL); gtk_tooltips_set_tip (tooltips, button_title_prev, _("Select previous title"), NULL);
gtk_button_set_relief (GTK_BUTTON (button_title_prev), GTK_RELIEF_NONE);
button_title_next = gnome_stock_button (GNOME_STOCK_BUTTON_NEXT); button_title_next = gnome_stock_button (GNOME_STOCK_BUTTON_NEXT);
gtk_widget_ref (button_title_next); gtk_widget_ref (button_title_next);
...@@ -566,7 +568,6 @@ create_intf_window (void) ...@@ -566,7 +568,6 @@ create_intf_window (void)
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (button_title_next); gtk_widget_show (button_title_next);
gtk_box_pack_start (GTK_BOX (title_chapter_box), button_title_next, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (title_chapter_box), button_title_next, FALSE, FALSE, 0);
gtk_button_set_relief (GTK_BUTTON (button_title_next), GTK_RELIEF_NONE);
vseparator1 = gtk_vseparator_new (); vseparator1 = gtk_vseparator_new ();
gtk_widget_ref (vseparator1); gtk_widget_ref (vseparator1);
...@@ -589,12 +590,12 @@ create_intf_window (void) ...@@ -589,12 +590,12 @@ create_intf_window (void)
gtk_widget_show (label20); gtk_widget_show (label20);
gtk_box_pack_start (GTK_BOX (dvd_chapter_box), label20, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (dvd_chapter_box), label20, FALSE, FALSE, 0);
label_chapter = gtk_label_new (_("---")); chapter_label = gtk_label_new (_("---"));
gtk_widget_ref (label_chapter); gtk_widget_ref (chapter_label);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "label_chapter", label_chapter, gtk_object_set_data_full (GTK_OBJECT (intf_window), "chapter_label", chapter_label,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (label_chapter); gtk_widget_show (chapter_label);
gtk_box_pack_start (GTK_BOX (dvd_chapter_box), label_chapter, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (dvd_chapter_box), chapter_label, FALSE, FALSE, 0);
button_chapter_prev = gnome_stock_button (GNOME_STOCK_BUTTON_PREV); button_chapter_prev = gnome_stock_button (GNOME_STOCK_BUTTON_PREV);
gtk_widget_ref (button_chapter_prev); gtk_widget_ref (button_chapter_prev);
...@@ -603,7 +604,6 @@ create_intf_window (void) ...@@ -603,7 +604,6 @@ create_intf_window (void)
gtk_widget_show (button_chapter_prev); gtk_widget_show (button_chapter_prev);
gtk_box_pack_start (GTK_BOX (dvd_chapter_box), button_chapter_prev, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (dvd_chapter_box), button_chapter_prev, FALSE, FALSE, 0);
gtk_tooltips_set_tip (tooltips, button_chapter_prev, _("Select previous chapter"), NULL); gtk_tooltips_set_tip (tooltips, button_chapter_prev, _("Select previous chapter"), NULL);
gtk_button_set_relief (GTK_BUTTON (button_chapter_prev), GTK_RELIEF_NONE);
button_chapter_next = gnome_stock_button (GNOME_STOCK_BUTTON_NEXT); button_chapter_next = gnome_stock_button (GNOME_STOCK_BUTTON_NEXT);
gtk_widget_ref (button_chapter_next); gtk_widget_ref (button_chapter_next);
...@@ -612,7 +612,6 @@ create_intf_window (void) ...@@ -612,7 +612,6 @@ create_intf_window (void)
gtk_widget_show (button_chapter_next); gtk_widget_show (button_chapter_next);
gtk_box_pack_start (GTK_BOX (dvd_chapter_box), button_chapter_next, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (dvd_chapter_box), button_chapter_next, FALSE, FALSE, 0);
gtk_tooltips_set_tip (tooltips, button_chapter_next, _("Select next chapter"), NULL); gtk_tooltips_set_tip (tooltips, button_chapter_next, _("Select next chapter"), NULL);
gtk_button_set_relief (GTK_BUTTON (button_chapter_next), GTK_RELIEF_NONE);
network_box = gtk_hbox_new (TRUE, 0); network_box = gtk_hbox_new (TRUE, 0);
gtk_widget_ref (network_box); gtk_widget_ref (network_box);
...@@ -657,67 +656,67 @@ create_intf_window (void) ...@@ -657,67 +656,67 @@ create_intf_window (void)
gnome_app_set_statusbar (GNOME_APP (intf_window), appbar); gnome_app_set_statusbar (GNOME_APP (intf_window), appbar);
gtk_widget_set_usize (appbar, 500, -2); gtk_widget_set_usize (appbar, 500, -2);
gtk_signal_connect (GTK_OBJECT (intf_window), "destroy", gtk_signal_connect (GTK_OBJECT (intf_window), "delete_event",
GTK_SIGNAL_FUNC (on_intf_window_destroy), GTK_SIGNAL_FUNC (GtkWindowDelete),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (intf_window), "drag_data_received", gtk_signal_connect (GTK_OBJECT (intf_window), "drag_data_received",
GTK_SIGNAL_FUNC (on_intf_window_drag_data_received), GTK_SIGNAL_FUNC (GtkWindowDrag),
NULL); "intf_window");
gnome_app_install_menu_hints (GNOME_APP (intf_window), menubar_uiinfo); gnome_app_install_menu_hints (GNOME_APP (intf_window), menubar_uiinfo);
gtk_signal_connect (GTK_OBJECT (toolbar_file), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_file), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_open_clicked), GTK_SIGNAL_FUNC (GtkFileOpenShow),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_disc), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_disc), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_disc_clicked), GTK_SIGNAL_FUNC (GtkDiscOpenShow),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_network), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_network), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_network_clicked), GTK_SIGNAL_FUNC (GtkNetworkOpenShow),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_back), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_back), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_back_clicked), GTK_SIGNAL_FUNC (GtkControlBack),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_stop), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_stop), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_stop_clicked), GTK_SIGNAL_FUNC (GtkControlStop),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_play), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_play), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_play_clicked), GTK_SIGNAL_FUNC (GtkControlPlay),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_pause), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_pause), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_pause_clicked), GTK_SIGNAL_FUNC (GtkControlPause),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_slow), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_slow), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_slow_clicked), GTK_SIGNAL_FUNC (GtkControlSlow),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_fast), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_fast), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_fast_clicked), GTK_SIGNAL_FUNC (GtkControlFast),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_playlist), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_playlist), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_playlist_clicked), GTK_SIGNAL_FUNC (GtkPlaylistShow),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_prev), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_prev), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_prev_clicked), GTK_SIGNAL_FUNC (GtkPlaylistPrev),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (toolbar_next), "clicked", gtk_signal_connect (GTK_OBJECT (toolbar_next), "button_press_event",
GTK_SIGNAL_FUNC (on_toolbar_next_clicked), GTK_SIGNAL_FUNC (GtkPlaylistNext),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (slider), "button_press_event", gtk_signal_connect (GTK_OBJECT (slider), "button_press_event",
GTK_SIGNAL_FUNC (on_slider_button_press_event), GTK_SIGNAL_FUNC (GtkSliderPress),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (slider), "button_release_event", gtk_signal_connect (GTK_OBJECT (slider), "button_release_event",
GTK_SIGNAL_FUNC (on_slider_button_release_event), GTK_SIGNAL_FUNC (GtkSliderRelease),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (button_title_prev), "clicked", gtk_signal_connect (GTK_OBJECT (button_title_prev), "clicked",
GTK_SIGNAL_FUNC (on_button_title_prev_clicked), GTK_SIGNAL_FUNC (GtkTitlePrev),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (button_title_next), "clicked", gtk_signal_connect (GTK_OBJECT (button_title_next), "clicked",
GTK_SIGNAL_FUNC (on_button_title_next_clicked), GTK_SIGNAL_FUNC (GtkTitleNext),
NULL); "intf_window");
gtk_signal_connect (GTK_OBJECT (button_chapter_prev), "clicked", gtk_signal_connect (GTK_OBJECT (button_chapter_prev), "clicked",
GTK_SIGNAL_FUNC (on_button_chapter_prev_clicked), GTK_SIGNAL_FUNC (GtkChapterPrev),
NULL); NULL);
gtk_signal_connect (GTK_OBJECT (button_chapter_next), "clicked", gtk_signal_connect (GTK_OBJECT (button_chapter_next), "clicked",
GTK_SIGNAL_FUNC (on_button_chapter_next_clicked), GTK_SIGNAL_FUNC (GtkChapterNext),
NULL); "intf_window");
gtk_object_set_data (GTK_OBJECT (intf_window), "tooltips", tooltips); gtk_object_set_data (GTK_OBJECT (intf_window), "tooltips", tooltips);
...@@ -729,26 +728,26 @@ static GnomeUIInfo popup_file_menu_uiinfo[] = ...@@ -729,26 +728,26 @@ static GnomeUIInfo popup_file_menu_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("_Open File..."), GNOME_APP_UI_ITEM, N_("_Open File..."),
N_("Open a File"), N_("Open a File"),
(gpointer) on_popup_open_activate, NULL, NULL, (gpointer) GnomePopupFileOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Open _Disc..."), GNOME_APP_UI_ITEM, N_("Open _Disc..."),
N_("Open a DVD or VCD"), N_("Open a DVD or VCD"),
(gpointer) on_popup_disc_activate, NULL, NULL, (gpointer) GnomePopupDiscOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CDROM, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CDROM,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("_Network Stream..."), GNOME_APP_UI_ITEM, N_("_Network Stream..."),
N_("Select a Network Stream"), N_("Select a Network Stream"),
(gpointer) on_popup_network_activate, NULL, NULL, (gpointer) GnomePopupNetworkOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_ABOUT_ITEM (on_popup_about_activate, NULL), GNOMEUIINFO_MENU_ABOUT_ITEM (GnomePopupAboutActivate, NULL),
GNOMEUIINFO_END GNOMEUIINFO_END
}; };
...@@ -757,58 +756,79 @@ static GnomeUIInfo intf_popup_uiinfo[] = ...@@ -757,58 +756,79 @@ static GnomeUIInfo intf_popup_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("Play"), GNOME_APP_UI_ITEM, N_("Play"),
NULL, NULL,
(gpointer) on_popup_play_activate, NULL, NULL, (gpointer) GnomePopupPlayActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Pause"), GNOME_APP_UI_ITEM, N_("Pause"),
NULL, NULL,
(gpointer) on_popup_pause_activate, NULL, NULL, (gpointer) GnomePopupPauseActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOTTOM, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOTTOM,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Stop"), GNOME_APP_UI_ITEM, N_("Stop"),
NULL, NULL,
(gpointer) on_popup_stop_activate, NULL, NULL, (gpointer) GnomePopupStopActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_STOP, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_STOP,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Back"), GNOME_APP_UI_ITEM, N_("Back"),
NULL, NULL,
(gpointer) on_popup_back_activate, NULL, NULL, (gpointer) GnomePopupBackActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Slow"), GNOME_APP_UI_ITEM, N_("Slow"),
NULL, NULL,
(gpointer) on_popup_slow_activate, NULL, NULL, (gpointer) GnomePopupSlowActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_TIMER_STOP, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_TIMER_STOP,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Fast"), GNOME_APP_UI_ITEM, N_("Fast"),
NULL, NULL,
(gpointer) on_popup_fast_activate, NULL, NULL, (gpointer) GnomePopupFastActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_TIMER, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_TIMER,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_SEPARATOR,
{ {
GNOME_APP_UI_TOGGLEITEM, N_("_Fullscreen"), GNOME_APP_UI_ITEM, N_("Toggle _Interface"),
NULL,
(gpointer) GnomePopupWindowToggleActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL
},
{
GNOME_APP_UI_ITEM, N_("_Fullscreen"),
N_("Toggle fullscreen mode"), N_("Toggle fullscreen mode"),
(gpointer) on_popup_fullscreen_activate, NULL, NULL, (gpointer) GnomePopupFullscreenActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_SEPARATOR,
{
GNOME_APP_UI_ITEM, N_("Next"),
NULL,
(gpointer) GnomePopupNextActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL
},
{
GNOME_APP_UI_ITEM, N_("Prev"),
NULL,
(gpointer) GnomePopupPrevActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL
},
{ {
GNOME_APP_UI_ITEM, N_("_Jump..."), GNOME_APP_UI_ITEM, N_("_Jump..."),
N_("Got directly so specified point"), N_("Got directly so specified point"),
(gpointer) on_popup_jump_activate, NULL, NULL, (gpointer) GnomePopupJumpActivate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_JUMP_TO, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_JUMP_TO,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
...@@ -845,13 +865,13 @@ static GnomeUIInfo intf_popup_uiinfo[] = ...@@ -845,13 +865,13 @@ static GnomeUIInfo intf_popup_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("Playlist..."), GNOME_APP_UI_ITEM, N_("Playlist..."),
NULL, NULL,
(gpointer) on_popup_playlist_activate, NULL, NULL, (gpointer) GnomePopupPlaylistActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
GNOMEUIINFO_MENU_PREFERENCES_ITEM (on_popup_preferences_activate, NULL), GNOMEUIINFO_MENU_PREFERENCES_ITEM (GnomePopupPreferencesActivate, NULL),
GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_SEPARATOR,
GNOMEUIINFO_MENU_EXIT_ITEM (on_popup_exit_activate, NULL), GNOMEUIINFO_MENU_EXIT_ITEM (GnomePopupExitActivate, NULL),
GNOMEUIINFO_END GNOMEUIINFO_END
}; };
...@@ -902,53 +922,68 @@ create_intf_popup (void) ...@@ -902,53 +922,68 @@ create_intf_popup (void)
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[7].widget); gtk_widget_ref (intf_popup_uiinfo[7].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_fullscreen", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_interface_toggle",
intf_popup_uiinfo[7].widget, intf_popup_uiinfo[7].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[8].widget); gtk_widget_ref (intf_popup_uiinfo[8].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator8", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_fullscreen",
intf_popup_uiinfo[8].widget, intf_popup_uiinfo[8].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[9].widget); gtk_widget_ref (intf_popup_uiinfo[9].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_jump", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator8",
intf_popup_uiinfo[9].widget, intf_popup_uiinfo[9].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[10].widget); gtk_widget_ref (intf_popup_uiinfo[10].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_navigation", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_next",
intf_popup_uiinfo[10].widget, intf_popup_uiinfo[10].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[10].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[11].widget); gtk_widget_ref (intf_popup_uiinfo[11].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_angle", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_prev",
intf_popup_uiinfo[11].widget, intf_popup_uiinfo[11].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[11].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[12].widget); gtk_widget_ref (intf_popup_uiinfo[12].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_audio", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_jump",
intf_popup_uiinfo[12].widget, intf_popup_uiinfo[12].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[12].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[13].widget); gtk_widget_ref (intf_popup_uiinfo[13].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_subtitle", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_navigation",
intf_popup_uiinfo[13].widget, intf_popup_uiinfo[13].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[13].widget, FALSE); gtk_widget_set_sensitive (intf_popup_uiinfo[13].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[14].widget); gtk_widget_ref (intf_popup_uiinfo[14].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator13", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_angle",
intf_popup_uiinfo[14].widget, intf_popup_uiinfo[14].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[14].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[15].widget); gtk_widget_ref (intf_popup_uiinfo[15].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_audio",
intf_popup_uiinfo[15].widget, intf_popup_uiinfo[15].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[15].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[16].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_subpictures",
intf_popup_uiinfo[16].widget,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_set_sensitive (intf_popup_uiinfo[16].widget, FALSE);
gtk_widget_ref (intf_popup_uiinfo[17].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator13",
intf_popup_uiinfo[17].widget,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[18].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_file",
intf_popup_uiinfo[18].widget,
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (popup_file_menu_uiinfo[0].widget); gtk_widget_ref (popup_file_menu_uiinfo[0].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_open", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_open",
...@@ -975,24 +1010,24 @@ create_intf_popup (void) ...@@ -975,24 +1010,24 @@ create_intf_popup (void)
popup_file_menu_uiinfo[4].widget, popup_file_menu_uiinfo[4].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[16].widget); gtk_widget_ref (intf_popup_uiinfo[19].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_playlist", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_playlist",
intf_popup_uiinfo[16].widget, intf_popup_uiinfo[19].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[17].widget); gtk_widget_ref (intf_popup_uiinfo[20].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_preferences", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_preferences",
intf_popup_uiinfo[17].widget, intf_popup_uiinfo[20].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[18].widget); gtk_widget_ref (intf_popup_uiinfo[21].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator2", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "separator2",
intf_popup_uiinfo[18].widget, intf_popup_uiinfo[21].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (intf_popup_uiinfo[19].widget); gtk_widget_ref (intf_popup_uiinfo[22].widget);
gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_exit", gtk_object_set_data_full (GTK_OBJECT (intf_popup), "popup_exit",
intf_popup_uiinfo[19].widget, intf_popup_uiinfo[22].widget,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
return intf_popup; return intf_popup;
...@@ -1057,15 +1092,12 @@ create_intf_fileopen (void) ...@@ -1057,15 +1092,12 @@ create_intf_fileopen (void)
gtk_widget_show (fileopen_cancel); gtk_widget_show (fileopen_cancel);
GTK_WIDGET_SET_FLAGS (fileopen_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (fileopen_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (intf_fileopen), "destroy",
GTK_SIGNAL_FUNC (on_intf_fileopen_destroy),
NULL);
gtk_signal_connect (GTK_OBJECT (fileopen_ok), "clicked", gtk_signal_connect (GTK_OBJECT (fileopen_ok), "clicked",
GTK_SIGNAL_FUNC (on_fileopen_ok_clicked), GTK_SIGNAL_FUNC (GtkFileOpenOk),
NULL); "intf_fileopen");
gtk_signal_connect (GTK_OBJECT (fileopen_cancel), "clicked", gtk_signal_connect (GTK_OBJECT (fileopen_cancel), "clicked",
GTK_SIGNAL_FUNC (on_fileopen_cancel_clicked), GTK_SIGNAL_FUNC (GtkFileOpenCancel),
NULL); "intf_fileopen");
return intf_fileopen; return intf_fileopen;
} }
...@@ -1126,19 +1158,6 @@ create_intf_modules (void) ...@@ -1126,19 +1158,6 @@ create_intf_modules (void)
gtk_widget_show (modules_cancel); gtk_widget_show (modules_cancel);
GTK_WIDGET_SET_FLAGS (modules_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (modules_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (intf_modules), "destroy",
GTK_SIGNAL_FUNC (on_intf_modules_destroy),
NULL);
gtk_signal_connect (GTK_OBJECT (modules_ok), "clicked",
GTK_SIGNAL_FUNC (on_modules_ok_clicked),
NULL);
gtk_signal_connect (GTK_OBJECT (modules_apply), "clicked",
GTK_SIGNAL_FUNC (on_modules_apply_clicked),
NULL);
gtk_signal_connect (GTK_OBJECT (modules_cancel), "clicked",
GTK_SIGNAL_FUNC (on_modules_cancel_clicked),
NULL);
return intf_modules; return intf_modules;
} }
...@@ -1317,17 +1336,17 @@ create_intf_disc (void) ...@@ -1317,17 +1336,17 @@ create_intf_disc (void)
GTK_WIDGET_SET_FLAGS (disc_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (disc_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (disc_dvd), "toggled", gtk_signal_connect (GTK_OBJECT (disc_dvd), "toggled",
GTK_SIGNAL_FUNC (on_disc_dvd_toggled), GTK_SIGNAL_FUNC (GtkDiscOpenDvd),
NULL); "intf_disc");
gtk_signal_connect (GTK_OBJECT (disc_vcd), "toggled", gtk_signal_connect (GTK_OBJECT (disc_vcd), "toggled",
GTK_SIGNAL_FUNC (on_disc_vcd_toggled), GTK_SIGNAL_FUNC (GtkDiscOpenVcd),
NULL); "intf_disc");
gtk_signal_connect (GTK_OBJECT (disc_ok), "clicked", gtk_signal_connect (GTK_OBJECT (disc_ok), "clicked",
GTK_SIGNAL_FUNC (on_disc_ok_clicked), GTK_SIGNAL_FUNC (GtkDiscOpenOk),
NULL); "intf_disc");
gtk_signal_connect (GTK_OBJECT (disc_cancel), "clicked", gtk_signal_connect (GTK_OBJECT (disc_cancel), "clicked",
GTK_SIGNAL_FUNC (on_disc_cancel_clicked), GTK_SIGNAL_FUNC (GtkDiscOpenCancel),
NULL); "intf_disc");
return intf_disc; return intf_disc;
} }
...@@ -1530,14 +1549,14 @@ create_intf_network (void) ...@@ -1530,14 +1549,14 @@ create_intf_network (void)
GTK_WIDGET_SET_FLAGS (network_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (network_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (broadcast_check), "toggled", gtk_signal_connect (GTK_OBJECT (broadcast_check), "toggled",
GTK_SIGNAL_FUNC (on_broadcast_check_toggled), GTK_SIGNAL_FUNC (GtkNetworkOpenBroadcast),
NULL); NULL);
gtk_signal_connect (GTK_OBJECT (network_ok), "clicked", gtk_signal_connect (GTK_OBJECT (network_ok), "clicked",
GTK_SIGNAL_FUNC (on_network_ok_clicked), GTK_SIGNAL_FUNC (GtkNetworkOpenOk),
NULL); "intf_network");
gtk_signal_connect (GTK_OBJECT (network_cancel), "clicked", gtk_signal_connect (GTK_OBJECT (network_cancel), "clicked",
GTK_SIGNAL_FUNC (on_network_cancel_clicked), GTK_SIGNAL_FUNC (GtkNetworkOpenCancel),
NULL); "intf_network");
gtk_object_set_data (GTK_OBJECT (intf_network), "tooltips", tooltips); gtk_object_set_data (GTK_OBJECT (intf_network), "tooltips", tooltips);
...@@ -1549,28 +1568,28 @@ static GnomeUIInfo playlist_add_menu_uiinfo[] = ...@@ -1549,28 +1568,28 @@ static GnomeUIInfo playlist_add_menu_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("Disc"), GNOME_APP_UI_ITEM, N_("Disc"),
NULL, NULL,
(gpointer) on_playlist_disc_activate, NULL, NULL, (gpointer) GnomePlaylistDiscOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("File"), GNOME_APP_UI_ITEM, N_("File"),
NULL, NULL,
(gpointer) on_playlist_file_activate, NULL, NULL, (gpointer) GnomePlaylistFileOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Network"), GNOME_APP_UI_ITEM, N_("Network"),
NULL, NULL,
(gpointer) on_playlist_network_activate, NULL, NULL, (gpointer) GnomePlaylistNetworkOpenActivate, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Url"), GNOME_APP_UI_ITEM, N_("Url"),
NULL, NULL,
(gpointer) on_playlist_url_activate, NULL, NULL, (gpointer) GtkPlaylistAddUrl, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
...@@ -1582,14 +1601,14 @@ static GnomeUIInfo playlist_delete_menu_uiinfo[] = ...@@ -1582,14 +1601,14 @@ static GnomeUIInfo playlist_delete_menu_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("All"), GNOME_APP_UI_ITEM, N_("All"),
NULL, NULL,
(gpointer) on_playlist_delete_all_activate, NULL, NULL, (gpointer) GtkPlaylistDeleteAll, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Item"), GNOME_APP_UI_ITEM, N_("Item"),
NULL, NULL,
(gpointer) on_playlist_delete_item_activate, NULL, NULL, (gpointer) GtkPlaylistDeleteSelected, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
...@@ -1601,21 +1620,21 @@ static GnomeUIInfo playlist_selection_menu_uiinfo[] = ...@@ -1601,21 +1620,21 @@ static GnomeUIInfo playlist_selection_menu_uiinfo[] =
{ {
GNOME_APP_UI_ITEM, N_("Crop"), GNOME_APP_UI_ITEM, N_("Crop"),
NULL, NULL,
(gpointer) on_playlist_crop_activate, NULL, NULL, (gpointer) GtkPlaylistCrop, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Invert"), GNOME_APP_UI_ITEM, N_("Invert"),
NULL, NULL,
(gpointer) on_playlist_invert_activate, NULL, NULL, (gpointer) GtkPlaylistInvert, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
{ {
GNOME_APP_UI_ITEM, N_("Select"), GNOME_APP_UI_ITEM, N_("Select"),
NULL, NULL,
(gpointer) on_playlist_select_activate, NULL, NULL, (gpointer) GtkPlaylistSelect, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, GNOME_APP_PIXMAP_NONE, NULL,
0, (GdkModifierType) 0, NULL 0, (GdkModifierType) 0, NULL
}, },
...@@ -1814,23 +1833,26 @@ create_intf_playlist (void) ...@@ -1814,23 +1833,26 @@ create_intf_playlist (void)
GTK_WIDGET_SET_FLAGS (playlist_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (playlist_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (intf_playlist), "destroy", gtk_signal_connect (GTK_OBJECT (intf_playlist), "destroy",
GTK_SIGNAL_FUNC (on_playlist_destroy), GTK_SIGNAL_FUNC (gtk_widget_hide),
NULL); "intf_playlist");
gtk_signal_connect (GTK_OBJECT (intf_playlist), "delete_event",
GTK_SIGNAL_FUNC (gtk_widget_hide),
"intf_playlist");
gtk_signal_connect (GTK_OBJECT (playlist_clist), "event", gtk_signal_connect (GTK_OBJECT (playlist_clist), "event",
GTK_SIGNAL_FUNC (on_playlist_clist_event), GTK_SIGNAL_FUNC (GtkPlaylistEvent),
NULL); "intf_playlist");
gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_data_received", gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_data_received",
GTK_SIGNAL_FUNC (on_playlist_clist_drag_data_received), GTK_SIGNAL_FUNC (GtkPlaylistDragData),
NULL); "intf_playlist");
gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_motion", gtk_signal_connect (GTK_OBJECT (playlist_clist), "drag_motion",
GTK_SIGNAL_FUNC (on_playlist_clist_drag_motion), GTK_SIGNAL_FUNC (GtkPlaylistDragMotion),
NULL); "intf_playlist");
gtk_signal_connect (GTK_OBJECT (playlist_ok), "clicked", gtk_signal_connect (GTK_OBJECT (playlist_ok), "clicked",
GTK_SIGNAL_FUNC (on_playlist_ok_clicked), GTK_SIGNAL_FUNC (GtkPlaylistOk),
NULL); "intf_playlist");
gtk_signal_connect (GTK_OBJECT (playlist_cancel), "clicked", gtk_signal_connect (GTK_OBJECT (playlist_cancel), "clicked",
GTK_SIGNAL_FUNC (on_playlist_cancel_clicked), GTK_SIGNAL_FUNC (GtkPlaylistCancel),
NULL); "intf_playlist");
return intf_playlist; return intf_playlist;
} }
...@@ -1948,11 +1970,11 @@ create_intf_jump (void) ...@@ -1948,11 +1970,11 @@ create_intf_jump (void)
GTK_WIDGET_SET_FLAGS (jump_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (jump_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (jump_ok), "clicked", gtk_signal_connect (GTK_OBJECT (jump_ok), "clicked",
GTK_SIGNAL_FUNC (on_jump_ok_clicked), GTK_SIGNAL_FUNC (GtkJumpOk),
NULL); "intf_jump");
gtk_signal_connect (GTK_OBJECT (jump_cancel), "clicked", gtk_signal_connect (GTK_OBJECT (jump_cancel), "clicked",
GTK_SIGNAL_FUNC (on_jump_cancel_clicked), GTK_SIGNAL_FUNC (GtkJumpCancel),
NULL); "intf_jump");
return intf_jump; return intf_jump;
} }
...@@ -1966,7 +1988,7 @@ create_intf_preferences (void) ...@@ -1966,7 +1988,7 @@ create_intf_preferences (void)
GtkWidget *preferences_notebook; GtkWidget *preferences_notebook;
GtkWidget *preferences_file_table; GtkWidget *preferences_file_table;
GtkWidget *preferences_file_combo; GtkWidget *preferences_file_combo;
GtkWidget *preferences_file_entry; GtkWidget *preferences_file_path_entry;
GtkWidget *preferences_file_path_label; GtkWidget *preferences_file_path_label;
GtkWidget *preferences_file; GtkWidget *preferences_file;
GtkWidget *preferences_disc_table; GtkWidget *preferences_disc_table;
...@@ -2041,9 +2063,9 @@ create_intf_preferences (void) ...@@ -2041,9 +2063,9 @@ create_intf_preferences (void)
GtkWidget *preferences_audio_device_entry; GtkWidget *preferences_audio_device_entry;
GtkWidget *preferences_audio; GtkWidget *preferences_audio;
GtkWidget *preference_playlist_table; GtkWidget *preference_playlist_table;
GtkWidget *preferences_playlist_launch_on_startup_checkbutton; GtkWidget *preferences_playlist_startup_checkbutton;
GtkWidget *preferences_playlist_loop_checkbutton; GtkWidget *preferences_playlist_loop_checkbutton;
GtkWidget *preferences_playlist_enqueue_as_default_checkbutton; GtkWidget *preferences_playlist_enqueue_checkbutton;
GtkWidget *preferences_playlist; GtkWidget *preferences_playlist;
GtkWidget *preferences_misc_table; GtkWidget *preferences_misc_table;
GtkWidget *preferences_misc_associated_files_frame; GtkWidget *preferences_misc_associated_files_frame;
...@@ -2107,11 +2129,11 @@ create_intf_preferences (void) ...@@ -2107,11 +2129,11 @@ create_intf_preferences (void)
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (GTK_EXPAND), 0, 0); (GtkAttachOptions) (GTK_EXPAND), 0, 0);
preferences_file_entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (preferences_file_combo)); preferences_file_path_entry = gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (preferences_file_combo));
gtk_widget_ref (preferences_file_entry); gtk_widget_ref (preferences_file_path_entry);
gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_entry", preferences_file_entry, gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_file_path_entry", preferences_file_path_entry,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (preferences_file_entry); gtk_widget_show (preferences_file_path_entry);
preferences_file_path_label = gtk_label_new (_("Default path: ")); preferences_file_path_label = gtk_label_new (_("Default path: "));
gtk_widget_ref (preferences_file_path_label); gtk_widget_ref (preferences_file_path_label);
...@@ -2732,12 +2754,12 @@ create_intf_preferences (void) ...@@ -2732,12 +2754,12 @@ create_intf_preferences (void)
gtk_table_set_row_spacings (GTK_TABLE (preference_playlist_table), 5); gtk_table_set_row_spacings (GTK_TABLE (preference_playlist_table), 5);
gtk_table_set_col_spacings (GTK_TABLE (preference_playlist_table), 5); gtk_table_set_col_spacings (GTK_TABLE (preference_playlist_table), 5);
preferences_playlist_launch_on_startup_checkbutton = gtk_check_button_new_with_label (_("Launch on startup")); preferences_playlist_startup_checkbutton = gtk_check_button_new_with_label (_("Launch on startup"));
gtk_widget_ref (preferences_playlist_launch_on_startup_checkbutton); gtk_widget_ref (preferences_playlist_startup_checkbutton);
gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_launch_on_startup_checkbutton", preferences_playlist_launch_on_startup_checkbutton, gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_startup_checkbutton", preferences_playlist_startup_checkbutton,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (preferences_playlist_launch_on_startup_checkbutton); gtk_widget_show (preferences_playlist_startup_checkbutton);
gtk_table_attach (GTK_TABLE (preference_playlist_table), preferences_playlist_launch_on_startup_checkbutton, 0, 1, 0, 1, gtk_table_attach (GTK_TABLE (preference_playlist_table), preferences_playlist_startup_checkbutton, 0, 1, 0, 1,
(GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (GTK_EXPAND),
(GtkAttachOptions) (GTK_EXPAND), 0, 0); (GtkAttachOptions) (GTK_EXPAND), 0, 0);
...@@ -2750,12 +2772,12 @@ create_intf_preferences (void) ...@@ -2750,12 +2772,12 @@ create_intf_preferences (void)
(GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (GTK_EXPAND),
(GtkAttachOptions) (GTK_EXPAND), 0, 0); (GtkAttachOptions) (GTK_EXPAND), 0, 0);
preferences_playlist_enqueue_as_default_checkbutton = gtk_check_button_new_with_label (_("Enqueue as default")); preferences_playlist_enqueue_checkbutton = gtk_check_button_new_with_label (_("Enqueue as default"));
gtk_widget_ref (preferences_playlist_enqueue_as_default_checkbutton); gtk_widget_ref (preferences_playlist_enqueue_checkbutton);
gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_enqueue_as_default_checkbutton", preferences_playlist_enqueue_as_default_checkbutton, gtk_object_set_data_full (GTK_OBJECT (intf_preferences), "preferences_playlist_enqueue_checkbutton", preferences_playlist_enqueue_checkbutton,
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (preferences_playlist_enqueue_as_default_checkbutton); gtk_widget_show (preferences_playlist_enqueue_checkbutton);
gtk_table_attach (GTK_TABLE (preference_playlist_table), preferences_playlist_enqueue_as_default_checkbutton, 0, 1, 1, 2, gtk_table_attach (GTK_TABLE (preference_playlist_table), preferences_playlist_enqueue_checkbutton, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (GTK_EXPAND),
(GtkAttachOptions) (GTK_EXPAND), 0, 0); (GtkAttachOptions) (GTK_EXPAND), 0, 0);
...@@ -2904,14 +2926,14 @@ create_intf_preferences (void) ...@@ -2904,14 +2926,14 @@ create_intf_preferences (void)
GTK_WIDGET_SET_FLAGS (preferences_cancel, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS (preferences_cancel, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (preferences_ok), "clicked", gtk_signal_connect (GTK_OBJECT (preferences_ok), "clicked",
GTK_SIGNAL_FUNC (on_preferences_ok_clicked), GTK_SIGNAL_FUNC (GtkPreferencesOk),
NULL); "intf_preferences");
gtk_signal_connect (GTK_OBJECT (preferences_apply), "clicked", gtk_signal_connect (GTK_OBJECT (preferences_apply), "clicked",
GTK_SIGNAL_FUNC (on_preferences_apply_clicked), GTK_SIGNAL_FUNC (GtkPreferencesApply),
NULL); "intf_preferences");
gtk_signal_connect (GTK_OBJECT (preferences_cancel), "clicked", gtk_signal_connect (GTK_OBJECT (preferences_cancel), "clicked",
GTK_SIGNAL_FUNC (on_preferences_cancel_clicked), GTK_SIGNAL_FUNC (GtkPreferencesCancel),
NULL); "intf_preferences");
return intf_preferences; return intf_preferences;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_callbacks.c : Callbacks for the Gtk+ plugin. * gtk_callbacks.c : Callbacks for the Gtk+ plugin.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_callbacks.c,v 1.19 2001/05/19 00:39:30 stef Exp $ * $Id: gtk_callbacks.c,v 1.20 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
/*****************************************************************************
* gtk_callbacks.h : Callbacks for the gtk plugin.
*****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_callbacks.h,v 1.13 2001/05/23 23:08:20 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "config.h"
#include "gtk_control.h" #include "gtk_control.h"
#include "gtk_menu.h" #include "gtk_menu.h"
#include "gtk_open.h" #include "gtk_open.h"
...@@ -8,7 +38,9 @@ ...@@ -8,7 +38,9 @@
/* General glade callbacks */ /* General glade callbacks */
/* main window callbacks: specific prototypes are in headers listed before */ /*****************************************************************************
* main window callbacks: specific prototypes are in headers listed before
*****************************************************************************/
gboolean GtkExit ( GtkWidget *, GdkEventButton *, gpointer ); gboolean GtkExit ( GtkWidget *, GdkEventButton *, gpointer );
gboolean GtkWindowToggle ( GtkWidget *, GdkEventButton *, gpointer ); gboolean GtkWindowToggle ( GtkWidget *, GdkEventButton *, gpointer );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_control.c : functions to handle stream control buttons. * gtk_control.c : functions to handle stream control buttons.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_control.c,v 1.2 2001/05/15 14:49:48 stef Exp $ * $Id: gtk_control.c,v 1.3 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
/*****************************************************************************
* gtk_display.c: Gtk+ tools for main interface
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: gtk_display.c,v 1.1 2001/05/23 23:08:20 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "defs.h"
#include <errno.h> /* ENOMEM */
#include <stdlib.h> /* free() */
#include <string.h> /* strerror() */
#include <stdio.h>
#include <gtk/gtk.h>
#include "config.h"
#include "common.h"
#include "threads.h"
#include "mtime.h"
#include "tests.h"
#include "modules.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "interface.h"
#include "intf_msg.h"
#include "intf_playlist.h"
#include "video.h"
#include "video_output.h"
#include "gtk_callbacks.h"
#include "gtk_interface.h"
#include "gtk_support.h"
#include "gtk_menu.h"
#include "gtk_display.h"
#include "intf_gtk.h"
#include "main.h"
/*****************************************************************************
* GtkDisplayDate: display stream date
*****************************************************************************
* This function displays the current date related to the position in
* the stream. It is called whenever the slider changes its value.
* The lock has to be taken before you call the function.
*****************************************************************************/
void GtkDisplayDate( GtkAdjustment *p_adj )
{
intf_thread_t *p_intf;
p_intf = gtk_object_get_data( GTK_OBJECT( p_adj ), "p_intf" );
if( p_intf->p_input != NULL )
{
#define p_area p_intf->p_input->stream.p_selected_area
char psz_time[ OFFSETTOTIME_MAX_SIZE ];
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 ) );
#undef p_area
}
}
/*****************************************************************************
* GtkModeManage: actualise the aspect of the interface whenever the input
* changes.
*****************************************************************************
* The lock has to be taken before you call the function.
*****************************************************************************/
gint GtkModeManage( 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 except default file box */
p_file_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "file_box" ) );
gtk_widget_hide( GTK_WIDGET( p_file_box ) );
p_network_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "network_box" ) );
gtk_widget_hide( GTK_WIDGET( p_network_box ) );
p_dvd_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "dvd_box" ) );
gtk_widget_hide( GTK_WIDGET( p_dvd_box ) );
/* hide slider */
p_slider = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "slider_frame" ) );
gtk_widget_hide( GTK_WIDGET( p_slider ) );
/* controls unavailable */
b_control = 0;
/* show the box related to current input mode */
if( p_intf->p_input != NULL )
{
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;
}
/* slider for seekable streams */
if( p_intf->p_input->stream.b_seekable )
{
gtk_widget_show( GTK_WIDGET( p_slider ) );
}
/* control buttons for free pace streams */
b_control = p_intf->p_input->stream.b_pace_control;
/* get ready for menu regeneration */
p_intf->p_sys->b_title_update = 1;
p_intf->p_sys->b_chapter_update = 1;
p_intf->p_sys->b_angle_update = 1;
p_intf->p_sys->b_audio_update = 1;
p_intf->p_sys->b_spu_update = 1;
p_intf->p_sys->i_part = 0;
p_intf->p_input->stream.b_changed = 0;
intf_WarnMsg( 3,
"intf info: menus refreshed as stream has changed" );
}
else
{
/* default mode */
p_label = gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_window ),
"label_status" );
gtk_label_set_text( GTK_LABEL( p_label ), "" );
gtk_widget_show( GTK_WIDGET( p_file_box ) );
/* unsensitize menus */
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_title"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_chapter"),
FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_angle"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_audio"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_subpictures"),
FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_navigation"),
FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_angle"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_audio"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_subpictures"),
FALSE );
}
/* set control items */
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_back"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_stop"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_pause"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_slow"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_fast"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_back"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_stop"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_pause"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_slow"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_fast"), b_control );
#undef GETWIDGET
return TRUE;
}
/***************************************************************************** /*****************************************************************************
* gnome_playlist.h : Playlist functions for the Gnome plugin. * gtk_dsiplay.h: Gtk+ tools for main interface.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: gnome_playlist.h,v 1.1 2001/05/06 18:41:52 stef Exp $ * $Id: gtk_display.h,v 1.1 2001/05/23 23:08:20 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stéphane Borel <stef@via.ecp.fr>
* *
* Authors: Pierre Baillet <oct@zoy.org>
*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
...@@ -21,15 +22,11 @@ ...@@ -21,15 +22,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
void GnomeDropDataReceived ( intf_thread_t *, GtkSelectionData *, /*****************************************************************************
guint, int ); * Prototypes
void GnomeRebuildCList ( GtkCList *, playlist_t * ); *****************************************************************************/
int GnomeHasValidExtension( gchar * );
int GnomeAppendList ( playlist_t *, int, GList * );
void GnomePlayListManage ( intf_thread_t * );
gint GnomeCompareItems ( gconstpointer, gconstpointer );
GList * GnomeReadFiles ( gchar * );
void GnomeDeleteGListItem ( gpointer, gpointer );
gint GtkModeManage ( intf_thread_t * p_intf );
void GtkDisplayDate ( GtkAdjustment *p_adj );
...@@ -244,7 +244,7 @@ create_intf_window (void) ...@@ -244,7 +244,7 @@ create_intf_window (void)
gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_interface_hide); gtk_container_add (GTK_CONTAINER (menubar_view_menu), menubar_interface_hide);
gtk_tooltips_set_tip (tooltips, menubar_interface_hide, _("Hide the main interface window"), NULL); gtk_tooltips_set_tip (tooltips, menubar_interface_hide, _("Hide the main interface window"), NULL);
menubar_fullscreen = gtk_check_menu_item_new_with_label (""); menubar_fullscreen = gtk_menu_item_new_with_label ("");
tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_fullscreen)->child), tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (menubar_fullscreen)->child),
_("_Fullscreen")); _("_Fullscreen"));
gtk_widget_add_accelerator (menubar_fullscreen, "activate_item", menubar_view_menu_accels, gtk_widget_add_accelerator (menubar_fullscreen, "activate_item", menubar_view_menu_accels,
...@@ -254,7 +254,6 @@ create_intf_window (void) ...@@ -254,7 +254,6 @@ create_intf_window (void)
(GtkDestroyNotify) gtk_widget_unref); (GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (menubar_fullscreen); gtk_widget_show (menubar_fullscreen);
gtk_container_add (GTK_CONTAINER (menubar_view_menu), 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 (); separator13 = gtk_menu_item_new ();
gtk_widget_ref (separator13); gtk_widget_ref (separator13);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_menu.c : functions to handle menu items. * gtk_menu.c : functions to handle menu items.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_menu.c,v 1.3 2001/05/19 00:39:30 stef Exp $ * $Id: gtk_menu.c,v 1.4 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_modules.c : functions to build modules configuration boxes. * gtk_modules.c : functions to build modules configuration boxes.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_modules.c,v 1.2 2001/05/15 14:49:48 stef Exp $ * $Id: gtk_modules.c,v 1.3 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_open.c : functions to handle file/disc/network open widgets. * gtk_open.c : functions to handle file/disc/network open widgets.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_open.c,v 1.2 2001/05/15 14:49:48 stef Exp $ * $Id: gtk_open.c,v 1.3 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
...@@ -407,6 +404,5 @@ void GtkDiscOpenActivate( GtkMenuItem * menuitem, gpointer user_data ) ...@@ -407,6 +404,5 @@ void GtkDiscOpenActivate( GtkMenuItem * menuitem, gpointer user_data )
void GtkNetworkOpenActivate( GtkMenuItem * menuitem, gpointer user_data ) void GtkNetworkOpenActivate( GtkMenuItem * menuitem, gpointer user_data )
{ {
GtkNetworkOpenShow( GTK_WIDGET( menuitem ), NULL, user_data ); GtkNetworkOpenShow( GTK_WIDGET( menuitem ), NULL, user_data );
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_playlist.c : Interface for the playlist dialog * gtk_playlist.c : Interface for the playlist dialog
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: gtk_playlist.c,v 1.13 2001/05/15 14:49:48 stef Exp $ * $Id: gtk_playlist.c,v 1.14 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Pierre Baillet <oct@zoy.org> * Authors: Pierre Baillet <oct@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* gtk_control.c : functions to handle stream control buttons. * gtk_control.c : functions to handle stream control buttons.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000, 2001 VideoLAN * Copyright (C) 2000, 2001 VideoLAN
* $Id: gtk_preferences.c,v 1.2 2001/05/15 14:49:48 stef Exp $ * $Id: gtk_preferences.c,v 1.3 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -22,9 +22,6 @@ ...@@ -22,9 +22,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#define MODULE_NAME gtk
#include "modules_inner.h"
/***************************************************************************** /*****************************************************************************
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
......
/*****************************************************************************
* intf_gnome.c: Gnome interface
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: intf_gnome.c,v 1.1 2001/05/23 23:08:20 stef Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#define MODULE_NAME gnome
#include "modules_inner.h"
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "defs.h"
#include <errno.h> /* ENOMEM */
#include <stdlib.h> /* free() */
#include <string.h> /* strerror() */
#include <stdio.h>
#include <gnome.h>
#include "config.h"
#include "common.h"
#include "threads.h"
#include "mtime.h"
#include "tests.h"
#include "modules.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "intf_msg.h"
#include "interface.h"
#include "intf_playlist.h"
#include "video.h"
#include "video_output.h"
#include "gnome_callbacks.h"
#include "gnome_interface.h"
#include "gnome_support.h"
#include "gtk_display.h"
#include "intf_gtk.h"
#include "main.h"
/*****************************************************************************
* Local prototypes.
*****************************************************************************/
static int intf_Probe ( probedata_t *p_data );
static int intf_Open ( intf_thread_t *p_intf );
static void intf_Close ( intf_thread_t *p_intf );
static void intf_Run ( intf_thread_t *p_intf );
static gint GnomeManage ( gpointer p_data );
/*****************************************************************************
* g_atexit: kludge to avoid the Gnome thread to segfault at exit
*****************************************************************************
* gtk_init() makes several calls to g_atexit() which calls atexit() to
* register tidying callbacks to be called at program exit. Since the Gnome
* plugin is likely to be unloaded at program exit, we have to export this
* symbol to intercept the g_atexit() calls. Talk about crude hack.
*****************************************************************************/
void g_atexit( GVoidFunc func )
{
intf_thread_t *p_intf = p_main->p_intf;
if( p_intf->p_sys->pf_gdk_callback == NULL )
{
p_intf->p_sys->pf_gdk_callback = func;
}
else if( p_intf->p_sys->pf_gtk_callback == NULL )
{
p_intf->p_sys->pf_gtk_callback = func;
}
/* else nothing, but we could do something here */
return;
}
/*****************************************************************************
* Functions exported as capabilities. They are declared as static so that
* we don't pollute the namespace too much.
*****************************************************************************/
void _M( intf_getfunctions )( function_list_t * p_function_list )
{
p_function_list->pf_probe = intf_Probe;
p_function_list->functions.intf.pf_open = intf_Open;
p_function_list->functions.intf.pf_close = intf_Close;
p_function_list->functions.intf.pf_run = intf_Run;
}
/*****************************************************************************
* intf_Probe: probe the interface and return a score
*****************************************************************************
* This function tries to initialize Gnome and returns a score to the
* plugin manager so that it can select the best plugin.
*****************************************************************************/
static int intf_Probe( probedata_t *p_data )
{
if( TestMethod( INTF_METHOD_VAR, "gnome" ) )
{
return( 999 );
}
if( TestProgram( "gnome-vlc" ) )
{
return( 200 );
}
return( 100 );
}
/*****************************************************************************
* intf_Open: initialize and create window
*****************************************************************************/
static int intf_Open( intf_thread_t *p_intf )
{
/* Allocate instance and initialize some members */
p_intf->p_sys = malloc( sizeof( intf_sys_t ) );
if( p_intf->p_sys == NULL )
{
intf_ErrMsg("error: %s", strerror(ENOMEM));
return( 1 );
}
/* Initialize Gnome thread */
p_intf->p_sys->b_popup_changed = 0;
p_intf->p_sys->b_window_changed = 0;
p_intf->p_sys->b_playlist_changed = 0;
p_intf->p_sys->i_playing = -1;
p_intf->p_sys->b_slider_free = 1;
p_intf->p_sys->pf_gtk_callback = NULL;
p_intf->p_sys->pf_gdk_callback = NULL;
return( 0 );
}
/*****************************************************************************
* intf_Close: destroy interface window
*****************************************************************************/
static void intf_Close( intf_thread_t *p_intf )
{
/* Destroy structure */
free( p_intf->p_sys );
}
/*****************************************************************************
* intf_Run: Gnome thread
*****************************************************************************
* this part of the interface is in a separate thread so that we can call
* gtk_main() from within it without annoying the rest of the program.
* XXX: the approach may look kludgy, and probably is, but I could not find
* a better way to dynamically load a Gnome interface at runtime.
*****************************************************************************/
static void intf_Run( intf_thread_t *p_intf )
{
/* gnome_init needs to know the command line. We don't care, so we
* give it an empty one */
char *p_args[] = { "" };
int i_args = 1;
/* The data types we are allowed to receive */
static GtkTargetEntry target_table[] =
{
{ "text/uri-list", 0, DROP_ACCEPT_TEXT_URI_LIST },
{ "text/plain", 0, DROP_ACCEPT_TEXT_PLAIN }
};
/* intf_Manage callback timeout */
int i_timeout;
/* Initialize Gnome */
gnome_init( p_main->psz_arg0, VERSION, i_args, p_args );
/* 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_playlist = create_intf_playlist();
/* Set the title of the main window */
gtk_window_set_title( GTK_WINDOW(p_intf->p_sys->p_window),
VOUT_TITLE " (Gnome interface)");
/* Accept file drops on the main window */
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_title = P_LABEL( "title_label" );
p_intf->p_sys->p_label_chapter = P_LABEL( "chapter_label" );
#undef P_LABEL
/* Connect the date display to the slider */
#define P_SLIDER GTK_RANGE( gtk_object_get_data( \
GTK_OBJECT( p_intf->p_sys->p_window ), "slider" ) )
p_intf->p_sys->p_adj = gtk_range_get_adjustment( P_SLIDER );
gtk_signal_connect ( GTK_OBJECT( p_intf->p_sys->p_adj ), "value_changed",
GTK_SIGNAL_FUNC( GtkDisplayDate ), NULL );
p_intf->p_sys->f_adj_oldvalue = 0;
#undef P_SLIDER
/* We don't create these ones yet because we perhaps won't need them */
p_intf->p_sys->p_about = NULL;
p_intf->p_sys->p_modules = NULL;
p_intf->p_sys->p_fileopen = NULL;
p_intf->p_sys->p_disc = NULL;
p_intf->p_sys->p_network = NULL;
p_intf->p_sys->p_preferences = NULL;
p_intf->p_sys->p_jump = NULL;
/* Store p_intf to keep an eye on it */
gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_window),
"p_intf", 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_playlist ),
"p_intf", p_intf );
gtk_object_set_data( GTK_OBJECT(p_intf->p_sys->p_adj),
"p_intf", p_intf );
/* Show the control window */
gtk_widget_show( p_intf->p_sys->p_window );
/* Sleep to avoid using all CPU - since some interfaces needs to access
* keyboard events, a 100ms delay is a good compromise */
i_timeout = gtk_timeout_add( INTF_IDLE_SLEEP / 1000, GnomeManage, p_intf );
/* Enter gnome mode */
gtk_main();
/* Remove the timeout */
gtk_timeout_remove( i_timeout );
/* Get rid of stored callbacks so we can unload the plugin */
if( p_intf->p_sys->pf_gtk_callback != NULL )
{
p_intf->p_sys->pf_gtk_callback( );
p_intf->p_sys->pf_gtk_callback = NULL;
}
if( p_intf->p_sys->pf_gdk_callback != NULL )
{
p_intf->p_sys->pf_gdk_callback( );
p_intf->p_sys->pf_gdk_callback = NULL;
}
}
/* following functions are local */
/*****************************************************************************
* GnomeManage: manage main thread messages
*****************************************************************************
* In this function, called approx. 10 times a second, we check what the
* main program wanted to tell us.
*****************************************************************************/
static gint GnomeManage( gpointer p_data )
{
#define p_intf ((intf_thread_t *)p_data)
vlc_mutex_lock( &p_intf->change_lock );
/* If the "display popup" flag has changed */
if( p_intf->b_menu_change )
{
if( !GTK_IS_WIDGET( p_intf->p_sys->p_popup ) )
{
p_intf->p_sys->p_popup = create_intf_popup();
gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_popup ),
"p_popup", p_intf );
}
gnome_popup_menu_do_popup( p_intf->p_sys->p_popup,
NULL, NULL, NULL, NULL );
p_intf->b_menu_change = 0;
}
/* update the playlist */
GtkPlayListManage( p_intf );
if( p_intf->p_input != NULL && !p_intf->b_die )
{
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
/* New input or stream map change */
if( p_intf->p_input->stream.b_changed )
{
GtkModeManage( p_intf );
}
/* Manage the slider */
if( p_intf->p_input->stream.b_seekable )
{
float newvalue;
newvalue = p_intf->p_sys->p_adj->value;
#define p_area p_intf->p_input->stream.p_selected_area
/* If the user hasn't touched the slider since the last time,
* then the input can safely change it */
if( newvalue == p_intf->p_sys->f_adj_oldvalue )
{
/* Update the value */
p_intf->p_sys->p_adj->value = p_intf->p_sys->f_adj_oldvalue =
( 100. * p_area->i_tell ) / p_area->i_size;
gtk_signal_emit_by_name( GTK_OBJECT( p_intf->p_sys->p_adj ),
"value_changed" );
}
/* Otherwise, send message to the input if the user has
* finished dragging the slider */
else if( p_intf->p_sys->b_slider_free )
{
off_t i_seek = ( newvalue * p_area->i_size ) / 100;
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
input_Seek( p_intf->p_input, i_seek );
vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
/* Update the old value */
p_intf->p_sys->f_adj_oldvalue = newvalue;
}
#undef p_area
}
vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
if( p_intf->p_sys->i_part !=
p_intf->p_input->stream.p_selected_area->i_part )
{
p_intf->p_sys->b_chapter_update = 1;
GtkSetupMenus( p_intf );
}
}
else if( !p_intf->b_die )
{
GtkModeManage( p_intf );
}
/* Manage core vlc functions through the callback */
p_intf->pf_manage( p_intf );
if( p_intf->b_die )
{
vlc_mutex_unlock( &p_intf->change_lock );
/* Prepare to die, young Skywalker */
gtk_main_quit();
/* Just in case */
return( FALSE );
}
vlc_mutex_unlock( &p_intf->change_lock );
return( TRUE );
#undef p_intf
}
...@@ -25,14 +25,16 @@ ...@@ -25,14 +25,16 @@
<class>GnomeApp</class> <class>GnomeApp</class>
<name>intf_window</name> <name>intf_window</name>
<signal> <signal>
<name>destroy</name> <name>delete_event</name>
<handler>on_intf_window_destroy</handler> <handler>GtkWindowDelete</handler>
<last_modification_time>Sun, 11 Feb 2001 17:41:57 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:20:57 GMT</last_modification_time>
</signal> </signal>
<signal> <signal>
<name>drag_data_received</name> <name>drag_data_received</name>
<handler>on_intf_window_drag_data_received</handler> <handler>GtkWindowDrag</handler>
<last_modification_time>Fri, 16 Feb 2001 01:59:35 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 02:30:24 GMT</last_modification_time>
</signal> </signal>
<title>VideoLAN Client</title> <title>VideoLAN Client</title>
<type>GTK_WINDOW_TOPLEVEL</type> <type>GTK_WINDOW_TOPLEVEL</type>
...@@ -90,8 +92,9 @@ ...@@ -90,8 +92,9 @@
<tooltip>Open a File</tooltip> <tooltip>Open a File</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_open_activate</handler> <handler>GnomeMenubarFileOpenActivate</handler>
<last_modification_time>Sun, 04 Mar 2001 21:01:45 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:27:02 GMT</last_modification_time>
</signal> </signal>
<label>_Open File...</label> <label>_Open File...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -104,8 +107,9 @@ ...@@ -104,8 +107,9 @@
<tooltip>Open a DVD or VCD</tooltip> <tooltip>Open a DVD or VCD</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_disc_activate</handler> <handler>GnomeMenubarDiscOpenActivate</handler>
<last_modification_time>Sun, 04 Mar 2001 01:28:32 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:27:10 GMT</last_modification_time>
</signal> </signal>
<label>Open _Disc...</label> <label>Open _Disc...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -118,8 +122,9 @@ ...@@ -118,8 +122,9 @@
<tooltip>Select a Network Stream</tooltip> <tooltip>Select a Network Stream</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_network_activate</handler> <handler>GnomeMenbarNetworkOpenActivate</handler>
<last_modification_time>Mon, 12 Mar 2001 14:33:42 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:27:39 GMT</last_modification_time>
</signal> </signal>
<label>_Network Stream...</label> <label>_Network Stream...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -137,8 +142,9 @@ ...@@ -137,8 +142,9 @@
<name>menubar_exit</name> <name>menubar_exit</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_exit_activate</handler> <handler>GnomeMenubarExitActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:55:04 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:27:52 GMT</last_modification_time>
</signal> </signal>
<stock_item>GNOMEUIINFO_MENU_EXIT_ITEM</stock_item> <stock_item>GNOMEUIINFO_MENU_EXIT_ITEM</stock_item>
</widget> </widget>
...@@ -155,16 +161,29 @@ ...@@ -155,16 +161,29 @@
<name>menubar_view_menu</name> <name>menubar_view_menu</name>
<widget> <widget>
<class>GtkCheckMenuItem</class> <class>GtkMenuItem</class>
<name>menubar_hide_interface</name>
<signal>
<name>activate</name>
<handler>GnomeMenubarWindowToggleActivate</handler>
<data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:28:06 GMT</last_modification_time>
</signal>
<label>_Hide interface</label>
<right_justify>False</right_justify>
</widget>
<widget>
<class>GtkMenuItem</class>
<name>menubar_fullscreen</name> <name>menubar_fullscreen</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_fullscreen_activate</handler> <handler>GnomeMenubarFullscreenActivate</handler>
<last_modification_time>Wed, 02 May 2001 23:35:36 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:28:15 GMT</last_modification_time>
</signal> </signal>
<label>_Fullscreen</label> <label>_Fullscreen</label>
<active>False</active> <right_justify>False</right_justify>
<always_show_toggle>True</always_show_toggle>
</widget> </widget>
<widget> <widget>
...@@ -212,8 +231,9 @@ ...@@ -212,8 +231,9 @@
<tooltip>Open the playlist window</tooltip> <tooltip>Open the playlist window</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_playlist_activate</handler> <handler>GnomeMenubarPlaylistActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:55:04 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:28:41 GMT</last_modification_time>
</signal> </signal>
<label>_Playlist...</label> <label>_Playlist...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -227,8 +247,9 @@ ...@@ -227,8 +247,9 @@
<tooltip>Open the plugin manager</tooltip> <tooltip>Open the plugin manager</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_modules_activate</handler> <handler>GnomeMenubarModulesActivate</handler>
<last_modification_time>Tue, 13 Feb 2001 17:19:41 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:28:53 GMT</last_modification_time>
</signal> </signal>
<label>_Modules...</label> <label>_Modules...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -257,7 +278,7 @@ ...@@ -257,7 +278,7 @@
<widget> <widget>
<class>GtkMenuItem</class> <class>GtkMenuItem</class>
<name>menubar_subtitle</name> <name>menubar_subpictures</name>
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Select subtitle unit</tooltip> <tooltip>Select subtitle unit</tooltip>
<label>_Subtitles</label> <label>_Subtitles</label>
...@@ -275,8 +296,9 @@ ...@@ -275,8 +296,9 @@
<name>menubar_preferences</name> <name>menubar_preferences</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_preferences_activate</handler> <handler>GnomeMenubarPreferencesActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:55:04 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:29:03 GMT</last_modification_time>
</signal> </signal>
<stock_item>GNOMEUIINFO_MENU_PREFERENCES_ITEM</stock_item> <stock_item>GNOMEUIINFO_MENU_PREFERENCES_ITEM</stock_item>
</widget> </widget>
...@@ -297,8 +319,9 @@ ...@@ -297,8 +319,9 @@
<name>menubar_about</name> <name>menubar_about</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_menubar_about_activate</handler> <handler>GnomeMenubarAboutActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:55:04 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:29:19 GMT</last_modification_time>
</signal> </signal>
<stock_item>GNOMEUIINFO_MENU_ABOUT_ITEM</stock_item> <stock_item>GNOMEUIINFO_MENU_ABOUT_ITEM</stock_item>
</widget> </widget>
...@@ -338,9 +361,10 @@ ...@@ -338,9 +361,10 @@
<name>toolbar_file</name> <name>toolbar_file</name>
<tooltip>Open a File</tooltip> <tooltip>Open a File</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_open_clicked</handler> <handler>GtkFileOpenShow</handler>
<last_modification_time>Sun, 04 Mar 2001 21:01:24 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:43 GMT</last_modification_time>
</signal> </signal>
<label>File</label> <label>File</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_OPEN</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_OPEN</stock_pixmap>
...@@ -352,9 +376,10 @@ ...@@ -352,9 +376,10 @@
<name>toolbar_disc</name> <name>toolbar_disc</name>
<tooltip>Open a DVD or VCD</tooltip> <tooltip>Open a DVD or VCD</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_disc_clicked</handler> <handler>GtkDiscOpenShow</handler>
<last_modification_time>Sun, 04 Mar 2001 01:27:51 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:38 GMT</last_modification_time>
</signal> </signal>
<label>Disc</label> <label>Disc</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_CDROM</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_CDROM</stock_pixmap>
...@@ -366,9 +391,10 @@ ...@@ -366,9 +391,10 @@
<name>toolbar_network</name> <name>toolbar_network</name>
<tooltip>Select a Network Stream</tooltip> <tooltip>Select a Network Stream</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_network_clicked</handler> <handler>GtkNetworkOpenShow</handler>
<last_modification_time>Mon, 12 Mar 2001 14:32:18 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:33 GMT</last_modification_time>
</signal> </signal>
<label>Net</label> <label>Net</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_REFRESH</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_REFRESH</stock_pixmap>
...@@ -381,9 +407,10 @@ ...@@ -381,9 +407,10 @@
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Go Backwards</tooltip> <tooltip>Go Backwards</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_back_clicked</handler> <handler>GtkControlBack</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:28 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:27 GMT</last_modification_time>
</signal> </signal>
<label>Back</label> <label>Back</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_BACK</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_BACK</stock_pixmap>
...@@ -399,9 +426,10 @@ ...@@ -399,9 +426,10 @@
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Stop Stream</tooltip> <tooltip>Stop Stream</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_stop_clicked</handler> <handler>GtkControlStop</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:33 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:22 GMT</last_modification_time>
</signal> </signal>
<label>Stop</label> <label>Stop</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_STOP</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_STOP</stock_pixmap>
...@@ -411,12 +439,12 @@ ...@@ -411,12 +439,12 @@
<class>GtkButton</class> <class>GtkButton</class>
<child_name>Toolbar:button</child_name> <child_name>Toolbar:button</child_name>
<name>toolbar_play</name> <name>toolbar_play</name>
<sensitive>False</sensitive>
<tooltip>Play Stream</tooltip> <tooltip>Play Stream</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_play_clicked</handler> <handler>GtkControlPlay</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:39 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:17 GMT</last_modification_time>
</signal> </signal>
<label>Play</label> <label>Play</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_FORWARD</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_FORWARD</stock_pixmap>
...@@ -429,9 +457,10 @@ ...@@ -429,9 +457,10 @@
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Pause Stream</tooltip> <tooltip>Pause Stream</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_pause_clicked</handler> <handler>GtkControlPause</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:43 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:14:05 GMT</last_modification_time>
</signal> </signal>
<label>Pause</label> <label>Pause</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_BOTTOM</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_BOTTOM</stock_pixmap>
...@@ -444,9 +473,10 @@ ...@@ -444,9 +473,10 @@
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Play Slower</tooltip> <tooltip>Play Slower</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_slow_clicked</handler> <handler>GtkControlSlow</handler>
<last_modification_time>Mon, 12 Feb 2001 07:20:42 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:58 GMT</last_modification_time>
</signal> </signal>
<label>Slow</label> <label>Slow</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_TIMER_STOP</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_TIMER_STOP</stock_pixmap>
...@@ -459,9 +489,10 @@ ...@@ -459,9 +489,10 @@
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Play Faster</tooltip> <tooltip>Play Faster</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_fast_clicked</handler> <handler>GtkControlFast</handler>
<last_modification_time>Mon, 12 Feb 2001 07:20:48 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:53 GMT</last_modification_time>
</signal> </signal>
<label>Fast</label> <label>Fast</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_TIMER</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_TIMER</stock_pixmap>
...@@ -473,9 +504,10 @@ ...@@ -473,9 +504,10 @@
<name>toolbar_playlist</name> <name>toolbar_playlist</name>
<tooltip>Open Playlist</tooltip> <tooltip>Open Playlist</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_playlist_clicked</handler> <handler>GtkPlaylistShow</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:48 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:48 GMT</last_modification_time>
</signal> </signal>
<label>Playlist</label> <label>Playlist</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_INDEX</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_INDEX</stock_pixmap>
...@@ -490,9 +522,10 @@ ...@@ -490,9 +522,10 @@
<name>toolbar_prev</name> <name>toolbar_prev</name>
<tooltip>Previous File</tooltip> <tooltip>Previous File</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_prev_clicked</handler> <handler>GtkPlaylistPrev</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:52 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:44 GMT</last_modification_time>
</signal> </signal>
<label>Prev</label> <label>Prev</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_FIRST</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_FIRST</stock_pixmap>
...@@ -504,9 +537,10 @@ ...@@ -504,9 +537,10 @@
<name>toolbar_next</name> <name>toolbar_next</name>
<tooltip>Next File</tooltip> <tooltip>Next File</tooltip>
<signal> <signal>
<name>clicked</name> <name>button_press_event</name>
<handler>on_toolbar_next_clicked</handler> <handler>GtkPlaylistNext</handler>
<last_modification_time>Sun, 11 Feb 2001 17:06:56 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:40 GMT</last_modification_time>
</signal> </signal>
<label>Next</label> <label>Next</label>
<stock_pixmap>GNOME_STOCK_PIXMAP_LAST</stock_pixmap> <stock_pixmap>GNOME_STOCK_PIXMAP_LAST</stock_pixmap>
...@@ -522,12 +556,12 @@ ...@@ -522,12 +556,12 @@
<spacing>0</spacing> <spacing>0</spacing>
<widget> <widget>
<class>GtkHandleBox</class> <class>GtkFrame</class>
<name>slider_handlebox</name> <name>slider_frame</name>
<visible>False</visible> <visible>False</visible>
<shadow_type>GTK_SHADOW_OUT</shadow_type> <label>-:--:--</label>
<handle_position>GTK_POS_LEFT</handle_position> <label_xalign>0.05</label_xalign>
<snap_edge>GTK_POS_TOP</snap_edge> <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child> <child>
<padding>0</padding> <padding>0</padding>
<expand>True</expand> <expand>True</expand>
...@@ -535,37 +569,31 @@ ...@@ -535,37 +569,31 @@
</child> </child>
<widget> <widget>
<class>GtkFrame</class> <class>GtkHScale</class>
<name>slider_frame</name> <name>slider</name>
<label>-:--:--</label> <can_focus>True</can_focus>
<label_xalign>0.05</label_xalign> <signal>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> <name>button_press_event</name>
<handler>GtkSliderPress</handler>
<widget> <data>&quot;intf_window&quot;</data>
<class>GtkHScale</class> <last_modification_time>Sat, 19 May 2001 03:12:57 GMT</last_modification_time>
<name>slider</name> </signal>
<can_focus>True</can_focus> <signal>
<signal> <name>button_release_event</name>
<name>button_press_event</name> <handler>GtkSliderRelease</handler>
<handler>on_slider_button_press_event</handler> <data>&quot;intf_window&quot;</data>
<last_modification_time>Wed, 14 Mar 2001 13:46:55 GMT</last_modification_time> <last_modification_time>Sat, 19 May 2001 03:13:00 GMT</last_modification_time>
</signal> </signal>
<signal> <draw_value>False</draw_value>
<name>button_release_event</name> <value_pos>GTK_POS_TOP</value_pos>
<handler>on_slider_button_release_event</handler> <digits>3</digits>
<last_modification_time>Wed, 14 Mar 2001 13:46:59 GMT</last_modification_time> <policy>GTK_UPDATE_CONTINUOUS</policy>
</signal> <value>0</value>
<draw_value>False</draw_value> <lower>0</lower>
<value_pos>GTK_POS_TOP</value_pos> <upper>100</upper>
<digits>3</digits> <step>1</step>
<policy>GTK_UPDATE_CONTINUOUS</policy> <page>6.25</page>
<value>0</value> <page_size>0</page_size>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
<page>6.25</page>
<page_size>0</page_size>
</widget>
</widget> </widget>
</widget> </widget>
...@@ -657,7 +685,7 @@ ...@@ -657,7 +685,7 @@
<widget> <widget>
<class>GtkLabel</class> <class>GtkLabel</class>
<name>label_title</name> <name>title_label</name>
<label>--</label> <label>--</label>
<justify>GTK_JUSTIFY_CENTER</justify> <justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap> <wrap>False</wrap>
...@@ -679,11 +707,12 @@ ...@@ -679,11 +707,12 @@
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_button_title_prev_clicked</handler> <handler>GtkTitlePrev</handler>
<last_modification_time>Tue, 03 Apr 2001 03:46:25 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:28 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_PREV</stock_button> <stock_button>GNOME_STOCK_BUTTON_PREV</stock_button>
<relief>GTK_RELIEF_NONE</relief> <relief>GTK_RELIEF_NORMAL</relief>
<child> <child>
<padding>0</padding> <padding>0</padding>
<expand>False</expand> <expand>False</expand>
...@@ -697,11 +726,12 @@ ...@@ -697,11 +726,12 @@
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_button_title_next_clicked</handler> <handler>GtkTitleNext</handler>
<last_modification_time>Tue, 03 Apr 2001 03:47:01 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:23 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_NEXT</stock_button> <stock_button>GNOME_STOCK_BUTTON_NEXT</stock_button>
<relief>GTK_RELIEF_NONE</relief> <relief>GTK_RELIEF_NORMAL</relief>
<child> <child>
<padding>0</padding> <padding>0</padding>
<expand>False</expand> <expand>False</expand>
...@@ -750,7 +780,7 @@ ...@@ -750,7 +780,7 @@
<widget> <widget>
<class>GtkLabel</class> <class>GtkLabel</class>
<name>label_chapter</name> <name>chapter_label</name>
<label>---</label> <label>---</label>
<justify>GTK_JUSTIFY_CENTER</justify> <justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap> <wrap>False</wrap>
...@@ -772,11 +802,11 @@ ...@@ -772,11 +802,11 @@
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_button_chapter_prev_clicked</handler> <handler>GtkChapterPrev</handler>
<last_modification_time>Tue, 03 Apr 2001 00:53:47 GMT</last_modification_time> <last_modification_time>Sat, 19 May 2001 02:46:07 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_PREV</stock_button> <stock_button>GNOME_STOCK_BUTTON_PREV</stock_button>
<relief>GTK_RELIEF_NONE</relief> <relief>GTK_RELIEF_NORMAL</relief>
<child> <child>
<padding>0</padding> <padding>0</padding>
<expand>False</expand> <expand>False</expand>
...@@ -791,11 +821,12 @@ ...@@ -791,11 +821,12 @@
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_button_chapter_next_clicked</handler> <handler>GtkChapterNext</handler>
<last_modification_time>Tue, 03 Apr 2001 00:53:40 GMT</last_modification_time> <data>&quot;intf_window&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:13:08 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_NEXT</stock_button> <stock_button>GNOME_STOCK_BUTTON_NEXT</stock_button>
<relief>GTK_RELIEF_NONE</relief> <relief>GTK_RELIEF_NORMAL</relief>
<child> <child>
<padding>0</padding> <padding>0</padding>
<expand>False</expand> <expand>False</expand>
...@@ -915,8 +946,9 @@ ...@@ -915,8 +946,9 @@
<name>popup_play</name> <name>popup_play</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_play_activate</handler> <handler>GnomePopupPlayActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:52:11 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:16:58 GMT</last_modification_time>
</signal> </signal>
<label>Play</label> <label>Play</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -928,8 +960,9 @@ ...@@ -928,8 +960,9 @@
<name>popup_pause</name> <name>popup_pause</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_pause_activate</handler> <handler>GnomePopupPauseActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:52:11 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:17:31 GMT</last_modification_time>
</signal> </signal>
<label>Pause</label> <label>Pause</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -941,8 +974,9 @@ ...@@ -941,8 +974,9 @@
<name>popup_stop</name> <name>popup_stop</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_stop_activate</handler> <handler>GnomePopupStopActivate</handler>
<last_modification_time>Tue, 01 May 2001 22:18:09 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:18:10 GMT</last_modification_time>
</signal> </signal>
<label>Stop</label> <label>Stop</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -955,8 +989,9 @@ ...@@ -955,8 +989,9 @@
<sensitive>False</sensitive> <sensitive>False</sensitive>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_back_activate</handler> <handler>GnomePopupBackActivate</handler>
<last_modification_time>Sun, 06 May 2001 15:33:13 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:18:21 GMT</last_modification_time>
</signal> </signal>
<label>Back</label> <label>Back</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -968,8 +1003,9 @@ ...@@ -968,8 +1003,9 @@
<name>popup_slow</name> <name>popup_slow</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_slow_activate</handler> <handler>GnomePopupSlowActivate</handler>
<last_modification_time>Mon, 12 Feb 2001 07:19:57 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:18:29 GMT</last_modification_time>
</signal> </signal>
<label>Slow</label> <label>Slow</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -981,8 +1017,9 @@ ...@@ -981,8 +1017,9 @@
<name>popup_fast</name> <name>popup_fast</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_fast_activate</handler> <handler>GnomePopupFastActivate</handler>
<last_modification_time>Mon, 12 Feb 2001 07:19:57 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:18:37 GMT</last_modification_time>
</signal> </signal>
<label>Fast</label> <label>Fast</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -996,17 +1033,30 @@ ...@@ -996,17 +1033,30 @@
</widget> </widget>
<widget> <widget>
<class>GtkCheckMenuItem</class> <class>GtkMenuItem</class>
<name>popup_interface_toggle</name>
<signal>
<name>activate</name>
<handler>GnomePopupWindowToggleActivate</handler>
<data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:18:51 GMT</last_modification_time>
</signal>
<label>Toggle _Interface</label>
<right_justify>False</right_justify>
</widget>
<widget>
<class>GtkMenuItem</class>
<name>popup_fullscreen</name> <name>popup_fullscreen</name>
<tooltip>Toggle fullscreen mode</tooltip> <tooltip>Toggle fullscreen mode</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_fullscreen_activate</handler> <handler>GnomePopupFullscreenActivate</handler>
<last_modification_time>Wed, 02 May 2001 23:36:07 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:19:07 GMT</last_modification_time>
</signal> </signal>
<label>_Fullscreen</label> <label>_Fullscreen</label>
<active>False</active> <right_justify>False</right_justify>
<always_show_toggle>True</always_show_toggle>
</widget> </widget>
<widget> <widget>
...@@ -1015,14 +1065,41 @@ ...@@ -1015,14 +1065,41 @@
<right_justify>False</right_justify> <right_justify>False</right_justify>
</widget> </widget>
<widget>
<class>GtkMenuItem</class>
<name>popup_next</name>
<signal>
<name>activate</name>
<handler>GnomePopupNextActivate</handler>
<data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:19:18 GMT</last_modification_time>
</signal>
<label>Next</label>
<right_justify>False</right_justify>
</widget>
<widget>
<class>GtkMenuItem</class>
<name>popup_prev</name>
<signal>
<name>activate</name>
<handler>GnomePopupPrevActivate</handler>
<data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:19:26 GMT</last_modification_time>
</signal>
<label>Prev</label>
<right_justify>False</right_justify>
</widget>
<widget> <widget>
<class>GtkPixmapMenuItem</class> <class>GtkPixmapMenuItem</class>
<name>popup_jump</name> <name>popup_jump</name>
<tooltip>Got directly so specified point</tooltip> <tooltip>Got directly so specified point</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_jump_activate</handler> <handler>GnomePopupJumpActivate</handler>
<last_modification_time>Tue, 01 May 2001 22:22:49 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:34:46 GMT</last_modification_time>
</signal> </signal>
<label>_Jump...</label> <label>_Jump...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -1059,7 +1136,7 @@ ...@@ -1059,7 +1136,7 @@
<widget> <widget>
<class>GtkPixmapMenuItem</class> <class>GtkPixmapMenuItem</class>
<name>popup_subtitle</name> <name>popup_subpictures</name>
<sensitive>False</sensitive> <sensitive>False</sensitive>
<tooltip>Select subtitle channel</tooltip> <tooltip>Select subtitle channel</tooltip>
<label>_Subtitles</label> <label>_Subtitles</label>
...@@ -1088,8 +1165,9 @@ ...@@ -1088,8 +1165,9 @@
<tooltip>Open a File</tooltip> <tooltip>Open a File</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_open_activate</handler> <handler>GnomePopupFileOpenActivate</handler>
<last_modification_time>Sun, 04 Mar 2001 21:01:58 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:20:08 GMT</last_modification_time>
</signal> </signal>
<label>_Open File...</label> <label>_Open File...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -1102,8 +1180,9 @@ ...@@ -1102,8 +1180,9 @@
<tooltip>Open a DVD or VCD</tooltip> <tooltip>Open a DVD or VCD</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_disc_activate</handler> <handler>GnomePopupDiscOpenActivate</handler>
<last_modification_time>Sun, 04 Mar 2001 02:57:11 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:20:44 GMT</last_modification_time>
</signal> </signal>
<label>Open _Disc...</label> <label>Open _Disc...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -1116,8 +1195,9 @@ ...@@ -1116,8 +1195,9 @@
<tooltip>Select a Network Stream</tooltip> <tooltip>Select a Network Stream</tooltip>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_network_activate</handler> <handler>GnomePopupNetworkOpenActivate</handler>
<last_modification_time>Mon, 12 Mar 2001 14:57:25 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:20:54 GMT</last_modification_time>
</signal> </signal>
<label>_Network Stream...</label> <label>_Network Stream...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -1135,8 +1215,9 @@ ...@@ -1135,8 +1215,9 @@
<name>popup_about</name> <name>popup_about</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_about_activate</handler> <handler>GnomePopupAboutActivate</handler>
<last_modification_time>Mon, 12 Feb 2001 00:00:08 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:21:02 GMT</last_modification_time>
</signal> </signal>
<stock_item>GNOMEUIINFO_MENU_ABOUT_ITEM</stock_item> <stock_item>GNOMEUIINFO_MENU_ABOUT_ITEM</stock_item>
</widget> </widget>
...@@ -1148,8 +1229,9 @@ ...@@ -1148,8 +1229,9 @@
<name>popup_playlist</name> <name>popup_playlist</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_playlist_activate</handler> <handler>GnomePopupPlaylistActivate</handler>
<last_modification_time>Wed, 02 May 2001 14:16:23 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:21:14 GMT</last_modification_time>
</signal> </signal>
<label>Playlist...</label> <label>Playlist...</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -1160,8 +1242,9 @@ ...@@ -1160,8 +1242,9 @@
<name>popup_preferences</name> <name>popup_preferences</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_preferences_activate</handler> <handler>GnomePopupPreferencesActivate</handler>
<last_modification_time>Tue, 01 May 2001 22:17:08 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:21:25 GMT</last_modification_time>
</signal> </signal>
<stock_item>GNOMEUIINFO_MENU_PREFERENCES_ITEM</stock_item> <stock_item>GNOMEUIINFO_MENU_PREFERENCES_ITEM</stock_item>
</widget> </widget>
...@@ -1177,8 +1260,9 @@ ...@@ -1177,8 +1260,9 @@
<name>popup_exit</name> <name>popup_exit</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_popup_exit_activate</handler> <handler>GnomePopupExitActivate</handler>
<last_modification_time>Sun, 11 Feb 2001 16:49:30 GMT</last_modification_time> <data>&quot;intf_popup&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:21:45 GMT</last_modification_time>
</signal> </signal>
<stock_item>GNOMEUIINFO_MENU_EXIT_ITEM</stock_item> <stock_item>GNOMEUIINFO_MENU_EXIT_ITEM</stock_item>
</widget> </widget>
...@@ -1215,11 +1299,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1215,11 +1299,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<class>GtkFileSelection</class> <class>GtkFileSelection</class>
<name>intf_fileopen</name> <name>intf_fileopen</name>
<border_width>10</border_width> <border_width>10</border_width>
<signal>
<name>destroy</name>
<handler>on_intf_fileopen_destroy</handler>
<last_modification_time>Sun, 11 Feb 2001 18:36:13 GMT</last_modification_time>
</signal>
<title>Open File</title> <title>Open File</title>
<type>GTK_WINDOW_TOPLEVEL</type> <type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position> <position>GTK_WIN_POS_NONE</position>
...@@ -1237,8 +1316,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1237,8 +1316,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_fileopen_ok_clicked</handler> <handler>GtkFileOpenOk</handler>
<last_modification_time>Sun, 11 Feb 2001 18:22:44 GMT</last_modification_time> <data>&quot;intf_fileopen&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:10:36 GMT</last_modification_time>
</signal> </signal>
<label>OK</label> <label>OK</label>
<relief>GTK_RELIEF_NORMAL</relief> <relief>GTK_RELIEF_NORMAL</relief>
...@@ -1252,8 +1332,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1252,8 +1332,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_fileopen_cancel_clicked</handler> <handler>GtkFileOpenCancel</handler>
<last_modification_time>Sun, 11 Feb 2001 18:22:50 GMT</last_modification_time> <data>&quot;intf_fileopen&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:10:31 GMT</last_modification_time>
</signal> </signal>
<label>Cancel</label> <label>Cancel</label>
<relief>GTK_RELIEF_NORMAL</relief> <relief>GTK_RELIEF_NORMAL</relief>
...@@ -1263,11 +1344,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1263,11 +1344,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<widget> <widget>
<class>GnomeDialog</class> <class>GnomeDialog</class>
<name>intf_modules</name> <name>intf_modules</name>
<signal>
<name>destroy</name>
<handler>on_intf_modules_destroy</handler>
<last_modification_time>Tue, 13 Feb 2001 09:19:08 GMT</last_modification_time>
</signal>
<title>Modules</title> <title>Modules</title>
<type>GTK_WINDOW_TOPLEVEL</type> <type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position> <position>GTK_WIN_POS_NONE</position>
...@@ -1312,11 +1388,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1312,11 +1388,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>modules_ok</name> <name>modules_ok</name>
<can_default>True</can_default> <can_default>True</can_default>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_modules_ok_clicked</handler>
<last_modification_time>Tue, 13 Feb 2001 09:21:29 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button> <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget> </widget>
...@@ -1325,11 +1396,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1325,11 +1396,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>modules_apply</name> <name>modules_apply</name>
<can_default>True</can_default> <can_default>True</can_default>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_modules_apply_clicked</handler>
<last_modification_time>Tue, 13 Feb 2001 09:21:25 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button> <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
</widget> </widget>
...@@ -1338,11 +1404,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1338,11 +1404,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>modules_cancel</name> <name>modules_cancel</name>
<can_default>True</can_default> <can_default>True</can_default>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_modules_cancel_clicked</handler>
<last_modification_time>Tue, 13 Feb 2001 09:21:34 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget> </widget>
</widget> </widget>
...@@ -1415,8 +1476,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1415,8 +1476,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_disc_ok_clicked</handler> <handler>GtkDiscOpenOk</handler>
<last_modification_time>Sun, 04 Mar 2001 01:33:55 GMT</last_modification_time> <data>&quot;intf_disc&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:10:12 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button> <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget> </widget>
...@@ -1428,8 +1490,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1428,8 +1490,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_disc_cancel_clicked</handler> <handler>GtkDiscOpenCancel</handler>
<last_modification_time>Sun, 04 Mar 2001 01:33:50 GMT</last_modification_time> <data>&quot;intf_disc&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:10:07 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget> </widget>
...@@ -1470,8 +1533,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1470,8 +1533,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>toggled</name> <name>toggled</name>
<handler>on_disc_dvd_toggled</handler> <handler>GtkDiscOpenDvd</handler>
<last_modification_time>Sun, 04 Mar 2001 02:12:52 GMT</last_modification_time> <data>&quot;intf_disc&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:18:29 GMT</last_modification_time>
</signal> </signal>
<label>DVD</label> <label>DVD</label>
<active>False</active> <active>False</active>
...@@ -1491,8 +1555,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1491,8 +1555,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>toggled</name> <name>toggled</name>
<handler>on_disc_vcd_toggled</handler> <handler>GtkDiscOpenVcd</handler>
<last_modification_time>Sun, 04 Mar 2001 02:12:58 GMT</last_modification_time> <data>&quot;intf_disc&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:22:10 GMT</last_modification_time>
</signal> </signal>
<label>VCD</label> <label>VCD</label>
<active>False</active> <active>False</active>
...@@ -1743,8 +1808,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1743,8 +1808,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_network_ok_clicked</handler> <handler>GtkNetworkOpenOk</handler>
<last_modification_time>Mon, 12 Mar 2001 14:56:40 GMT</last_modification_time> <data>&quot;intf_network&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:09:40 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button> <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget> </widget>
...@@ -1756,8 +1822,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1756,8 +1822,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_network_cancel_clicked</handler> <handler>GtkNetworkOpenCancel</handler>
<last_modification_time>Mon, 12 Mar 2001 14:56:51 GMT</last_modification_time> <data>&quot;intf_network&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:09:44 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget> </widget>
...@@ -1954,8 +2021,8 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -1954,8 +2021,8 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>toggled</name> <name>toggled</name>
<handler>on_broadcast_check_toggled</handler> <handler>GtkNetworkOpenBroadcast</handler>
<last_modification_time>Wed, 02 May 2001 00:28:21 GMT</last_modification_time> <last_modification_time>Sat, 19 May 2001 02:57:46 GMT</last_modification_time>
</signal> </signal>
<label>Broadcast</label> <label>Broadcast</label>
<active>False</active> <active>False</active>
...@@ -2049,8 +2116,15 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2049,8 +2116,15 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>intf_playlist</name> <name>intf_playlist</name>
<signal> <signal>
<name>destroy</name> <name>destroy</name>
<handler>on_playlist_destroy</handler> <handler>gtk_widget_hide</handler>
<last_modification_time>Tue, 08 May 2001 23:21:39 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:09:08 GMT</last_modification_time>
</signal>
<signal>
<name>delete_event</name>
<handler>gtk_widget_hide</handler>
<data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:09:12 GMT</last_modification_time>
</signal> </signal>
<title>Playlist</title> <title>Playlist</title>
<type>GTK_WINDOW_TOPLEVEL</type> <type>GTK_WINDOW_TOPLEVEL</type>
...@@ -2100,8 +2174,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2100,8 +2174,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_playlist_ok_clicked</handler> <handler>GtkPlaylistOk</handler>
<last_modification_time>Sun, 06 May 2001 04:14:54 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:09:00 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button> <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget> </widget>
...@@ -2113,8 +2188,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2113,8 +2188,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_playlist_cancel_clicked</handler> <handler>GtkPlaylistCancel</handler>
<last_modification_time>Sun, 06 May 2001 03:41:33 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:08:56 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget> </widget>
...@@ -2152,18 +2228,21 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2152,18 +2228,21 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>event</name> <name>event</name>
<handler>on_playlist_clist_event</handler> <handler>GtkPlaylistEvent</handler>
<last_modification_time>Tue, 01 May 2001 22:13:12 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:08:43 GMT</last_modification_time>
</signal> </signal>
<signal> <signal>
<name>drag_data_received</name> <name>drag_data_received</name>
<handler>on_playlist_clist_drag_data_received</handler> <handler>GtkPlaylistDragData</handler>
<last_modification_time>Tue, 01 May 2001 22:13:32 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:08:45 GMT</last_modification_time>
</signal> </signal>
<signal> <signal>
<name>drag_motion</name> <name>drag_motion</name>
<handler>on_playlist_clist_drag_motion</handler> <handler>GtkPlaylistDragMotion</handler>
<last_modification_time>Tue, 01 May 2001 22:13:52 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:08:49 GMT</last_modification_time>
</signal> </signal>
<columns>2</columns> <columns>2</columns>
<column_widths>287,70</column_widths> <column_widths>287,70</column_widths>
...@@ -2226,8 +2305,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2226,8 +2305,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_add_disc</name> <name>playlist_add_disc</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_disc_activate</handler> <handler>GnomePlaylistDiscOpenActivate</handler>
<last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:22:26 GMT</last_modification_time>
</signal> </signal>
<label>Disc</label> <label>Disc</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2238,8 +2318,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2238,8 +2318,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_add_file</name> <name>playlist_add_file</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_file_activate</handler> <handler>GnomePlaylistFileOpenActivate</handler>
<last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:22:37 GMT</last_modification_time>
</signal> </signal>
<label>File</label> <label>File</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2250,8 +2331,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2250,8 +2331,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_add_network</name> <name>playlist_add_network</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_network_activate</handler> <handler>GnomePlaylistNetworkOpenActivate</handler>
<last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:22:52 GMT</last_modification_time>
</signal> </signal>
<label>Network</label> <label>Network</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2262,8 +2344,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2262,8 +2344,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_add_url</name> <name>playlist_add_url</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_url_activate</handler> <handler>GtkPlaylistAddUrl</handler>
<last_modification_time>Tue, 01 May 2001 19:07:11 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 16:24:27 GMT</last_modification_time>
</signal> </signal>
<label>Url</label> <label>Url</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2286,8 +2369,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2286,8 +2369,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_delete_all</name> <name>playlist_delete_all</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_delete_all_activate</handler> <handler>GtkPlaylistDeleteAll</handler>
<last_modification_time>Sun, 06 May 2001 01:51:40 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:08:11 GMT</last_modification_time>
</signal> </signal>
<label>All</label> <label>All</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2298,8 +2382,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2298,8 +2382,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playmist_delete_item</name> <name>playmist_delete_item</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_delete_item_activate</handler> <handler>GtkPlaylistDeleteSelected</handler>
<last_modification_time>Sun, 06 May 2001 01:51:28 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:08:05 GMT</last_modification_time>
</signal> </signal>
<label>Item</label> <label>Item</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2322,8 +2407,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2322,8 +2407,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_selection_crop</name> <name>playlist_selection_crop</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_crop_activate</handler> <handler>GtkPlaylistCrop</handler>
<last_modification_time>Tue, 01 May 2001 18:47:42 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:07:56 GMT</last_modification_time>
</signal> </signal>
<label>Crop</label> <label>Crop</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2334,8 +2420,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2334,8 +2420,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_selection_invert</name> <name>playlist_selection_invert</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_invert_activate</handler> <handler>GtkPlaylistInvert</handler>
<last_modification_time>Tue, 01 May 2001 18:47:42 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:07:51 GMT</last_modification_time>
</signal> </signal>
<label>Invert</label> <label>Invert</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2346,8 +2433,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2346,8 +2433,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<name>playlist_selection_select</name> <name>playlist_selection_select</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
<handler>on_playlist_select_activate</handler> <handler>GtkPlaylistSelect</handler>
<last_modification_time>Tue, 01 May 2001 18:47:42 GMT</last_modification_time> <data>&quot;intf_playlist&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:07:45 GMT</last_modification_time>
</signal> </signal>
<label>Select</label> <label>Select</label>
<right_justify>False</right_justify> <right_justify>False</right_justify>
...@@ -2406,8 +2494,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2406,8 +2494,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_jump_ok_clicked</handler> <handler>GtkJumpOk</handler>
<last_modification_time>Wed, 02 May 2001 02:20:21 GMT</last_modification_time> <data>&quot;intf_jump&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:07:27 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button> <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget> </widget>
...@@ -2419,8 +2508,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2419,8 +2508,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_jump_cancel_clicked</handler> <handler>GtkJumpCancel</handler>
<last_modification_time>Wed, 02 May 2001 02:20:54 GMT</last_modification_time> <data>&quot;intf_jump&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:07:20 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget> </widget>
...@@ -2628,8 +2718,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2628,8 +2718,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_preferences_ok_clicked</handler> <handler>GtkPreferencesOk</handler>
<last_modification_time>Wed, 02 May 2001 17:04:42 GMT</last_modification_time> <data>&quot;intf_preferences&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:06:57 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button> <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
</widget> </widget>
...@@ -2641,8 +2732,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2641,8 +2732,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_preferences_apply_clicked</handler> <handler>GtkPreferencesApply</handler>
<last_modification_time>Wed, 02 May 2001 17:04:50 GMT</last_modification_time> <data>&quot;intf_preferences&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:06:53 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button> <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
</widget> </widget>
...@@ -2654,8 +2746,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2654,8 +2746,9 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>clicked</name> <name>clicked</name>
<handler>on_preferences_cancel_clicked</handler> <handler>GtkPreferencesCancel</handler>
<last_modification_time>Wed, 02 May 2001 17:05:00 GMT</last_modification_time> <data>&quot;intf_preferences&quot;</data>
<last_modification_time>Sat, 19 May 2001 03:07:05 GMT</last_modification_time>
</signal> </signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button> <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
</widget> </widget>
...@@ -2719,7 +2812,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt; ...@@ -2719,7 +2812,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<widget> <widget>
<class>GtkEntry</class> <class>GtkEntry</class>
<child_name>GnomeEntry:entry</child_name> <child_name>GnomeEntry:entry</child_name>
<name>preferences_file_entry</name> <name>preferences_file_path_entry</name>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<editable>True</editable> <editable>True</editable>
<text_visible>True</text_visible> <text_visible>True</text_visible>
...@@ -4036,7 +4129,7 @@ Stereo ...@@ -4036,7 +4129,7 @@ Stereo
<widget> <widget>
<class>GtkCheckButton</class> <class>GtkCheckButton</class>
<name>preferences_playlist_launch_on_startup_checkbutton</name> <name>preferences_playlist_startup_checkbutton</name>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<label>Launch on startup</label> <label>Launch on startup</label>
<active>False</active> <active>False</active>
...@@ -4082,7 +4175,7 @@ Stereo ...@@ -4082,7 +4175,7 @@ Stereo
<widget> <widget>
<class>GtkCheckButton</class> <class>GtkCheckButton</class>
<name>preferences_playlist_enqueue_as_default_checkbutton</name> <name>preferences_playlist_enqueue_checkbutton</name>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<label>Enqueue as default</label> <label>Enqueue as default</label>
<active>False</active> <active>False</active>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* intf_gtk.c: Gtk+ interface * intf_gtk.c: Gtk+ interface
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: intf_gtk.c,v 1.20 2001/05/19 00:39:30 stef Exp $ * $Id: intf_gtk.c,v 1.21 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* Stphane Borel <stef@via.ecp.fr> * Stphane Borel <stef@via.ecp.fr>
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
#include "gtk_interface.h" #include "gtk_interface.h"
#include "gtk_support.h" #include "gtk_support.h"
#include "gtk_menu.h" #include "gtk_menu.h"
#include "gtk_display.h"
#include "intf_gtk.h" #include "intf_gtk.h"
#include "main.h" #include "main.h"
...@@ -71,8 +72,6 @@ static void intf_Close ( intf_thread_t *p_intf ); ...@@ -71,8 +72,6 @@ static void intf_Close ( intf_thread_t *p_intf );
static void intf_Run ( intf_thread_t *p_intf ); static void intf_Run ( intf_thread_t *p_intf );
static gint GtkManage ( gpointer p_data ); static gint GtkManage ( gpointer p_data );
static gint GtkModeManage ( intf_thread_t * p_intf );
static void GtkDisplayDate ( GtkAdjustment *p_adj );
/***************************************************************************** /*****************************************************************************
* g_atexit: kludge to avoid the Gtk+ thread to segfault at exit * g_atexit: kludge to avoid the Gtk+ thread to segfault at exit
...@@ -149,6 +148,7 @@ static int intf_Open( intf_thread_t *p_intf ) ...@@ -149,6 +148,7 @@ static int intf_Open( intf_thread_t *p_intf )
p_intf->p_sys->b_window_changed = 0; p_intf->p_sys->b_window_changed = 0;
p_intf->p_sys->b_playlist_changed = 0; p_intf->p_sys->b_playlist_changed = 0;
p_intf->p_sys->i_playing = -1;
p_intf->p_sys->b_slider_free = 1; p_intf->p_sys->b_slider_free = 1;
p_intf->p_sys->pf_gtk_callback = NULL; p_intf->p_sys->pf_gtk_callback = NULL;
...@@ -290,7 +290,6 @@ static void intf_Run( intf_thread_t *p_intf ) ...@@ -290,7 +290,6 @@ static void intf_Run( intf_thread_t *p_intf )
* In this function, called approx. 10 times a second, we check what the * In this function, called approx. 10 times a second, we check what the
* main program wanted to tell us. * main program wanted to tell us.
*****************************************************************************/ *****************************************************************************/
static gint GtkManage( gpointer p_data ) static gint GtkManage( gpointer p_data )
{ {
#define p_intf ((intf_thread_t *)p_data) #define p_intf ((intf_thread_t *)p_data)
...@@ -312,7 +311,7 @@ static gint GtkManage( gpointer p_data ) ...@@ -312,7 +311,7 @@ static gint GtkManage( gpointer p_data )
} }
/* update the playlist */ /* update the playlist */
// GtkPlayListManage( p_data ); GtkPlayListManage( p_data );
if( p_intf->p_input != NULL && !p_intf->b_die ) if( p_intf->p_input != NULL && !p_intf->b_die )
{ {
...@@ -392,157 +391,3 @@ static gint GtkManage( gpointer p_data ) ...@@ -392,157 +391,3 @@ static gint GtkManage( gpointer p_data )
#undef p_intf #undef p_intf
} }
/*****************************************************************************
* GtkDisplayDate: display stream date
*****************************************************************************
* This function displays the current date related to the position in
* the stream. It is called whenever the slider changes its value.
* The lock has to be taken before you call the function.
*****************************************************************************/
void GtkDisplayDate( GtkAdjustment *p_adj )
{
intf_thread_t *p_intf;
p_intf = gtk_object_get_data( GTK_OBJECT( p_adj ), "p_intf" );
if( p_intf->p_input != NULL )
{
#define p_area p_intf->p_input->stream.p_selected_area
char psz_time[ OFFSETTOTIME_MAX_SIZE ];
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 ) );
#undef p_area
}
}
/*****************************************************************************
* GtkModeManage: actualise the aspect of the interface whenever the input
* changes.
*****************************************************************************
* The lock has to be taken before you call the function.
*****************************************************************************/
static gint GtkModeManage( 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 except default file box */
p_file_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "file_box" ) );
gtk_widget_hide( GTK_WIDGET( p_file_box ) );
p_network_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "network_box" ) );
gtk_widget_hide( GTK_WIDGET( p_network_box ) );
p_dvd_box = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "dvd_box" ) );
gtk_widget_hide( GTK_WIDGET( p_dvd_box ) );
/* hide slider */
p_slider = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(
p_intf->p_sys->p_window ), "slider_frame" ) );
gtk_widget_hide( GTK_WIDGET( p_slider ) );
/* controls unavailable */
b_control = 0;
/* show the box related to current input mode */
if( p_intf->p_input != NULL )
{
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;
}
/* slider for seekable streams */
if( p_intf->p_input->stream.b_seekable )
{
gtk_widget_show( GTK_WIDGET( p_slider ) );
}
/* control buttons for free pace streams */
b_control = p_intf->p_input->stream.b_pace_control;
/* get ready for menu regeneration */
p_intf->p_sys->b_title_update = 1;
p_intf->p_sys->b_chapter_update = 1;
p_intf->p_sys->b_angle_update = 1;
p_intf->p_sys->b_audio_update = 1;
p_intf->p_sys->b_spu_update = 1;
p_intf->p_sys->i_part = 0;
p_intf->p_input->stream.b_changed = 0;
intf_WarnMsg( 3,
"intf info: menus refreshed as stream has changed" );
}
else
{
/* default mode */
p_label = gtk_object_get_data( GTK_OBJECT( p_intf->p_sys->p_window ),
"label_status" );
gtk_label_set_text( GTK_LABEL( p_label ), "" );
gtk_widget_show( GTK_WIDGET( p_file_box ) );
/* unsensitize menus */
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_title"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_chapter"),
FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_angle"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_audio"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window,"menubar_subpictures"),
FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_navigation"),
FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_angle"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_audio"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup,"popup_subpictures"),
FALSE );
}
/* set control items */
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_back"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_stop"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_pause"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_slow"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_window, "toolbar_fast"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_back"), FALSE );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_stop"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_pause"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_slow"), b_control );
gtk_widget_set_sensitive( GETWIDGET(p_popup, "popup_fast"), b_control );
#undef GETWIDGET
return TRUE;
}
...@@ -186,7 +186,7 @@ ...@@ -186,7 +186,7 @@
</widget> </widget>
<widget> <widget>
<class>GtkCheckMenuItem</class> <class>GtkMenuItem</class>
<name>menubar_fullscreen</name> <name>menubar_fullscreen</name>
<signal> <signal>
<name>activate</name> <name>activate</name>
...@@ -195,8 +195,7 @@ ...@@ -195,8 +195,7 @@
<last_modification_time>Mon, 14 May 2001 21:29:21 GMT</last_modification_time> <last_modification_time>Mon, 14 May 2001 21:29:21 GMT</last_modification_time>
</signal> </signal>
<label>_Fullscreen</label> <label>_Fullscreen</label>
<active>False</active> <right_justify>False</right_justify>
<always_show_toggle>True</always_show_toggle>
</widget> </widget>
<widget> <widget>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* intf_gtk.h: private Gtk+ interface description * intf_gtk.h: private Gtk+ interface description
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: intf_gtk.h,v 1.5 2001/05/19 00:39:30 stef Exp $ * $Id: intf_gtk.h,v 1.6 2001/05/23 23:08:20 stef Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
...@@ -57,7 +57,6 @@ typedef struct intf_sys_s ...@@ -57,7 +57,6 @@ typedef struct intf_sys_s
boolean_t b_popup_changed; /* display menu ? */ boolean_t b_popup_changed; /* display menu ? */
boolean_t b_window_changed; /* window display toggled ? */ boolean_t b_window_changed; /* window display toggled ? */
boolean_t b_playlist_changed; /* playlist display toggled ? */ boolean_t b_playlist_changed; /* playlist display toggled ? */
boolean_t b_menus_update; /* menus have changed ? */
boolean_t b_slider_free; /* slider status */ boolean_t b_slider_free; /* slider status */
/* menus handlers */ /* menus handlers */
...@@ -99,4 +98,11 @@ typedef struct intf_sys_s ...@@ -99,4 +98,11 @@ typedef struct intf_sys_s
} intf_sys_t; } intf_sys_t;
/*****************************************************************************
* Prototypes
*****************************************************************************/
gint GtkModeManage ( intf_thread_t * p_intf );
void GtkDisplayDate ( GtkAdjustment *p_adj );
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