summaryrefslogtreecommitdiffstats
path: root/Gui/mplayer/gtk/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'Gui/mplayer/gtk/fs.c')
-rw-r--r--Gui/mplayer/gtk/fs.c82
1 files changed, 64 insertions, 18 deletions
diff --git a/Gui/mplayer/gtk/fs.c b/Gui/mplayer/gtk/fs.c
index e01ab5c201..9d6c05188e 100644
--- a/Gui/mplayer/gtk/fs.c
+++ b/Gui/mplayer/gtk/fs.c
@@ -20,6 +20,7 @@
#include "../widgets.h"
#include "fs.h"
+#include "opts.h"
#ifndef __linux__
#define get_current_dir_name() getcwd(NULL, PATH_MAX)
@@ -76,6 +77,11 @@ char * fsAudioFileNames[fsNumberOfAudioFilterNames+1][2] =
{ "Audio files (*.wav,*.mp2,*.mp3)", "*.wav,*.mp2,*.mp3" },
{ "All files ( * )", "*" } };
+#define fsNumberOfFontFilterNames 1
+char * fsFontFileNames[fsNumberOfFontFilterNames+1][2] =
+ { { "font files (*.desc)", "*.desc" },
+ { "All files ( * )", "*" } };
+
GtkWidget * fsFileNamesList;
GtkWidget * fsFNameList;
GtkWidget * fsFileSelect;
@@ -120,7 +126,7 @@ void CheckDir( GtkWidget * list,char * directory )
glob( "*",0,NULL,&gg );
// glob( ".*",GLOB_NOSORT | GLOB_APPEND,NULL,&gg );
- for( i=0;i<gg.gl_pathc;i++ )
+ for( i=0;(unsigned)i<gg.gl_pathc;i++ )
{
stat( gg.gl_pathv[i],&fs );
if( !S_ISDIR( fs.st_mode ) ) continue;
@@ -171,7 +177,7 @@ void CheckDir( GtkWidget * list,char * directory )
// glob( ".*",GLOB_NOSORT | GLOB_APPEND,NULL,&gg );
pixmap=fpixmap; mask=fmask;
- for( i=0;i<gg.gl_pathc;i++ )
+ for( i=0;(unsigned)i<gg.gl_pathc;i++ )
{
stat( gg.gl_pathv[i],&fs );
if( S_ISDIR( fs.st_mode ) ) continue;
@@ -189,26 +195,14 @@ void CheckDir( GtkWidget * list,char * directory )
gtk_widget_show( list );
}
-static int FirstInit = 1;
-
void ShowFileSelect( int type,int modal )
{
int i;
+ char * tmp = NULL;
if ( gtkVFileSelect ) gtkActive( fsFileSelect );
else fsFileSelect=create_FileSelect();
- if ( FirstInit )
- {
- fsTopList_items=g_list_append( fsTopList_items,(gchar *)get_current_dir_name() );
- if ( getenv( "HOME" ) ) fsTopList_items=g_list_append( fsTopList_items,getenv( "HOME" ) );
- fsTopList_items=g_list_append( fsTopList_items,"/home" );
- fsTopList_items=g_list_append( fsTopList_items,"/mnt" );
- fsTopList_items=g_list_append( fsTopList_items,"/" );
- FirstInit=0;
- }
- gtk_combo_set_popdown_strings( GTK_COMBO( fsCombo4 ),fsTopList_items );
-
fsType=type;
switch ( type )
{
@@ -220,6 +214,7 @@ void ShowFileSelect( int type,int modal )
gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );
g_list_free( fsList_items );
gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsVideoFilterNames[fsNumberOfVideoFilterNames - 1][0] );
+ tmp=guiIntfStruct.Filename;
break;
case fsSubtitleSelector:
gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_SubtitleSelect );
@@ -229,6 +224,7 @@ void ShowFileSelect( int type,int modal )
gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );
g_list_free( fsList_items );
gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsSubtitleFilterNames[fsNumberOfSubtitleFilterNames - 1][0] );
+ tmp=guiIntfStruct.Subtitlename;
break;
case fsOtherSelector:
gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_OtherSelect );
@@ -238,6 +234,7 @@ void ShowFileSelect( int type,int modal )
gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );
g_list_free( fsList_items );
gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsOtherFilterNames[fsNumberOfOtherFilterNames][0] );
+ tmp=guiIntfStruct.Othername;
break;
case fsAudioSelector:
gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_AudioFileSelect );
@@ -247,9 +244,46 @@ void ShowFileSelect( int type,int modal )
gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );
g_list_free( fsList_items );
gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsAudioFileNames[fsNumberOfAudioFilterNames - 1][0] );
+ tmp=guiIntfStruct.AudioFile;
+ break;
+ case fsFontSelector:
+ gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FontSelect );
+ fsList_items=NULL;
+ for( i=0;i<fsNumberOfFontFilterNames + 1;i++ )
+ fsList_items=g_list_append( fsList_items,fsFontFileNames[i][0] );
+ gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items );
+ g_list_free( fsList_items );
+ gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsFontFileNames[fsNumberOfFontFilterNames - 1][0] );
+ tmp=guiIntfStruct.Fontname;
break;
}
+
+ if ( tmp && tmp[0] )
+ {
+ struct stat f;
+ char * dir = strdup( tmp );
+
+ do
+ {
+ char * c = strrchr( dir,'/' );
+ stat( dir,&f );
+ if ( S_ISDIR( f.st_mode ) ) break;
+ if ( c ) *c=0;
+ } while ( strrchr( dir,'/' ) );
+
+ if ( dir[0] ) chdir( dir );
+
+ free( dir );
+ }
+ if ( fsTopList_items ) g_list_free( fsTopList_items ); fsTopList_items=NULL;
+ fsTopList_items=g_list_append( fsTopList_items,(gchar *)get_current_dir_name() );
+ if ( getenv( "HOME" ) ) fsTopList_items=g_list_append( fsTopList_items,getenv( "HOME" ) );
+ fsTopList_items=g_list_append( fsTopList_items,"/home" );
+ fsTopList_items=g_list_append( fsTopList_items,"/mnt" );
+ fsTopList_items=g_list_append( fsTopList_items,"/" );
+ gtk_combo_set_popdown_strings( GTK_COMBO( fsCombo4 ),fsTopList_items );
+
gtk_window_set_modal( GTK_WINDOW( fsFileSelect ),modal );
gtk_widget_show( fsFileSelect ); gtkVisible++;
@@ -301,6 +335,11 @@ void fs_fsFilterCombo_changed( GtkEditable * editable,gpointer user_data )
if( !strcmp( str,fsAudioFileNames[i][0] ) )
{ strcpy( fsFilter,fsAudioFileNames[i][1] ); break; }
break;
+ case fsFontSelector:
+ for( i=0;i<fsNumberOfFontFilterNames+1;i++ )
+ if( !strcmp( str,fsFontFileNames[i][0] ) )
+ { strcpy( fsFilter,fsFontFileNames[i][1] ); break; }
+ break;
default: return;
}
CheckDir( fsFNameList,get_current_dir_name() );
@@ -385,8 +424,8 @@ void fs_Ok_released( GtkButton * button,gpointer user_data )
guiSetDF( guiIntfStruct.Filename,fsSelectedDirectory,fsSelectedFile );
guiIntfStruct.StreamType=STREAMTYPE_FILE;
guiIntfStruct.FilenameChanged=1;
- if ( guiIntfStruct.AudioFile ) free( guiIntfStruct.AudioFile );
- guiIntfStruct.AudioFile=NULL;
+ gfree( &guiIntfStruct.AudioFile );
+ gfree( &guiIntfStruct.Subtitlename );
break;
case fsSubtitleSelector:
guiSetDF( guiIntfStruct.Subtitlename,fsSelectedDirectory,fsSelectedFile );
@@ -398,6 +437,13 @@ void fs_Ok_released( GtkButton * button,gpointer user_data )
case fsAudioSelector:
guiSetDF( guiIntfStruct.AudioFile,fsSelectedDirectory,fsSelectedFile );
break;
+ case fsFontSelector:
+ guiSetDF( guiIntfStruct.Fontname,fsSelectedDirectory,fsSelectedFile );
+#if defined( USE_OSD ) || defined( USE_SUB )
+ guiLoadFont();
+#endif
+ if ( gtkVPreferences ) gtk_entry_set_text( GTK_ENTRY( prEFontName ),guiIntfStruct.Fontname );
+ break;
}
HideFileSelect();
@@ -674,7 +720,7 @@ GtkWidget * create_FileSelect( void )
gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"destroy",GTK_SIGNAL_FUNC( fs_fsFileSelect_destroy ),NULL );
gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"key_release_event",GTK_SIGNAL_FUNC( on_FileSelect_key_release_event ),NULL );
- gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"show",GTK_SIGNAL_FUNC( fs_FileSelect_show ),1 );
+ gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"show",GTK_SIGNAL_FUNC( fs_FileSelect_show ),(void *)1 );
gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"hide",GTK_SIGNAL_FUNC( fs_FileSelect_show ),0 );
gtk_signal_connect( GTK_OBJECT( fsFilterCombo ),"changed",GTK_SIGNAL_FUNC( fs_fsFilterCombo_changed ),fsFilterCombo );