Mercurial > mplayer.hg
annotate gui/dialog/fileselect.c @ 35833:dbfedb331095
Keep GUI history untouched upon file select "Cancel".
Currently, when "Cancel" is selected in the file select menu, the
GUI history can be modified nevertheless. Presuming that "Cancel"
shall discard changes, the history should be kept unchanged, too.
Patch by Hans-Dieter Kosch, hdkosch kabelbw de.
author | ib |
---|---|
date | Thu, 28 Feb 2013 11:19:59 +0000 |
parents | 6e4f1f9faca0 |
children | 25af0fce844f |
rev | line source |
---|---|
33572 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
18 | |
19 #include <stdlib.h> | |
20 #include <stdio.h> | |
21 #include <string.h> | |
22 #include <sys/stat.h> | |
23 #include <glob.h> | |
24 #include <unistd.h> | |
25 | |
26 #include "config.h" | |
35772 | 27 #include "gui/ui/actions.h" |
33572 | 28 |
35526 | 29 #include "pixmaps/up.xpm" |
30 #include "pixmaps/dir.xpm" | |
31 #include "pixmaps/file.xpm" | |
33572 | 32 |
35525 | 33 #include "gui/app/app.h" |
34 #include "gui/app/gui.h" | |
33572 | 35 #include "gui/interface.h" |
35350 | 36 #include "gui/util/list.h" |
33739 | 37 #include "gui/util/mem.h" |
33737 | 38 #include "gui/util/string.h" |
33572 | 39 #include "help_mp.h" |
40 #include "mpcommon.h" | |
41 #include "stream/stream.h" | |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
42 #include "libavutil/common.h" |
33572 | 43 |
35529 | 44 #include "dialog.h" |
33572 | 45 #include "fileselect.h" |
46 #include "preferences.h" | |
47 #include "tools.h" | |
48 | |
49 #ifndef __linux__ | |
50 #define get_current_dir_name() getcwd(NULL, PATH_MAX) | |
51 #else | |
52 char * get_current_dir_name( void ); | |
53 #endif | |
54 | |
55 gchar * fsSelectedFile = NULL; | |
56 gchar * fsSelectedFileUtf8 = NULL; | |
57 gchar * fsSelectedDirectory = NULL; | |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
58 gchar * fsSelectedDirectoryUtf8 = NULL; |
33572 | 59 unsigned char * fsThatDir = "."; |
60 const gchar * fsFilter = "*"; | |
61 | |
62 int fsType = 0; | |
63 | |
34364 | 64 static gint fsCurrFNameListSelected, fsLastFNameListSelected; |
65 | |
33572 | 66 char * fsVideoFilterNames[][2] = |
67 { | |
34857
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
68 { MSGTR_Filter_AVIFiles, "*.avi" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
69 { MSGTR_Filter_DivXFiles, "*.divx" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
70 { MSGTR_Filter_FlashVideo, "*.flv" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
71 { MSGTR_Filter_MP3Files, "*.mp3" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
72 { MSGTR_Filter_MP4Files, "*.aac,*.f4a,*.f4b,*.f4v,*.m4a,*.m4b,*.m4v,*.mp4" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
73 { MSGTR_Filter_MPEGFiles, "*.m1v,*.m2v,*.mp2,*.mpe,*.mpeg,*.mpg,*.mpga,*.vdr,*.vob" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
74 { MSGTR_Filter_MP2TS, "*.bdm,*.bdmv,*.clpi,*.cpi,*.m2t,*.m2ts,*.mpl,*.mpls,*.mts,*.rec,*.trp,*.ts,*.ty" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
75 { MSGTR_Filter_MatroskaMedia, "*.mka,*.mkv" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
76 { MSGTR_Filter_OGGMedia, "*.oga,*.ogg,*.ogm,*.ogv,*.ogx,*.spx" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
77 { MSGTR_Filter_QTMedia, "*.moov,*.mov,*.qt,*.qtvr" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
78 { MSGTR_Filter_RNMedia, "*.ra,*.rm,*.rmvb,*.rv" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
79 { MSGTR_Filter_VideoCDImages, "*.bin" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
80 { MSGTR_Filter_WAVFiles, "*.wav" }, |
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
81 { MSGTR_Filter_WindowsMedia, "*.asf,*.wma,*.wmv" }, |
34869
30fad98fad6e
Add Windows Media Station file (application/x-netshow-channel) support.
ib
parents:
34868
diff
changeset
|
82 { MSGTR_Filter_Playlists, "*.asx,*.m3u,*.m3u8,*.nsc,*.pls,*.ram,*.smi,*.smil,*.sml,*.vlc,*.wax,*.wmx,*.wvx" }, |
35142
1accad685563
Add TAK file extension to the audio file filter of the file selector.
ib
parents:
34892
diff
changeset
|
83 { MSGTR_Filter_AllAudioFiles, "*.aac,*.ac3,*.aif,*.aifc,*.aiff,*.amr,*.ape,*.au,*.awb,*.cdg,*.f4a,*.f4b,*.flac,*.m4a,*.m4b,*.mka,*.mp+,*.mp2,*.mp3,*.mpc,*.mpga,*.mpp,*.nsa,*.oga,*.ogg,*.pcm,*.qcp,*.ra,*.snd,*.spx,*.tak,*.voc,*.vqf,*.w64,*.wav,*.wma,*.wv,*.wvp" }, |
34892
b538985dfaac
Add some file extensions to the video file filter of the file selector.
ib
parents:
34871
diff
changeset
|
84 { MSGTR_Filter_AllVideoFiles, "*.264,*.3g2,*.3ga,*.3gp,*.3gp2,*.3gpp,*.3gpp2,*.asf,*.avi,*.bdm,*.bdmv,*.bin,*.clpi,*.cpi,*.cpk,*.divx,*.dv,*.f4v,*.flc,*.fli,*.flv,*.m1v,*.m2t,*.m2ts,*.m2v,*.m4v,*.mjpg,*.mkv,*.moov,*.mov,*.mp2,*.mp4,*.mpe,*.mpeg,*.mpg,*.mpl,*.mpls,*.mts,*.mxf,*.nsv,*.nuv,*.ogg,*.ogm,*.ogv,*.ogx,*.pva,*.qt,*.qtvr,*.rec,*.rm,*.rmvb,*.roq,*.rv,*.spl,*.str,*.swf,*.trp,*.ts,*.ty,*.vdr,*.viv,*.vivo,*.vob,*.webm,*.wmv,*.y4m" }, |
34857
cceef8552b0c
Enable translation of video and audio file filter items.
ib
parents:
34856
diff
changeset
|
85 { MSGTR_Filter_AllFiles, "*" }, |
33572 | 86 { NULL,NULL } |
87 }; | |
88 int fsLastVideoFilterSelected = -1; | |
89 | |
90 char * fsSubtitleFilterNames[][2] = | |
91 { | |
34849 | 92 { "AQTitle (*.aqt)", "*.aqt" }, |
93 { "Advanced SubStation Alpha (*.ass)", "*.ass" }, | |
94 { "JACOSub (*.jss) ", "*.jss" }, | |
95 { "RealText (*.rt) ", "*.rt" }, | |
96 { "SAMI (*.smi)", "*.smi" }, | |
97 { "SubRip (*.srt)", "*.srt" }, | |
98 { "SubStation Alpha (*.ssa)", "*.ssa" }, | |
99 { "MicroDVD (*.sub)", "*.sub" }, | |
100 { "Text (*.txt)", "*.txt" }, | |
34868
1a07230149a0
Revise UTF-8 encoded subtitle file filter for file selector.
ib
parents:
34867
diff
changeset
|
101 { MSGTR_Filter_UTF8Subtitles, "*.utf,*.utf-8,*.utf8" }, |
34850 | 102 { MSGTR_Filter_AllSubtitles, "*.aqt,*.ass,*.jss,*.rt,*.smi,*.srt,*.ssa,*.sub,*.txt,*.utf" }, |
103 { MSGTR_Filter_AllFiles, "*" }, | |
33572 | 104 { NULL,NULL } |
105 }; | |
106 int fsLastSubtitleFilterSelected = -1; | |
107 | |
108 char * fsOtherFilterNames[][2] = | |
109 { | |
34854 | 110 { MSGTR_Filter_AllFiles, "*" }, |
33572 | 111 { NULL,NULL } |
112 }; | |
113 | |
114 char * fsAudioFileNames[][2] = | |
115 { | |
34853
f6f1cfdaaccf
Enable translation of external audio file filter items.
ib
parents:
34852
diff
changeset
|
116 { MSGTR_Filter_DDRawAudio, "*.ac3,*.pcm" }, |
34856 | 117 { MSGTR_Filter_MPEGAudio, "*.aac,*.f4a,*.m4a,*.mp2,*.mp3,*.mpga" }, |
34853
f6f1cfdaaccf
Enable translation of external audio file filter items.
ib
parents:
34852
diff
changeset
|
118 { MSGTR_Filter_MatroskaAudio, "*.mka" }, |
f6f1cfdaaccf
Enable translation of external audio file filter items.
ib
parents:
34852
diff
changeset
|
119 { MSGTR_Filter_OGGAudio, "*.oga,*.ogg,*.spx" }, |
f6f1cfdaaccf
Enable translation of external audio file filter items.
ib
parents:
34852
diff
changeset
|
120 { MSGTR_Filter_WAVAudio, "*.wav" }, |
f6f1cfdaaccf
Enable translation of external audio file filter items.
ib
parents:
34852
diff
changeset
|
121 { MSGTR_Filter_WMAAudio, "*.wma" }, |
34856 | 122 { MSGTR_Filter_AllAudioFiles, "*.aac,*.ac3,*.f4a,*.m4a,*.mka,*.mp2,*.mp3,*.mpga,*.oga,*.ogg,*.pcm,*.spx,*.wav,*.wma" }, |
34853
f6f1cfdaaccf
Enable translation of external audio file filter items.
ib
parents:
34852
diff
changeset
|
123 { MSGTR_Filter_AllFiles, "*" }, |
33572 | 124 { NULL, NULL } |
125 }; | |
126 int fsLastAudioFilterSelected = -1; | |
127 | |
128 char * fsFontFileNames[][2] = | |
129 { | |
130 #ifdef CONFIG_FREETYPE | |
34851 | 131 { MSGTR_Filter_TTF, "*.ttf" }, |
132 { MSGTR_Filter_Type1, "*.pfb" }, | |
34856 | 133 { MSGTR_Filter_AllFonts, "*.pfb,*.ttf" }, |
33572 | 134 #else |
34851 | 135 { MSGTR_Filter_FontFiles, "*.desc" }, |
33572 | 136 #endif |
34851 | 137 { MSGTR_Filter_AllFiles, "*" }, |
33572 | 138 { NULL,NULL } |
139 }; | |
140 int fsLastFontFilterSelected = -1; | |
141 | |
142 GtkWidget * fsFileNamesList; | |
143 GtkWidget * fsFNameList; | |
144 GtkWidget * fsFileSelect = NULL; | |
145 GdkColormap * fsColorMap; | |
146 GtkWidget * fsOk; | |
147 GtkWidget * fsUp; | |
148 GtkWidget * fsCancel; | |
149 GtkWidget * fsCombo4; | |
150 GtkWidget * fsPathCombo; | |
151 GList * fsList_items = NULL; | |
152 GList * fsTopList_items = NULL; | |
153 GtkWidget * List; | |
154 GtkWidget * fsFilterCombo; | |
155 | |
156 GtkStyle * style; | |
157 GdkPixmap * dpixmap; | |
158 GdkPixmap * fpixmap; | |
159 GdkBitmap * dmask; | |
160 GdkBitmap * fmask; | |
161 | |
162 static char * get_current_dir_name_utf8( void ) | |
163 { | |
164 char * dir, * utf8dir; | |
165 dir = get_current_dir_name(); | |
166 utf8dir = g_filename_to_utf8( dir, -1, NULL, NULL, NULL ); | |
167 if ( !utf8dir ) utf8dir = g_strdup( dir ); | |
168 free( dir ); | |
169 return utf8dir; | |
170 } | |
171 | |
172 static void clist_append_fname(GtkWidget * list, char *fname, | |
173 GdkPixmap *pixmap, GdkPixmap *mask) { | |
174 gint pos; | |
35521 | 175 gchar *filename_utf8, *str[2]; |
176 filename_utf8 = g_filename_to_utf8(fname, -1, NULL, NULL, NULL); | |
33572 | 177 str[0] = NULL; |
35521 | 178 str[1] = filename_utf8 ? filename_utf8 : fname; |
33572 | 179 pos = gtk_clist_append(GTK_CLIST(list), str); |
180 gtk_clist_set_pixmap(GTK_CLIST(list), pos, 0, pixmap, mask); | |
35521 | 181 g_free(filename_utf8); |
33572 | 182 } |
183 | |
184 static void CheckDir( GtkWidget * list ) | |
185 { | |
186 struct stat fs; | |
34838 | 187 unsigned int i, j, fn; |
33572 | 188 glob_t gg; |
34836 | 189 gchar *filter, **fext; |
33572 | 190 |
191 if ( !fsFilter[0] ) return; | |
192 | |
193 gtk_widget_hide( list ); | |
194 gtk_clist_clear( GTK_CLIST( list ) ); | |
195 | |
196 clist_append_fname(list, ".", dpixmap, dmask); | |
197 clist_append_fname(list, "..", dpixmap, dmask); | |
198 | |
199 glob( "*",0,NULL,&gg ); | |
34838 | 200 for( i=0;i<gg.gl_pathc;i++ ) |
33572 | 201 { |
35399
4d7adee0a7ba
Check stat() return value before utilizing its information.
ib
parents:
35353
diff
changeset
|
202 if( ( stat( gg.gl_pathv[i],&fs ) != 0 ) || !S_ISDIR( fs.st_mode ) ) continue; |
33572 | 203 clist_append_fname(list, gg.gl_pathv[i], dpixmap, dmask); |
204 } | |
34836 | 205 |
206 for (fn = 1, i = 0; fsFilter[i]; i++) | |
207 if (fsFilter[i] == ',') fn++; | |
208 | |
209 filter = g_strdup(fsFilter); | |
210 fext = calloc(fn, sizeof(gchar *)); | |
33572 | 211 |
34836 | 212 if (filter && fext) |
213 { | |
214 for (j = 0, i = 0; filter[i]; i++) | |
215 { | |
216 if (filter[i] == '.') fext[j] = filter + i; | |
217 | |
218 if (filter[i] == ',') | |
219 { | |
220 filter[i] = 0; | |
221 j++; | |
222 } | |
223 } | |
33572 | 224 |
34838 | 225 for( i=0;i<gg.gl_pathc;i++ ) |
34837 | 226 { |
34836 | 227 char *ext; |
228 | |
35399
4d7adee0a7ba
Check stat() return value before utilizing its information.
ib
parents:
35353
diff
changeset
|
229 if( ( stat( gg.gl_pathv[i],&fs ) != 0 ) || S_ISDIR( fs.st_mode ) ) continue; |
34836 | 230 |
231 ext = strrchr(gg.gl_pathv[i], '.'); | |
232 | |
233 if (ext || !fext[0]) | |
234 { | |
235 for (j = 0; j < fn; j++) | |
236 { | |
237 if (fext[j] == NULL || strcasecmp(fext[j], ext) == 0) | |
238 { | |
34837 | 239 clist_append_fname(list, gg.gl_pathv[i], fpixmap, fmask); |
34836 | 240 break; |
241 } | |
242 } | |
243 } | |
34837 | 244 } |
34836 | 245 } |
246 | |
247 free(fext); | |
248 g_free(filter); | |
33572 | 249 globfree( &gg ); |
250 | |
251 gtk_clist_set_column_width( GTK_CLIST( list ),0,17 ); | |
252 gtk_widget_show( list ); | |
253 } | |
254 | |
255 void ShowFileSelect( int type,int modal ) | |
256 { | |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
257 int i, k, fsMedium; |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
258 char * tmp = NULL, * dir = NULL; |
34366
b8a4787f363b
Add /mnt only to the file selector path list if it exists.
ib
parents:
34364
diff
changeset
|
259 struct stat f; |
33572 | 260 |
261 if ( fsFileSelect ) gtkActive( fsFileSelect ); | |
262 else fsFileSelect=create_FileSelect(); | |
263 | |
264 fsType=type; | |
265 switch ( type ) | |
266 { | |
267 case fsVideoSelector: | |
268 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FileSelect ); | |
269 fsList_items=NULL; | |
270 for( i=0;fsVideoFilterNames[i][0];i++ ) | |
271 fsList_items=g_list_append( fsList_items,fsVideoFilterNames[i][0] ); | |
272 k = fsLastVideoFilterSelected; | |
273 gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items ); | |
274 g_list_free( fsList_items ); | |
275 gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsVideoFilterNames[k >= 0 ? k : i-2][0] ); | |
276 tmp=guiInfo.Filename; | |
277 break; | |
278 case fsSubtitleSelector: | |
279 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_SubtitleSelect ); | |
280 fsList_items=NULL; | |
281 for( i=0;fsSubtitleFilterNames[i][0];i++ ) | |
282 fsList_items=g_list_append( fsList_items,fsSubtitleFilterNames[i][0] ); | |
283 k = fsLastSubtitleFilterSelected; | |
284 gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items ); | |
285 g_list_free( fsList_items ); | |
286 gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsSubtitleFilterNames[k >= 0 ? k : i-2][0] ); | |
33897 | 287 tmp=guiInfo.SubtitleFilename; |
33572 | 288 break; |
33776 | 289 /* case fsOtherSelector: |
33572 | 290 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_OtherSelect ); |
291 fsList_items=NULL; | |
292 for( i=0;fsOtherFilterNames[i][0];i++ ) | |
293 fsList_items=g_list_append( fsList_items,fsOtherFilterNames[i][0] ); | |
294 gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items ); | |
295 g_list_free( fsList_items ); | |
296 gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsOtherFilterNames[0][0] ); | |
297 tmp=guiInfo.Othername; | |
33776 | 298 break;*/ |
33572 | 299 case fsAudioSelector: |
300 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_AudioFileSelect ); | |
301 fsList_items=NULL; | |
302 for( i=0;fsAudioFileNames[i][0];i++ ) | |
303 fsList_items=g_list_append( fsList_items,fsAudioFileNames[i][0] ); | |
304 k = fsLastAudioFilterSelected; | |
305 gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items ); | |
306 g_list_free( fsList_items ); | |
307 gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsAudioFileNames[k >= 0 ? k : i-2][0] ); | |
33897 | 308 tmp=guiInfo.AudioFilename; |
33572 | 309 break; |
310 case fsFontSelector: | |
311 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FontSelect ); | |
312 fsList_items=NULL; | |
313 for( i=0;fsFontFileNames[i][0];i++ ) | |
314 fsList_items=g_list_append( fsList_items,fsFontFileNames[i][0] ); | |
315 k = fsLastFontFilterSelected; | |
316 gtk_combo_set_popdown_strings( GTK_COMBO( List ),fsList_items ); | |
317 g_list_free( fsList_items ); | |
318 gtk_entry_set_text( GTK_ENTRY( fsFilterCombo ),fsFontFileNames[k >= 0 ? k : i-2][0] ); | |
319 tmp=font_name; | |
320 break; | |
321 } | |
322 | |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
323 fsMedium=(fsType == fsVideoSelector || fsType == fsSubtitleSelector || fsType == fsAudioSelector); |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
324 |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
325 if ( !tmp && fsMedium ) tmp=guiInfo.Filename; |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
326 |
35353 | 327 if ( tmp && tmp[0] && !strstr( tmp,"://" ) ) |
33572 | 328 { |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
329 dir = strdup( tmp ); |
33572 | 330 |
331 do | |
332 { | |
333 char * c = strrchr( dir,'/' ); | |
35832 | 334 if ( ( stat( dir,&f ) == 0 ) && S_ISDIR( f.st_mode ) ) break; |
33572 | 335 if ( c ) *c=0; |
336 } while ( strrchr( dir,'/' ) ); | |
337 | |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
338 if ( !dir[0] ) nfree( dir ); |
33572 | 339 } |
340 | |
341 if ( fsTopList_items ) g_list_free( fsTopList_items ); fsTopList_items=NULL; | |
342 { | |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
343 unsigned int i, c = 1; |
33572 | 344 |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
345 |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
346 if ( fsMedium ) |
33572 | 347 { |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
348 for ( i=0;i < FF_ARRAY_ELEMS(fsHistory);i++ ) |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
349 if ( fsHistory[i] ) { fsTopList_items=g_list_append( fsTopList_items,fsHistory[i] ); if ( c ) c=gstrcmp( dir,fsHistory[i] ); } |
33572 | 350 } |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
351 if ( c && dir ) |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
352 { |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
353 g_free( fsSelectedDirectoryUtf8 ); |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
354 fsSelectedDirectoryUtf8=g_filename_to_utf8( dir, -1, NULL, NULL, NULL ); |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
355 fsTopList_items=g_list_prepend( fsTopList_items,fsSelectedDirectoryUtf8 ); |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
356 } |
33572 | 357 } |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
358 free( dir ); |
33572 | 359 if ( getenv( "HOME" ) ) fsTopList_items=g_list_append( fsTopList_items,getenv( "HOME" ) ); |
34368
dbb38c5293b0
Add /home only to the file selector path list if HOME isn't set.
ib
parents:
34367
diff
changeset
|
360 else fsTopList_items=g_list_append( fsTopList_items,"/home" ); |
34367
b370a9fd85b3
Cosmetic: Swap /mnt and /media in the file selector path list.
ib
parents:
34366
diff
changeset
|
361 if (stat( "/media",&f ) == 0) fsTopList_items=g_list_append( fsTopList_items,"/media" ); |
34366
b8a4787f363b
Add /mnt only to the file selector path list if it exists.
ib
parents:
34364
diff
changeset
|
362 if (stat( "/mnt",&f ) == 0) fsTopList_items=g_list_append( fsTopList_items,"/mnt" ); |
33572 | 363 fsTopList_items=g_list_append( fsTopList_items,"/" ); |
364 gtk_combo_set_popdown_strings( GTK_COMBO( fsCombo4 ),fsTopList_items ); | |
365 | |
34346 | 366 gtk_widget_grab_focus( fsFNameList ); |
34518 | 367 if (fsLastFNameListSelected + 1 > ((GtkCList *)fsFNameList)->rows) fsLastFNameListSelected = 0; |
34364 | 368 ((GtkCList *)fsFNameList)->focus_row = fsLastFNameListSelected; |
369 gtk_clist_select_row( GTK_CLIST( fsFNameList ),fsLastFNameListSelected,1 ); | |
370 fsLastFNameListSelected = 0; | |
34346 | 371 |
33572 | 372 gtk_window_set_modal( GTK_WINDOW( fsFileSelect ),modal ); |
373 | |
374 gtk_widget_show( fsFileSelect ); | |
375 } | |
376 | |
377 void HideFileSelect( void ) | |
378 { | |
379 if ( !fsFileSelect ) return; | |
380 gtk_widget_hide( fsFileSelect ); | |
381 gtk_widget_destroy( fsFileSelect ); | |
382 fsFileSelect=NULL; | |
34364 | 383 fsLastFNameListSelected = fsCurrFNameListSelected; |
33572 | 384 } |
385 | |
386 static void fs_PersistantHistory( char * subject ) | |
387 { | |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
388 unsigned int i; |
33572 | 389 |
390 if ( fsType != fsVideoSelector ) return; | |
391 | |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
392 for ( i=0;i < FF_ARRAY_ELEMS(fsHistory);i++ ) |
33572 | 393 if ( fsHistory[i] && !strcmp( fsHistory[i],subject ) ) |
394 { | |
395 char * tmp = fsHistory[i]; fsHistory[i]=fsHistory[0]; fsHistory[0]=tmp; | |
396 return; | |
397 } | |
33751
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
398 nfree( fsHistory[FF_ARRAY_ELEMS(fsHistory) - 1] ); |
c28c967e40e9
Replace numeric constant fsPersistant_MaxPos for fsHistory array size.
ib
parents:
33740
diff
changeset
|
399 for ( i=FF_ARRAY_ELEMS(fsHistory) - 1;i;i-- ) fsHistory[i]=fsHistory[i - 1]; |
33572 | 400 fsHistory[0]=gstrdup( subject ); |
401 } | |
34684 | 402 /* ----------------------------------------------- */ |
33572 | 403 |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
404 static void fs_fsFilterCombo_activate( GtkEntry * entry, |
33572 | 405 gpointer user_data ) |
406 { | |
407 fsFilter=gtk_entry_get_text( GTK_ENTRY( user_data ) ); | |
408 CheckDir( fsFNameList ); | |
409 } | |
410 | |
411 static void fs_fsFilterCombo_changed( GtkEditable * editable, | |
412 gpointer user_data ) | |
413 { | |
414 const char * str; | |
415 int i; | |
416 | |
417 str=gtk_entry_get_text( GTK_ENTRY(user_data ) ); | |
418 | |
419 switch ( fsType ) | |
420 { | |
421 case fsVideoSelector: | |
422 for( i=0;fsVideoFilterNames[i][0];i++ ) | |
423 if( !strcmp( str,fsVideoFilterNames[i][0] ) ) | |
424 { fsFilter=fsVideoFilterNames[i][1]; fsLastVideoFilterSelected = i; break; } | |
425 break; | |
426 case fsSubtitleSelector: | |
427 for( i=0;fsSubtitleFilterNames[i][0];i++ ) | |
428 if( !strcmp( str,fsSubtitleFilterNames[i][0] ) ) | |
429 { fsFilter=fsSubtitleFilterNames[i][1]; fsLastSubtitleFilterSelected = i; break; } | |
430 break; | |
33776 | 431 /* case fsOtherSelector: |
33572 | 432 for( i=0;fsOtherFilterNames[i][0];i++ ) |
433 if( !strcmp( str,fsOtherFilterNames[i][0] ) ) | |
434 { fsFilter=fsOtherFilterNames[i][1]; break; } | |
33776 | 435 break;*/ |
33572 | 436 case fsAudioSelector: |
437 for( i=0;fsAudioFileNames[i][0];i++ ) | |
438 if( !strcmp( str,fsAudioFileNames[i][0] ) ) | |
439 { fsFilter=fsAudioFileNames[i][1]; fsLastAudioFilterSelected = i; break; } | |
440 break; | |
441 case fsFontSelector: | |
442 for( i=0;fsFontFileNames[i][0];i++ ) | |
443 if( !strcmp( str,fsFontFileNames[i][0] ) ) | |
444 { fsFilter=fsFontFileNames[i][1]; fsLastFontFilterSelected = i; break; } | |
445 break; | |
446 default: return; | |
447 } | |
448 CheckDir( fsFNameList ); | |
449 } | |
450 | |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
451 static void fs_fsPathCombo_activate( GtkEntry * entry, |
33572 | 452 gpointer user_data ) |
453 { | |
454 const unsigned char * str; | |
455 gchar * dirname; | |
456 | |
457 str=gtk_entry_get_text( GTK_ENTRY( user_data ) ); | |
458 dirname = g_filename_from_utf8( str, -1, NULL, NULL, NULL ); | |
459 if ( chdir( dirname ? (const unsigned char *)dirname : str ) != -1 ) CheckDir( fsFNameList ); | |
460 g_free( dirname ); | |
461 } | |
462 | |
463 static void fs_fsPathCombo_changed( GtkEditable * editable, | |
464 gpointer user_data ) | |
465 { | |
466 const unsigned char * str; | |
467 gchar * dirname; | |
468 | |
469 str=gtk_entry_get_text( GTK_ENTRY( user_data ) ); | |
470 dirname = g_filename_from_utf8( str, -1, NULL, NULL, NULL ); | |
471 if ( chdir( dirname ? (const unsigned char *)dirname : str ) != -1 ) CheckDir( fsFNameList ); | |
472 g_free( dirname ); | |
473 } | |
474 | |
475 static void fs_Up_released( GtkButton * button, gpointer user_data ) | |
476 { | |
477 chdir( ".." ); | |
478 fsSelectedFile=fsThatDir; | |
479 CheckDir( fsFNameList ); | |
480 gtk_entry_set_text( GTK_ENTRY( fsPathCombo ),(unsigned char *)get_current_dir_name_utf8() ); | |
481 return; | |
482 } | |
483 | |
484 static void fs_Ok_released( GtkButton * button, gpointer user_data ) | |
485 { | |
486 GList * item; | |
34859 | 487 int i = 1, l; |
33572 | 488 struct stat fs; |
35348 | 489 gchar * selected; |
33572 | 490 |
35399
4d7adee0a7ba
Check stat() return value before utilizing its information.
ib
parents:
35353
diff
changeset
|
491 if( ( stat( fsSelectedFile,&fs ) == 0 ) && S_ISDIR( fs.st_mode ) ) |
33572 | 492 { |
35401 | 493 if ( chdir( fsSelectedFile ) != 0 ) return; |
33572 | 494 fsSelectedFile=fsThatDir; |
495 CheckDir( fsFNameList ); | |
496 gtk_entry_set_text( GTK_ENTRY( fsPathCombo ),(unsigned char *)get_current_dir_name_utf8() ); | |
34364 | 497 gtk_widget_grab_focus( fsFNameList ); |
33572 | 498 return; |
499 } | |
500 | |
501 fsSelectedDirectory=(unsigned char *)get_current_dir_name(); | |
502 switch ( fsType ) | |
503 { | |
504 case fsVideoSelector: | |
34859 | 505 for (l = 0; fsVideoFilterNames[l][0]; l++) |
506 if (strcmp(fsVideoFilterNames[l][0], MSGTR_Filter_Playlists) == 0) break; | |
35452 | 507 uiSetFile( fsSelectedDirectory,fsSelectedFile, fsLastVideoFilterSelected == l ? STREAMTYPE_PLAYLIST : STREAMTYPE_FILE ); |
35348 | 508 selected = g_strconcat(fsSelectedDirectory, "/", fsSelectedFile, NULL); |
509 if (selected) | |
510 { | |
35352 | 511 listMgr(PLAYLIST_DELETE, 0); |
35350 | 512 add_to_gui_playlist(selected, PLAYLIST_ITEM_APPEND); |
35348 | 513 g_free(selected); |
514 } | |
33894 | 515 guiInfo.NewPlay=GUI_FILE_NEW; sub_fps=0; |
33572 | 516 fs_PersistantHistory( get_current_dir_name_utf8() ); //totem, write into history |
517 break; | |
518 case fsSubtitleSelector: | |
33897 | 519 setddup( &guiInfo.SubtitleFilename,fsSelectedDirectory,fsSelectedFile ); |
520 mplayerLoadSubtitle( guiInfo.SubtitleFilename ); | |
33572 | 521 break; |
33776 | 522 /* case fsOtherSelector: |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
523 setddup( &guiInfo.Othername,fsSelectedDirectory,fsSelectedFile ); |
33776 | 524 break;*/ |
33572 | 525 case fsAudioSelector: |
33897 | 526 setddup( &guiInfo.AudioFilename,fsSelectedDirectory,fsSelectedFile ); |
33572 | 527 break; |
528 case fsFontSelector: | |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
529 setddup( &font_name,fsSelectedDirectory,fsSelectedFile ); |
33763 | 530 mplayerLoadFont(); |
33572 | 531 if ( Preferences ) gtk_entry_set_text( GTK_ENTRY( prEFontName ),font_name ); |
532 break; | |
533 } | |
534 | |
535 HideFileSelect(); | |
536 | |
537 item=fsTopList_items; | |
538 while( item ) | |
539 { | |
540 if ( !strcmp( item->data,fsSelectedDirectory ) ) i=0; | |
541 item=item->next; | |
542 } | |
543 if ( i ) fsTopList_items=g_list_prepend( fsTopList_items,(gchar *)get_current_dir_name_utf8() ); | |
35773 | 544 if ( uiLoadPlay ) { uiLoadPlay=False; uiEvent( evPlay,0 ); } |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
545 else gui( GUI_SET_STATE,(void *) GUI_STOP ); |
33572 | 546 } |
547 | |
548 static void fs_Cancel_released( GtkButton * button,gpointer user_data ) | |
549 { | |
550 HideFileSelect(); | |
551 } | |
552 | |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
553 static void fs_fsFNameList_select_row( GtkCList * clist, gint row, gint column, |
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
554 GdkEvent * event, gpointer user_data) |
33572 | 555 { |
34364 | 556 fsCurrFNameListSelected = row; |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
557 gtk_clist_get_text( clist,row,1,&fsSelectedFile ); |
33572 | 558 g_free( fsSelectedFileUtf8 ); |
559 fsSelectedFileUtf8 = g_filename_from_utf8( fsSelectedFile, -1, NULL, NULL, NULL ); | |
560 if ( fsSelectedFileUtf8 ) fsSelectedFile = fsSelectedFileUtf8; | |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
561 if( event && event->type == GDK_BUTTON_PRESS ) gtk_button_released( GTK_BUTTON( fsOk ) ); |
33572 | 562 } |
563 | |
564 static gboolean on_FileSelect_key_release_event( GtkWidget * widget, | |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
565 GdkEvent * event, |
33572 | 566 gpointer user_data ) |
567 { | |
34344 | 568 if ( GTK_WIDGET_TYPE( widget ) == GTK_TYPE_BUTTON ) |
569 { | |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
570 if (event->key.keyval == GDK_Return) gtk_button_released( GTK_BUTTON( widget ) ); |
34344 | 571 } |
572 else | |
573 { | |
34466
a650895d50a5
Use correct data types and common variable names in GTK callback functions.
ib
parents:
34368
diff
changeset
|
574 switch ( event->key.keyval ) |
34345 | 575 { |
576 case GDK_Escape: | |
577 gtk_button_released( GTK_BUTTON( fsCancel ) ); | |
578 break; | |
579 case GDK_Return: | |
580 gtk_button_released( GTK_BUTTON( fsOk ) ); | |
581 break; | |
582 case GDK_BackSpace: | |
583 gtk_button_released( GTK_BUTTON( fsUp ) ); | |
34351
52a18f850c28
Leave the focus in fsFNameList after key event in file selector.
ib
parents:
34346
diff
changeset
|
584 gtk_widget_grab_focus( fsFNameList ); |
34345 | 585 break; |
586 } | |
34344 | 587 } |
33572 | 588 return FALSE; |
589 } | |
590 | |
591 static gboolean fs_fsFNameList_event( GtkWidget * widget, | |
592 GdkEvent * event, | |
593 gpointer user_data ) | |
594 { | |
595 GdkEventButton *bevent; | |
596 gint row, col; | |
597 | |
598 bevent = (GdkEventButton *) event; | |
599 | |
600 if ( event->type == GDK_BUTTON_RELEASE && bevent->button == 2 ) | |
601 { | |
602 if ( gtk_clist_get_selection_info( GTK_CLIST( widget ), bevent->x, bevent->y, &row, &col ) ) | |
603 { | |
604 gtk_clist_get_text( GTK_CLIST( widget ), row, 1, &fsSelectedFile ); | |
605 g_free( fsSelectedFileUtf8 ); | |
606 fsSelectedFileUtf8 = g_filename_from_utf8( fsSelectedFile, -1, NULL, NULL, NULL ); | |
607 if ( fsSelectedFileUtf8 ) fsSelectedFile = fsSelectedFileUtf8; | |
608 gtk_button_released( GTK_BUTTON( fsOk ) ); | |
609 return TRUE; | |
610 } | |
611 } | |
612 | |
613 return FALSE; | |
614 } | |
615 | |
616 static void fs_Destroy( void ) | |
617 { | |
618 g_free( fsSelectedFileUtf8 ); | |
619 fsSelectedFileUtf8 = NULL; | |
33787
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
620 g_free( fsSelectedDirectoryUtf8 ); |
42feff0f8a7b
Start all file dialogs always in last active directory.
ib
parents:
33776
diff
changeset
|
621 fsSelectedDirectoryUtf8 = NULL; |
33572 | 622 WidgetDestroy( fsFileSelect, &fsFileSelect ); |
623 } | |
624 | |
625 GtkWidget * create_FileSelect( void ) | |
626 { | |
627 GtkWidget * vbox4; | |
628 GtkWidget * hbox4; | |
629 GtkWidget * vseparator1; | |
630 GtkWidget * hbox6; | |
631 GtkWidget * fsFNameListWindow; | |
632 GtkWidget * hbuttonbox3; | |
633 | |
634 GtkWidget * uppixmapwid; | |
635 GdkPixmap * uppixmap; | |
636 GdkBitmap * upmask; | |
637 GtkStyle * upstyle; | |
638 | |
639 | |
640 fsFileSelect=gtk_window_new( GTK_WINDOW_TOPLEVEL ); | |
641 gtk_widget_set_name( fsFileSelect,"fsFileSelect" ); | |
642 gtk_object_set_data( GTK_OBJECT( fsFileSelect ),"fsFileSelect",fsFileSelect ); | |
643 gtk_widget_set_usize( fsFileSelect,512,300 ); | |
644 GTK_WIDGET_SET_FLAGS( fsFileSelect,GTK_CAN_DEFAULT ); | |
645 gtk_widget_set_events( fsFileSelect,GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK ); | |
646 gtk_window_set_title( GTK_WINDOW( fsFileSelect ),MSGTR_FileSelect ); | |
647 gtk_window_set_position( GTK_WINDOW( fsFileSelect ),GTK_WIN_POS_CENTER ); | |
648 gtk_window_set_policy( GTK_WINDOW( fsFileSelect ),TRUE,TRUE,TRUE ); | |
649 gtk_window_set_wmclass( GTK_WINDOW( fsFileSelect ),"FileSelect","MPlayer" ); | |
650 fsColorMap=gdk_colormap_get_system(); | |
651 | |
652 gtk_widget_realize( fsFileSelect ); | |
653 gtkAddIcon( fsFileSelect ); | |
654 | |
655 style=gtk_widget_get_style( fsFileSelect ); | |
656 dpixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&dmask,&style->bg[GTK_STATE_NORMAL],(gchar **)dir_xpm ); | |
657 fpixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&fmask,&style->bg[GTK_STATE_NORMAL],(gchar **)file_xpm ); | |
658 | |
659 vbox4=AddVBox( AddDialogFrame( fsFileSelect ),0 ); | |
660 hbox4=AddHBox( vbox4,1 ); | |
661 | |
662 fsCombo4=gtk_combo_new(); | |
663 gtk_widget_set_name( fsCombo4,"fsCombo4" ); | |
664 gtk_widget_show( fsCombo4 ); | |
665 gtk_box_pack_start( GTK_BOX( hbox4 ),fsCombo4,TRUE,TRUE,0 ); | |
666 gtk_widget_set_usize( fsCombo4,-2,20 ); | |
667 | |
668 fsPathCombo=GTK_COMBO( fsCombo4 )->entry; | |
669 gtk_widget_set_name( fsPathCombo,"fsPathCombo" ); | |
670 gtk_widget_show( fsPathCombo ); | |
671 gtk_widget_set_usize( fsPathCombo,-2,20 ); | |
672 | |
673 vseparator1=gtk_vseparator_new(); | |
674 gtk_widget_set_name( vseparator1,"vseparator1" ); | |
675 gtk_widget_show( vseparator1 ); | |
676 gtk_box_pack_start( GTK_BOX( hbox4 ),vseparator1,FALSE,TRUE,0 ); | |
677 gtk_widget_set_usize( vseparator1,7,20 ); | |
678 | |
679 upstyle=gtk_widget_get_style( fsFileSelect ); | |
680 uppixmap=gdk_pixmap_colormap_create_from_xpm_d( fsFileSelect->window,fsColorMap,&upmask,&upstyle->bg[GTK_STATE_NORMAL],(gchar **)up_xpm ); | |
681 uppixmapwid=gtk_pixmap_new( uppixmap,upmask ); | |
682 gtk_widget_show( uppixmapwid ); | |
683 | |
684 fsUp=gtk_button_new(); | |
685 gtk_container_add( GTK_CONTAINER(fsUp ),uppixmapwid ); | |
686 gtk_widget_show( fsUp ); | |
687 gtk_box_pack_start( GTK_BOX( hbox4 ),fsUp,FALSE,FALSE,0 ); | |
688 gtk_widget_set_usize( fsUp,65,15 ); | |
689 | |
690 AddHSeparator( vbox4 ); | |
691 | |
692 hbox6=AddHBox( NULL,0 ); | |
693 gtk_box_pack_start( GTK_BOX( vbox4 ),hbox6,TRUE,TRUE,0 ); | |
694 | |
695 fsFNameListWindow=gtk_scrolled_window_new( NULL,NULL ); | |
696 gtk_widget_set_name( fsFNameListWindow,"fsFNameListWindow" ); | |
697 gtk_widget_show( fsFNameListWindow ); | |
698 gtk_box_pack_start( GTK_BOX( hbox6 ),fsFNameListWindow,TRUE,TRUE,0 ); | |
699 gtk_widget_set_usize( fsFNameListWindow,-2,145 ); | |
700 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( fsFNameListWindow ),GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC ); | |
701 | |
702 fsFNameList=gtk_clist_new( 2 ); | |
703 gtk_widget_set_name( fsFNameList,"fsFNameList" ); | |
704 gtk_container_add( GTK_CONTAINER( fsFNameListWindow ),fsFNameList ); | |
705 gtk_clist_set_column_width( GTK_CLIST( fsFNameList ),0,80 ); | |
706 gtk_clist_set_selection_mode( GTK_CLIST( fsFNameList ),GTK_SELECTION_BROWSE ); | |
707 gtk_clist_column_titles_hide( GTK_CLIST( fsFNameList ) ); | |
708 gtk_clist_set_shadow_type( GTK_CLIST( fsFNameList ),GTK_SHADOW_ETCHED_OUT ); | |
709 | |
710 AddHSeparator( vbox4 ); | |
711 | |
712 List=gtk_combo_new(); | |
713 gtk_widget_set_name( List,"List" ); | |
714 gtk_widget_ref( List ); | |
715 gtk_object_set_data_full( GTK_OBJECT( fsFileSelect ),"List",List,(GtkDestroyNotify)gtk_widget_unref ); | |
716 gtk_widget_show( List ); | |
717 gtk_box_pack_start( GTK_BOX( vbox4 ),List,FALSE,FALSE,0 ); | |
718 gtk_widget_set_usize( List,-2,20 ); | |
719 | |
720 fsFilterCombo=GTK_COMBO( List )->entry; | |
721 gtk_widget_set_name( fsFilterCombo,"fsFilterCombo" ); | |
722 gtk_widget_show( fsFilterCombo ); | |
723 gtk_entry_set_editable (GTK_ENTRY( fsFilterCombo ),FALSE ); | |
34871 | 724 gtk_widget_set_usize( fsFilterCombo,-2,20 ); |
33572 | 725 |
726 AddHSeparator( vbox4 ); | |
727 | |
728 hbuttonbox3=AddHButtonBox( vbox4 ); | |
729 gtk_button_box_set_layout( GTK_BUTTON_BOX( hbuttonbox3 ),GTK_BUTTONBOX_END ); | |
730 gtk_button_box_set_spacing( GTK_BUTTON_BOX( hbuttonbox3 ),10 ); | |
731 | |
732 fsOk=AddButton( MSGTR_Ok,hbuttonbox3 ); | |
733 fsCancel=AddButton( MSGTR_Cancel,hbuttonbox3 ); | |
734 | |
735 gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"destroy",GTK_SIGNAL_FUNC( fs_Destroy ), NULL ); | |
736 gtk_signal_connect( GTK_OBJECT( fsFileSelect ),"key_release_event",GTK_SIGNAL_FUNC( on_FileSelect_key_release_event ),NULL ); | |
737 | |
738 gtk_signal_connect( GTK_OBJECT( fsFilterCombo ),"changed",GTK_SIGNAL_FUNC( fs_fsFilterCombo_changed ),fsFilterCombo ); | |
739 gtk_signal_connect( GTK_OBJECT( fsFilterCombo ),"activate",GTK_SIGNAL_FUNC( fs_fsFilterCombo_activate ),fsFilterCombo ); | |
740 gtk_signal_connect( GTK_OBJECT( fsPathCombo ),"changed",GTK_SIGNAL_FUNC( fs_fsPathCombo_changed ),fsPathCombo ); | |
741 gtk_signal_connect( GTK_OBJECT( fsPathCombo ),"activate",GTK_SIGNAL_FUNC( fs_fsPathCombo_activate ),fsPathCombo ); | |
742 gtk_signal_connect( GTK_OBJECT( fsUp ),"released",GTK_SIGNAL_FUNC( fs_Up_released ),fsFNameList ); | |
34344 | 743 gtk_signal_connect( GTK_OBJECT( fsUp ),"key_release_event",GTK_SIGNAL_FUNC( on_FileSelect_key_release_event ),NULL ); |
33572 | 744 gtk_signal_connect( GTK_OBJECT( fsOk ),"released",GTK_SIGNAL_FUNC( fs_Ok_released ),fsCombo4 ); |
34344 | 745 gtk_signal_connect( GTK_OBJECT( fsOk ),"key_release_event",GTK_SIGNAL_FUNC( on_FileSelect_key_release_event ),NULL ); |
33572 | 746 gtk_signal_connect( GTK_OBJECT( fsCancel ),"released",GTK_SIGNAL_FUNC( fs_Cancel_released ),NULL ); |
34344 | 747 gtk_signal_connect( GTK_OBJECT( fsCancel ),"key_release_event",GTK_SIGNAL_FUNC( on_FileSelect_key_release_event ),NULL ); |
33572 | 748 gtk_signal_connect( GTK_OBJECT( fsFNameList ),"select_row",(GtkSignalFunc)fs_fsFNameList_select_row,NULL ); |
749 gtk_signal_connect( GTK_OBJECT( fsFNameList ),"event", (GtkSignalFunc)fs_fsFNameList_event,NULL ); | |
750 | |
751 return fsFileSelect; | |
752 } |