X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fgui%2Fgtk%2Fgtk_callbacks.c;h=5c17f40603bfd1a01ece3e9ad7fa4aefa6c8a359;hb=063cb8b6211d7acd370100dcfa3a839b91254e6b;hp=89a0ca29ea089d54cafb0c4a2dc6851e161edf7b;hpb=87c994f0c4c95e6f3dc8cd2690c7883c68f3313c;p=vlc diff --git a/modules/gui/gtk/gtk_callbacks.c b/modules/gui/gtk/gtk_callbacks.c index 89a0ca29ea..5c17f40603 100644 --- a/modules/gui/gtk/gtk_callbacks.c +++ b/modules/gui/gtk/gtk_callbacks.c @@ -1,10 +1,10 @@ /***************************************************************************** * gtk_callbacks.c : Callbacks for the Gtk+ plugin. ***************************************************************************** - * Copyright (C) 2000, 2001 VideoLAN - * $Id: gtk_callbacks.c,v 1.7 2003/01/17 19:17:09 sam Exp $ + * Copyright (C) 2000, 2001, 2003 the VideoLAN team + * $Id$ * - * Authors: Samuel Hocevar + * Authors: Sam Hocevar * Stéphane Borel * Julien BLACHE * @@ -32,6 +32,7 @@ #include #include #include +#include #include @@ -45,7 +46,17 @@ #include "common.h" -#include "netutils.h" +#ifdef HAVE_CDDAX +#define CDDA_MRL "cddax://" +#else +#define CDDA_MRL "cdda://" +#endif + +#ifdef HAVE_VCDX +#define VCD_MRL "vcdx://" +#else +#define VCD_MRL "vcdx://" +#endif /***************************************************************************** * Useful function to retrieve p_intf @@ -71,11 +82,15 @@ void * E_(__GtkGetIntf)( GtkWidget * widget ) /* Otherwise, the parent widget has it */ widget = gtk_menu_get_attach_widget( GTK_MENU( widget ) ); + p_data = gtk_object_get_data( GTK_OBJECT( widget ), "p_intf" ); + if( p_data ) + { + return p_data; + } } /* We look for the top widget */ widget = gtk_widget_get_toplevel( GTK_WIDGET( widget ) ); - p_data = gtk_object_get_data( GTK_OBJECT( widget ), "p_intf" ); return p_data; @@ -147,6 +162,11 @@ gboolean GtkFullscreen( GtkWidget *widget, intf_thread_t *p_intf = GtkGetIntf( widget ); vout_thread_t *p_vout; + if( p_intf->p_sys->p_input == NULL ) + { + return FALSE; + } + p_vout = vlc_object_find( p_intf->p_sys->p_input, VLC_OBJECT_VOUT, FIND_CHILD ); if( p_vout == NULL ) @@ -211,147 +231,55 @@ gboolean GtkSliderPress( GtkWidget *widget, void GtkTitlePrev( GtkButton * button, gpointer user_data ) { - intf_thread_t * p_intf; - input_area_t * p_area; - int i_id; + intf_thread_t * p_intf = GtkGetIntf( button ); - p_intf = GtkGetIntf( button ); - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - i_id = p_intf->p_sys->p_input->stream.p_selected_area->i_id - 1; - - if( i_id > 0 ) - { - p_area = p_intf->p_sys->p_input->stream.pp_areas[i_id]; - vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); - - input_ChangeArea( p_intf->p_sys->p_input, p_area ); - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY ); - - p_intf->p_sys->b_title_update = VLC_TRUE; - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - GtkSetupMenus( p_intf ); - } + var_SetVoid( p_intf->p_sys->p_input, "prev-title" ); + p_intf->p_sys->b_title_update = VLC_TRUE; + vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); + GtkSetupMenus( p_intf ); vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); } void GtkTitleNext( GtkButton * button, gpointer user_data ) { - intf_thread_t * p_intf; - input_area_t * p_area; - unsigned int i_id; - - p_intf = GtkGetIntf( button ); - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - i_id = p_intf->p_sys->p_input->stream.p_selected_area->i_id + 1; - - if( i_id < p_intf->p_sys->p_input->stream.i_area_nb ) - { - p_area = p_intf->p_sys->p_input->stream.pp_areas[i_id]; - vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); - - input_ChangeArea( p_intf->p_sys->p_input, p_area ); - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY ); + intf_thread_t * p_intf = GtkGetIntf( button ); - p_intf->p_sys->b_title_update = VLC_TRUE; - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - GtkSetupMenus( p_intf ); - } + var_SetVoid( p_intf->p_sys->p_input, "next-title" ); + p_intf->p_sys->b_title_update = VLC_TRUE; + vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); + GtkSetupMenus( p_intf ); vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); } void GtkChapterPrev( GtkButton * button, gpointer user_data ) { - intf_thread_t * p_intf; - input_area_t * p_area; + intf_thread_t * p_intf = GtkGetIntf( button ); - p_intf = GtkGetIntf( button ); - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - p_area = p_intf->p_sys->p_input->stream.p_selected_area; - - if( p_area->i_part - 1 > 0 ) - { - p_area->i_part--; - vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); - - input_ChangeArea( p_intf->p_sys->p_input, p_area ); - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY ); - - p_intf->p_sys->b_chapter_update = VLC_TRUE; - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - GtkSetupMenus( p_intf ); - } + var_SetVoid( p_intf->p_sys->p_input, "prev-chapter" ); + p_intf->p_sys->b_chapter_update = VLC_TRUE; + vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); + GtkSetupMenus( p_intf ); vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); } void GtkChapterNext( GtkButton * button, gpointer user_data ) { - intf_thread_t * p_intf; - input_area_t * p_area; - - p_intf = GtkGetIntf( button ); - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - p_area = p_intf->p_sys->p_input->stream.p_selected_area; + intf_thread_t * p_intf = GtkGetIntf( button ); - if( p_area->i_part + 1 < p_area->i_part_nb ) - { - p_area->i_part++; - vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); - - input_ChangeArea( p_intf->p_sys->p_input, p_area ); - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY ); - - p_intf->p_sys->b_chapter_update = VLC_TRUE; - vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); - GtkSetupMenus( p_intf ); - } + var_SetVoid( p_intf->p_sys->p_input, "next-chapter" ); + p_intf->p_sys->b_chapter_update = VLC_TRUE; + vlc_mutex_lock( &p_intf->p_sys->p_input->stream.stream_lock ); + GtkSetupMenus( p_intf ); vlc_mutex_unlock( &p_intf->p_sys->p_input->stream.stream_lock ); } -/**************************************************************************** - * Network specific items - ****************************************************************************/ -void GtkNetworkJoin( GtkEditable * editable, gpointer user_data ) -{ - int i_channel; - - i_channel = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( editable ) ); -#if 0 - msg_Dbg( "intf info: joining channel %d", i_channel ); - - network_ChannelJoin( i_channel ); -#endif -} - -void GtkChannelGo( GtkButton * button, gpointer user_data ) -{ - GtkWidget * window; - GtkWidget * spin; - int i_channel; - - intf_thread_t *p_intf = GtkGetIntf( button ); - - window = gtk_widget_get_toplevel( GTK_WIDGET (button) ); - spin = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( window ), - "network_channel_spinbutton" ) ); - - i_channel = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spin ) ); - msg_Dbg( p_intf, "joining channel %d", i_channel ); - - vlc_mutex_lock( &p_intf->change_lock ); - network_ChannelJoin( p_intf, i_channel ); - vlc_mutex_unlock( &p_intf->change_lock ); - -/* input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PLAY ); */ -} - - /**************************************************************************** * About box ****************************************************************************/ @@ -423,9 +351,8 @@ void GtkJumpOk( GtkButton *button, i_seconds = GET_VALUE( "jump_second_spinbutton" ); #undef GET_VALUE - input_Seek( p_intf->p_sys->p_input, - i_seconds + 60 * i_minutes + 3600 * i_hours, - INPUT_SEEK_SECONDS | INPUT_SEEK_SET ); + var_SetTime( p_intf->p_sys->p_input, "time", + (int64_t)(i_seconds+60*i_minutes+3600*i_hours)*I64C(1000000)); gtk_widget_hide( gtk_widget_get_toplevel( GTK_WIDGET (button) ) ); } @@ -463,7 +390,7 @@ gboolean GtkDiscEject ( GtkWidget *widget, gpointer user_data ) return FALSE; } - psz_current = p_playlist->pp_items[ p_playlist->i_index ]->psz_name; + psz_current = p_playlist->pp_items[ p_playlist->i_index ]->input.psz_name; /* * Get the active input @@ -477,31 +404,45 @@ gboolean GtkDiscEject ( GtkWidget *widget, gpointer user_data ) if( psz_current != NULL ) { - if( !strncmp(psz_current, "dvd:", 4) ) + if( !strncmp(psz_current, "dvd://", 4) ) { - switch( psz_current[4] ) + switch( psz_current[strlen("dvd://")] ) { case '\0': case '@': psz_device = config_GetPsz( p_intf, "dvd" ); break; default: - /* Omit the first 4 characters */ - psz_device = strdup( psz_current + 4 ); + /* Omit the first MRL-selector characters */ + psz_device = strdup( psz_current + strlen("dvd://" ) ); break; } } - else if( !strncmp(psz_current, "vcd:", 4) ) + else if( !strncmp(psz_current, "vcd:", strlen("vcd:")) ) { - switch( psz_current[4] ) + switch( psz_current[strlen("vcd:")] ) { case '\0': case '@': - psz_device = config_GetPsz( p_intf, "vcd" ); + psz_device = config_GetPsz( p_intf, VCD_MRL ); break; default: - /* Omit the first 4 characters */ - psz_device = strdup( psz_current + 4 ); + /* Omit the beginning MRL-selector characters */ + psz_device = strdup( psz_current + strlen(VCD_MRL) ); + break; + } + } + else if( !strncmp(psz_current, CDDA_MRL, strlen(CDDA_MRL) ) ) + { + switch( psz_current[strlen(CDDA_MRL)] ) + { + case '\0': + case '@': + psz_device = config_GetPsz( p_intf, "cd-audio" ); + break; + default: + /* Omit the beginning MRL-selector characters */ + psz_device = strdup( psz_current + strlen(CDDA_MRL) ); break; } } @@ -568,7 +509,6 @@ gboolean GtkMessagesShow( GtkWidget *widget, return TRUE; } - void GtkMessagesOk (GtkButton *button, gpointer user_data) @@ -598,3 +538,61 @@ GtkOpenNotebookChanged (GtkNotebook *notebook, GtkOpenChanged( GTK_WIDGET( notebook ), user_data ); } +/**************************************************************************** + * Audio management + ****************************************************************************/ +void GtkVolumeUp ( GtkMenuItem *menuitem, + gpointer user_data ) +{ + intf_thread_t *p_intf = GtkGetIntf( menuitem ); + audio_volume_t i_volume; + + aout_VolumeUp( p_intf, 1, &i_volume ); + p_intf->p_sys->b_mute = ( i_volume == 0 ) ? 1 : 0; +} + + +void GtkVolumeDown ( GtkMenuItem *menuitem, + gpointer user_data ) +{ + intf_thread_t *p_intf = GtkGetIntf( menuitem ); + audio_volume_t i_volume; + + aout_VolumeDown( p_intf, 1, &i_volume ); + p_intf->p_sys->b_mute = ( i_volume == 0 ) ? 1 : 0; +} + + +void GtkVolumeMute ( GtkMenuItem *menuitem, + gpointer user_data ) +{ + intf_thread_t *p_intf = GtkGetIntf( menuitem ); + audio_volume_t i_volume; + + aout_VolumeMute( p_intf, &i_volume ); + p_intf->p_sys->b_mute = ( i_volume == 0 ) ? 1 : 0; +} + +void +GtkMenubarDeinterlace ( GtkMenuItem *menuitem, + gpointer user_data) +{ + intf_thread_t *p_intf = GtkGetIntf( menuitem ); + + if( p_intf ) + msg_Dbg( p_intf, "GtkMenubarDeinterlace" ); +} + + +void +GtkPopupDeinterlace (GtkRadioMenuItem *radiomenuitem, + gpointer user_data) +{ + intf_thread_t *p_intf = GtkGetIntf( radiomenuitem ); + + if( p_intf ) + msg_Dbg( p_intf, "GtkPopupDeinterlace" ); +} + + +