Mercurial > mplayer.hg
changeset 32708:29b63f338a9b
Enable non-UTF-8 encoded filenames
(with G_FILENAME_ENCODING set to a specific character set name, not @locale)
author | ib |
---|---|
date | Tue, 18 Jan 2011 11:30:46 +0000 |
parents | 697fd62b65f9 |
children | f1b29f413940 |
files | gui/mplayer/gtk/fs.c gui/mplayer/gtk/pl.c |
diffstat | 2 files changed, 61 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/gui/mplayer/gtk/fs.c Tue Jan 18 10:57:52 2011 +0000 +++ b/gui/mplayer/gtk/fs.c Tue Jan 18 11:30:46 2011 +0000 @@ -48,6 +48,7 @@ #endif gchar * fsSelectedFile = NULL; +gchar * fsSelectedFileUtf8 = NULL; gchar * fsSelectedDirectory = NULL; unsigned char * fsThatDir = "."; const gchar * fsFilter = "*"; @@ -155,6 +156,15 @@ GdkBitmap * dmask; GdkBitmap * fmask; +static char * get_current_dir_name_utf8( void ) +{ + char * dir, * utf8dir; + dir = get_current_dir_name(); + utf8dir = g_filename_to_utf8( dir, -1, NULL, NULL, NULL ); + free( dir ); + return utf8dir; +} + static char * Filter( const char * name ) { static char tmp[32]; @@ -171,11 +181,13 @@ static void clist_append_fname(GtkWidget * list, char *fname, GdkPixmap *pixmap, GdkPixmap *mask) { gint pos; - gchar *str[2]; + gchar *filename, *str[2]; + filename = g_filename_to_utf8(fname, -1, NULL, NULL, NULL); str[0] = NULL; - str[1] = fname; + str[1] = filename; pos = gtk_clist_append(GTK_CLIST(list), str); gtk_clist_set_pixmap(GTK_CLIST(list), pos, 0, pixmap, mask); + g_free(filename); } static void CheckDir( GtkWidget * list,char * directory ) @@ -414,18 +426,24 @@ gpointer user_data ) { const unsigned char * str; + gchar * dirname; str=gtk_entry_get_text( GTK_ENTRY( user_data ) ); - if ( chdir( str ) != -1 ) CheckDir( fsFNameList,get_current_dir_name() ); + dirname = g_filename_from_utf8( str, -1, NULL, NULL, NULL ); + if ( chdir( dirname ) != -1 ) CheckDir( fsFNameList,get_current_dir_name() ); + g_free( dirname ); } static void fs_fsPathCombo_changed( GtkEditable * editable, gpointer user_data ) { const unsigned char * str; + gchar * dirname; str=gtk_entry_get_text( GTK_ENTRY( user_data ) ); - if ( chdir( str ) != -1 ) CheckDir( fsFNameList,get_current_dir_name() ); + dirname = g_filename_from_utf8( str, -1, NULL, NULL, NULL ); + if ( chdir( dirname ) != -1 ) CheckDir( fsFNameList,get_current_dir_name() ); + g_free( dirname ); } static void fs_Up_released( GtkButton * button, gpointer user_data ) @@ -433,7 +451,7 @@ chdir( ".." ); fsSelectedFile=fsThatDir; CheckDir( fsFNameList,get_current_dir_name() ); - gtk_entry_set_text( GTK_ENTRY( fsPathCombo ),(unsigned char *)get_current_dir_name() ); + gtk_entry_set_text( GTK_ENTRY( fsPathCombo ),(unsigned char *)get_current_dir_name_utf8() ); return; } @@ -449,7 +467,7 @@ chdir( fsSelectedFile ); fsSelectedFile=fsThatDir; CheckDir( fsFNameList,get_current_dir_name() ); - gtk_entry_set_text( GTK_ENTRY( fsPathCombo ),(unsigned char *)get_current_dir_name() ); + gtk_entry_set_text( GTK_ENTRY( fsPathCombo ),(unsigned char *)get_current_dir_name_utf8() ); return; } @@ -462,7 +480,7 @@ guiIntfStruct.FilenameChanged=1; sub_fps=0; gfree( (void **)&guiIntfStruct.AudioFile ); gfree( (void **)&guiIntfStruct.Subtitlename ); - fs_PersistantHistory( fsSelectedDirectory ); //totem, write into history + fs_PersistantHistory( get_current_dir_name_utf8() ); //totem, write into history break; case fsSubtitleSelector: guiSetDF( guiIntfStruct.Subtitlename,fsSelectedDirectory,fsSelectedFile ); @@ -497,13 +515,16 @@ static void fs_Cancel_released( GtkButton * button,gpointer user_data ) { HideFileSelect(); - fs_PersistantHistory( get_current_dir_name() ); //totem, write into history file + fs_PersistantHistory( get_current_dir_name_utf8() ); //totem, write into history file } static void fs_fsFNameList_select_row( GtkWidget * widget, gint row, gint column, GdkEventButton *bevent, gpointer user_data) { gtk_clist_get_text( GTK_CLIST(widget ),row,1,&fsSelectedFile ); + g_free( fsSelectedFileUtf8 ); + fsSelectedFileUtf8 = g_filename_from_utf8( fsSelectedFile, -1, NULL, NULL, NULL ); + fsSelectedFile = fsSelectedFileUtf8; if( bevent && bevent->type == GDK_BUTTON_PRESS ) gtk_button_released( GTK_BUTTON( fsOk ) ); } @@ -526,6 +547,13 @@ return FALSE; } +static void fs_Destroy( void ) +{ + g_free( fsSelectedFileUtf8 ); + fsSelectedFileUtf8 = NULL; + WidgetDestroy( fsFileSelect, &fsFileSelect ); +} + GtkWidget * create_FileSelect( void ) { GtkWidget * vbox4; @@ -635,7 +663,7 @@ fsOk=AddButton( MSGTR_Ok,hbuttonbox3 ); fsCancel=AddButton( MSGTR_Cancel,hbuttonbox3 ); - gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"destroy",GTK_SIGNAL_FUNC( WidgetDestroy ),&fsFileSelect ); + gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"destroy",GTK_SIGNAL_FUNC( fs_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( fsFilterCombo ),"changed",GTK_SIGNAL_FUNC( fs_fsFilterCombo_changed ),fsFilterCombo );
--- a/gui/mplayer/gtk/pl.c Tue Jan 18 10:57:52 2011 +0000 +++ b/gui/mplayer/gtk/pl.c Tue Jan 18 11:30:46 2011 +0000 @@ -174,13 +174,18 @@ gtk_clist_clear( GTK_CLIST( CLSelected ) ); if ( plList ) { + gchar * name, * path; plItem * next = plList; while ( next || next->next ) { char * text[1][3]; text[0][2]=""; - text[0][0]=next->name; - text[0][1]=next->path; + name = g_filename_to_utf8( next->name, -1, NULL, NULL, NULL ); + path = g_filename_to_utf8( next->path, -1, NULL, NULL, NULL ); + text[0][0]=name; + text[0][1]=path; gtk_clist_append( GTK_CLIST( CLSelected ),text[0] ); + g_free( path ); + g_free( name ); NrOfSelected++; if ( next->next ) next=next->next; else break; } @@ -236,8 +241,8 @@ item=calloc( 1,sizeof( plItem ) ); gtk_clist_get_text( GTK_CLIST( CLSelected ),i,0,&text[0] ); gtk_clist_get_text( GTK_CLIST( CLSelected ),i,1,&text[1] ); - item->name=strdup( text[0] ); - item->path=strdup( text[1] ); + item->name=g_filename_from_utf8( text[0], -1, NULL, NULL, NULL ); + item->path=g_filename_from_utf8( text[1], -1, NULL, NULL, NULL ); gtkSet( gtkAddPlItem,0,(void*)item ); } if ( plCurrent ) @@ -279,6 +284,7 @@ { int i; char * itext[1][2]; + gchar * cpath; char * text[1][3]; text[0][2]=""; gtk_clist_freeze( GTK_CLIST( CLSelected ) ); for ( i=0;i<NrOfEntrys;i++ ) @@ -286,8 +292,10 @@ if ( CLFileSelected[i] ) { gtk_clist_get_text( GTK_CLIST( CLFiles ),i,0,(char **)&itext ); - text[0][0]=itext[0][0]; text[0][1]=current_path; + cpath=g_filename_to_utf8( current_path, -1, NULL, NULL, NULL ); + text[0][0]=itext[0][0]; text[0][1]=cpath; gtk_clist_append( GTK_CLIST( CLSelected ),text[0] ); + g_free( cpath ); NrOfSelected++; CLListSelected=realloc( CLListSelected,NrOfSelected * sizeof( int ) ); CLListSelected[NrOfSelected - 1]=0; @@ -328,7 +336,7 @@ { GtkCTreeNode * node; DirNodeType * DirNode; - gchar * text; + gchar * text, * name = NULL; gchar * dummy = "dummy"; int subdir = 1; DIR * dir = NULL; @@ -352,12 +360,14 @@ if ( !strcmp( current_path,"/" ) ) sprintf( path,"/%s",dirent->d_name ); else sprintf( path,"%s/%s",current_path,dirent->d_name ); text=dirent->d_name; + g_free( name ); + name=g_filename_to_utf8( text, -1, NULL, NULL, NULL ); if ( stat( path,&statbuf ) != -1 && S_ISDIR( statbuf.st_mode ) && dirent->d_name[0] != '.' ) { DirNode=malloc( sizeof( DirNodeType ) ); DirNode->scaned=0; DirNode->path=strdup( path ); subdir=check_for_subdir( path ); - node=gtk_ctree_insert_node( ctree,parent_node,NULL,&text,4,pxOpenedBook,msOpenedBook,pxClosedBook,msClosedBook,!subdir,FALSE ); + node=gtk_ctree_insert_node( ctree,parent_node,NULL,&name,4,pxOpenedBook,msOpenedBook,pxClosedBook,msClosedBook,!subdir,FALSE ); gtk_ctree_node_set_row_data_full( ctree,node,DirNode,NULL ); if ( subdir ) node=gtk_ctree_insert_node( ctree,node,NULL,&dummy,4,NULL,NULL,NULL,NULL,FALSE,FALSE ); } @@ -369,6 +379,8 @@ gtk_ctree_sort_node( ctree,parent_node ); gtk_clist_thaw( GTK_CLIST( ctree ) ); } + + g_free( name ); } static void scan_dir( char * path ) @@ -377,6 +389,7 @@ char * curr; struct dirent * dirent; struct stat statbuf; + gchar * name; char * text[1][2]; text[0][1]=""; gtk_clist_clear( GTK_CLIST( CLFiles ) ); @@ -388,8 +401,10 @@ curr=calloc( 1,strlen( path ) + strlen( dirent->d_name ) + 3 ); sprintf( curr,"%s/%s",path,dirent->d_name ); if ( stat( curr,&statbuf ) != -1 && ( S_ISREG( statbuf.st_mode ) || S_ISLNK( statbuf.st_mode ) ) ) { - text[0][0]=dirent->d_name; - gtk_clist_append( GTK_CLIST( CLFiles ),text[0] ); + name=g_filename_to_utf8( dirent->d_name, -1, NULL, NULL, NULL ); + text[0][0]=name; + gtk_clist_append( GTK_CLIST( CLFiles ), text[0] ); + g_free( name ); NrOfEntrys++; } free( curr );