Mercurial > mplayer.hg
annotate Gui/interface.c @ 12646:9a495bdc3a1e
string handling security fixes
patch by Nicholas Kain, Alexander Strasser <eclipse7@gmx.net>
reviewed by Pontscho, Alex, Rich
author | diego |
---|---|
date | Fri, 25 Jun 2004 16:49:53 +0000 |
parents | df423e2d71dc |
children | 0230544f52a1 |
rev | line source |
---|---|
8058 | 1 |
4845 | 2 #include <inttypes.h> |
3 #include <stdlib.h> | |
4 #include <stdio.h> | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
5 #include <string.h> |
8058 | 6 #include <sys/types.h> |
4798 | 7 |
8058 | 8 #include "wm/ws.h" |
9 #include "wm/wsxdnd.h" | |
4798 | 10 #include "interface.h" |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
11 #include "skin/skin.h" |
8058 | 12 |
6627 | 13 #include "mplayer/gtk/eq.h" |
8058 | 14 #include "mplayer/widgets.h" |
15 #include "mplayer/mplayer.h" | |
8423 | 16 #include "mplayer/play.h" |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
17 |
4798 | 18 #include "../mplayer.h" |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
19 #include "app.h" |
6794 | 20 #include "cfg.h" |
21 #include "../help_mp.h" | |
22 #include "../subreader.h" | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
23 #include "../libvo/x11_common.h" |
5789 | 24 #include "../libvo/video_out.h" |
6794 | 25 #include "../libvo/font_load.h" |
7169 | 26 #include "../libvo/sub.h" |
4858 | 27 #include "../input/input.h" |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
28 #include "../libao2/audio_out.h" |
6627 | 29 #include "../mixer.h" |
30 #include "../libao2/audio_plugin.h" | |
31 #include "../libao2/eq.h" | |
5789 | 32 |
6996 | 33 #ifdef USE_ICONV |
7128 | 34 #include <iconv.h> |
6996 | 35 #endif |
36 | |
5665 | 37 #include "../libmpdemux/stream.h" |
5789 | 38 #include "../libmpdemux/demuxer.h" |
7217 | 39 #include "../libmpdemux/stheader.h" |
40 #include "../libmpcodecs/dec_video.h" | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
41 |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
10272
diff
changeset
|
42 #include "../m_config.h" |
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
10272
diff
changeset
|
43 #include "../m_option.h" |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
44 |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
45 guiInterface_t guiIntfStruct; |
9314
f38fe55d0e05
this patch adds the option -guiwid to gmplayer. I think its a more clean
arpi
parents:
9306
diff
changeset
|
46 int guiWinID=-1; |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
47 |
6627 | 48 char * gstrcat( char ** dest,char * src ) |
49 { | |
50 char * tmp = NULL; | |
51 | |
52 if ( !src ) return NULL; | |
53 | |
54 if ( *dest ) | |
55 { | |
56 tmp=malloc( strlen( *dest ) + strlen( src ) + 1 ); | |
12646 | 57 |
58 if ( tmp ) /* TODO: advanced error handling */ | |
59 { | |
60 strcpy( tmp,*dest ); strcat( tmp,src ); free( *dest ); | |
61 } | |
62 } | |
6627 | 63 else |
64 { tmp=malloc( strlen( src ) + 1 ); strcpy( tmp,src ); } | |
65 *dest=tmp; | |
66 return tmp; | |
67 } | |
68 | |
6794 | 69 int gstrcmp( char * a,char * b ) |
70 { | |
71 if ( !a && !b ) return 0; | |
72 if ( !a || !b ) return -1; | |
73 return strcmp( a,b ); | |
74 } | |
75 | |
7019 | 76 int gstrncmp( char * a,char * b,int size ) |
77 { | |
78 if ( !a && !b ) return 0; | |
79 if ( !a || !b ) return -1; | |
80 return strncmp( a,b,size ); | |
81 } | |
82 | |
6794 | 83 char * gstrdup( char * str ) |
84 { | |
85 if ( !str ) return NULL; | |
86 return strdup( str ); | |
87 } | |
88 | |
8284 | 89 char * gstrchr( char * str,int c ) |
90 { | |
91 if ( !str ) return NULL; | |
92 return strchr( str,c ); | |
93 } | |
94 | |
6794 | 95 void gfree( void ** p ) |
96 { | |
97 if ( *p == NULL ) return; | |
98 free( *p ); *p=NULL; | |
99 } | |
100 | |
101 void gset( char ** str,char * what ) | |
102 { | |
7887
0e5544951425
A small patch to Gui/interface.c; the first fix is a plain bug, the second is
arpi
parents:
7707
diff
changeset
|
103 if ( *str ) { if ( !strstr( *str,what ) ) { gstrcat( str,"," ); gstrcat( str,what ); }} |
6794 | 104 else gstrcat( str,what ); |
105 } | |
106 | |
7582 | 107 void gaddlist( char *** list,char * entry ) |
108 { | |
109 int i; | |
110 | |
111 if ( (*list) ) | |
112 { | |
113 for ( i=0;(*list)[i];i++ ) free( (*list)[i] ); | |
114 free( (*list) ); | |
115 } | |
116 | |
117 (*list)=malloc( 8 ); | |
118 (*list)[0]=gstrdup( entry ); | |
119 (*list)[1]=NULL; | |
120 } | |
121 | |
6996 | 122 #ifdef USE_ICONV |
123 char * gconvert_uri_to_filename( char * str ) | |
124 { | |
125 iconv_t d; | |
126 char * out = strdup( str ); | |
127 char * tmp = NULL; | |
128 char * ize; | |
129 size_t inb,outb; | |
130 char * charset = "ISO8859-1"; | |
131 char * cs; | |
132 | |
133 if ( !strchr( str,'%' ) ) return str; | |
134 | |
135 { | |
136 char * t = calloc( 1,strlen( out ) ); | |
137 int i,c = 0; | |
138 for ( i=0;i < (int)strlen( out );i++ ) | |
139 if ( out[i] != '%' ) t[c++]=out[i]; | |
140 else | |
141 { | |
12068 | 142 char tmp[5] = "0xXX"; |
6996 | 143 // if ( out[++i] == '%' ) { t[c++]='%'; continue; }; |
144 tmp[2]=out[++i]; tmp[3]=out[++i]; | |
145 t[c++]=(char)strtol( tmp,(char **)NULL,0 ); | |
146 } | |
147 free( out ); | |
148 out=t; | |
149 } | |
150 | |
151 if ( (cs=getenv( "CHARSET" )) && *cs ) charset=cs; | |
152 | |
153 inb=outb=strlen( out ); | |
154 tmp=calloc( 1,outb + 1 ); | |
155 ize=tmp; | |
156 d=iconv_open( charset,"UTF-8" ); | |
157 if ( (iconv_t)(-1) == d ) return str; | |
158 iconv( d,&out,&inb,&tmp,&outb ); | |
159 iconv_close( d ); | |
160 free( out ); | |
161 return ize; | |
162 } | |
163 #endif | |
164 | |
6218 | 165 void guiInit( void ) |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
166 { |
8058 | 167 int i; |
168 | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
169 memset( &guiIntfStruct,0,sizeof( guiIntfStruct ) ); |
6898 | 170 guiIntfStruct.Balance=50.0f; |
171 guiIntfStruct.StreamType=-1; | |
172 | |
6627 | 173 memset( >kEquChannels,0,sizeof( gtkEquChannels ) ); |
8600
54eac4cf587c
Lots of functions and variables specific to OSS audio are used without
arpi
parents:
8484
diff
changeset
|
174 #ifdef USE_OSS_AUDIO |
7706 | 175 if ( !gtkAOOSSMixer ) gtkAOOSSMixer=strdup( PATH_DEV_MIXER ); |
176 if ( !gtkAOOSSDevice ) gtkAOOSSDevice=strdup( PATH_DEV_DSP ); | |
8600
54eac4cf587c
Lots of functions and variables specific to OSS audio are used without
arpi
parents:
8484
diff
changeset
|
177 #endif |
7707 | 178 #ifdef HAVE_DXR3 |
7706 | 179 if ( !gtkDXR3Device ) gtkDXR3Device=strdup( "/dev/em8300-0" ); |
7707 | 180 #endif |
8311 | 181 if ( stream_cache_size != -1 ) { gtkCacheOn=1; gtkCacheSize=stream_cache_size; } |
182 if ( autosync && autosync != gtkAutoSync ) { gtkAutoSyncOn=1; gtkAutoSync=autosync; } | |
6898 | 183 |
184 gtkInit(); | |
8043 | 185 // --- initialize X |
6912 | 186 wsXInit( (void *)mDisplay ); |
8058 | 187 // --- load skin |
8043 | 188 skinDirInHome=get_path("Skin"); |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
10193
diff
changeset
|
189 skinMPlayerDir=MPLAYER_DATADIR "/Skin"; |
8043 | 190 printf("SKIN dir 1: '%s'\n",skinDirInHome); |
191 printf("SKIN dir 2: '%s'\n",skinMPlayerDir); | |
192 if ( !skinName ) skinName=strdup( "default" ); | |
10607
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
193 i = skinRead( skinName ); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
194 if ((i == -1) && strcmp(skinName,"default")) |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
195 { |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
196 mp_msg( MSGT_GPLAYER,MSGL_INFO,"Selected skin ( %s ) not found, trying 'default'...\n", skinName); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
197 skinName=strdup( "default" ); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
198 i = skinRead( skinName ); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
199 } |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
200 switch (i) { |
8043 | 201 case -1: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinNotFound,skinName ); exit( 0 ); |
202 case -2: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinCfgReadError,skinName ); exit( 0 ); | |
203 } | |
8058 | 204 // --- initialize windows |
9088 | 205 if ( ( mplDrawBuffer = (unsigned char *)malloc( appMPlayer.main.Bitmap.ImageSize ) ) == NULL ) |
8058 | 206 { |
207 fprintf( stderr,MSGTR_NEMDB ); | |
208 exit( 0 ); | |
209 } | |
9306 | 210 |
9625 | 211 if ( gui_save_pos ) |
212 { | |
213 appMPlayer.main.x = gui_main_pos_x; | |
214 appMPlayer.main.y = gui_main_pos_y; | |
215 appMPlayer.sub.x = gui_sub_pos_x; | |
216 appMPlayer.sub.y = gui_sub_pos_y; | |
217 } | |
218 | |
9306 | 219 if (WinID>0) |
9625 | 220 { |
9306 | 221 appMPlayer.subWindow.Parent=WinID; |
222 appMPlayer.sub.x=0; | |
223 appMPlayer.sub.y=0; | |
9625 | 224 } |
225 if (guiWinID>=0) appMPlayer.mainWindow.Parent=guiWinID; | |
9202 | 226 |
8058 | 227 wsCreateWindow( &appMPlayer.subWindow, |
228 appMPlayer.sub.x,appMPlayer.sub.y,appMPlayer.sub.width,appMPlayer.sub.height, | |
9202 | 229 wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsShowFrame|wsHideWindow,"MPlayer - Video" ); |
8058 | 230 |
231 wsDestroyImage( &appMPlayer.subWindow ); | |
232 wsCreateImage( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Width,appMPlayer.sub.Bitmap.Height ); | |
233 wsXDNDMakeAwareness(&appMPlayer.subWindow); | |
234 | |
8973 | 235 mplMenuInit(); |
236 mplPBInit(); | |
237 | |
8058 | 238 vo_setwindow( appMPlayer.subWindow.WindowID, appMPlayer.subWindow.wGC ); |
239 | |
240 // i=wsHideFrame|wsMaxSize|wsHideWindow; | |
241 // if ( appMPlayer.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow; | |
242 i=wsShowFrame|wsMaxSize|wsHideWindow; | |
243 wsCreateWindow( &appMPlayer.mainWindow, | |
244 appMPlayer.main.x,appMPlayer.main.y,appMPlayer.main.width,appMPlayer.main.height, | |
8949 | 245 wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,i,"MPlayer" ); |
8058 | 246 |
247 wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image ); | |
248 wsXDNDMakeAwareness(&appMPlayer.mainWindow); | |
249 | |
250 #ifdef DEBUG | |
251 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] Depth on screen: %d\n",wsDepthOnScreen ); | |
252 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] parent: 0x%x\n",(int)appMPlayer.mainWindow.WindowID ); | |
253 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] sub: 0x%x\n",(int)appMPlayer.subWindow.WindowID ); | |
254 #endif | |
255 | |
256 appMPlayer.mainWindow.ReDraw=(void *)mplMainDraw; | |
257 appMPlayer.mainWindow.MouseHandler=mplMainMouseHandle; | |
258 appMPlayer.mainWindow.KeyHandler=mplMainKeyHandle; | |
259 appMPlayer.mainWindow.DandDHandler=mplDandDHandler; | |
260 | |
261 appMPlayer.subWindow.ReDraw=(void *)mplSubDraw; | |
262 appMPlayer.subWindow.MouseHandler=mplSubMouseHandle; | |
263 appMPlayer.subWindow.KeyHandler=mplMainKeyHandle; | |
264 appMPlayer.subWindow.DandDHandler=mplDandDHandler; | |
265 | |
8973 | 266 wsSetBackgroundRGB( &appMPlayer.subWindow,appMPlayer.sub.R,appMPlayer.sub.G,appMPlayer.sub.B ); |
8058 | 267 wsClearWindow( appMPlayer.subWindow ); |
268 if ( appMPlayer.sub.Bitmap.Image ) wsConvert( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Image,appMPlayer.sub.Bitmap.ImageSize ); | |
269 | |
270 btnModify( evSetVolume,guiIntfStruct.Volume ); | |
271 btnModify( evSetBalance,guiIntfStruct.Balance ); | |
272 btnModify( evSetMoviePosition,guiIntfStruct.Position ); | |
273 | |
274 wsSetIcon( wsDisplay,appMPlayer.mainWindow.WindowID,guiIcon,guiIconMask ); | |
275 wsSetIcon( wsDisplay,appMPlayer.subWindow.WindowID,guiIcon,guiIconMask ); | |
276 | |
277 guiIntfStruct.Playing=0; | |
278 | |
279 if ( !appMPlayer.mainDecoration ) wsWindowDecoration( &appMPlayer.mainWindow,0 ); | |
280 | |
281 wsVisibleWindow( &appMPlayer.mainWindow,wsShowWindow ); | |
9202 | 282 #if 0 |
8058 | 283 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); |
284 | |
285 { | |
286 XEvent xev; | |
287 do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID ); | |
288 appMPlayer.subWindow.Mapped=wsMapped; | |
289 } | |
290 | |
9088 | 291 if ( !fullscreen ) fullscreen=gtkLoadFullscreen; |
8058 | 292 if ( fullscreen ) |
293 { | |
294 mplFullScreen(); | |
295 btnModify( evFullScreen,btnPressed ); | |
296 } | |
9202 | 297 #else |
11874 | 298 if ( !fullscreen ) fullscreen=gtkLoadFullscreen; |
9202 | 299 if ( gtkShowVideoWindow ) |
300 { | |
301 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); | |
302 { | |
303 XEvent xev; | |
304 do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID ); | |
305 appMPlayer.subWindow.Mapped=wsMapped; | |
306 } | |
307 | |
308 if ( fullscreen ) | |
309 { | |
310 mplFullScreen(); | |
311 btnModify( evFullScreen,btnPressed ); | |
312 } | |
313 } | |
314 else | |
315 { | |
316 if ( fullscreen ) | |
317 { | |
318 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); | |
319 { | |
320 XEvent xev; | |
321 do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID ); | |
322 appMPlayer.subWindow.Mapped=wsMapped; | |
323 } | |
324 wsVisibleWindow( &appMPlayer.subWindow, wsShowWindow ); | |
325 | |
326 mplFullScreen(); | |
327 btnModify( evFullScreen,btnPressed ); | |
328 } | |
329 } | |
8058 | 330 #endif |
331 mplSubRender=1; | |
8043 | 332 // --- |
7538 | 333 |
8423 | 334 if ( filename ) mplSetFileName( NULL,filename,STREAMTYPE_FILE ); |
7009 | 335 if ( plCurrent && !filename ) mplSetFileName( plCurrent->path,plCurrent->name,STREAMTYPE_FILE ); |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
336 if ( subdata ) guiSetFilename( guiIntfStruct.Subtitlename, subdata->filename ); |
6797
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
337 #if defined( USE_OSD ) || defined( USE_SUB ) |
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
338 guiLoadFont(); |
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
339 #endif |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
340 } |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
341 |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
342 void guiDone( void ) |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
343 { |
8883 | 344 mplMainRender=0; |
8043 | 345 mp_msg( MSGT_GPLAYER,MSGL_V,"[gui] done.\n" ); |
9625 | 346 |
347 if ( gui_save_pos ) | |
348 { | |
349 gui_main_pos_x=appMPlayer.mainWindow.X; gui_main_pos_y=appMPlayer.mainWindow.Y; | |
350 gui_sub_pos_x=appMPlayer.subWindow.X; gui_sub_pos_y=appMPlayer.subWindow.Y; | |
351 } | |
352 | |
6794 | 353 cfg_write(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
354 wsXDone(); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
355 } |
4798 | 356 |
4858 | 357 int guiCMDArray[] = |
358 { | |
8883 | 359 evLoadPlay, |
4858 | 360 evLoadSubtitle, |
361 evAbout, | |
362 evPlay, | |
363 evStop, | |
364 evPlayList, | |
365 evPreferences, | |
366 evFullScreen, | |
367 evSkinBrowser | |
368 }; | |
369 | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
370 extern ao_functions_t * audio_out; |
6755 | 371 extern vo_functions_t * video_out; |
6794 | 372 extern int frame_dropping; |
373 extern int stream_dump_type; | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
374 extern int vcd_track; |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
375 extern m_obj_settings_t*vo_plugin_args; |
6794 | 376 |
377 #if defined( USE_OSD ) || defined( USE_SUB ) | |
378 void guiLoadFont( void ) | |
379 { | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
380 #ifdef HAVE_FREETYPE |
8635
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8615
diff
changeset
|
381 load_font_ft(vo_image_width, vo_image_height); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
382 #else |
6794 | 383 if ( vo_font ) |
384 { | |
385 int i; | |
386 if ( vo_font->name ) free( vo_font->name ); | |
387 if ( vo_font->fpath ) free( vo_font->fpath ); | |
388 for ( i=0;i<16;i++ ) | |
389 if ( vo_font->pic_a[i] ) | |
390 { | |
391 if ( vo_font->pic_a[i]->bmp ) free( vo_font->pic_a[i]->bmp ); | |
392 if ( vo_font->pic_a[i]->pal ) free( vo_font->pic_a[i]->pal ); | |
393 } | |
394 for ( i=0;i<16;i++ ) | |
395 if ( vo_font->pic_b[i] ) | |
396 { | |
397 if ( vo_font->pic_b[i]->bmp ) free( vo_font->pic_b[i]->bmp ); | |
398 if ( vo_font->pic_b[i]->pal ) free( vo_font->pic_b[i]->pal ); | |
399 } | |
400 free( vo_font ); vo_font=NULL; | |
401 } | |
7019 | 402 if ( font_name ) |
6794 | 403 { |
7019 | 404 vo_font=read_font_desc( font_name,font_factor,0 ); |
6794 | 405 if ( !vo_font ) mp_msg( MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name ); |
406 } | |
407 else | |
408 { | |
7019 | 409 font_name=gstrdup( get_path( "font/font.desc" ) ); |
410 vo_font=read_font_desc( font_name,font_factor,0 ); | |
6794 | 411 if ( !vo_font ) |
412 { | |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
10193
diff
changeset
|
413 gfree( (void **)&font_name ); font_name=gstrdup(MPLAYER_DATADIR "/font/font.desc" ); |
7019 | 414 vo_font=read_font_desc( font_name,font_factor,0 ); |
6794 | 415 } |
416 } | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
417 #endif |
6794 | 418 } |
419 #endif | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
420 |
7150 | 421 #ifdef USE_SUB |
7169 | 422 extern mp_osd_obj_t* vo_osd_list; |
423 | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
424 extern char **sub_name; |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
425 |
7150 | 426 void guiLoadSubtitle( char * name ) |
427 { | |
428 if ( guiIntfStruct.Playing == 0 ) | |
429 { | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
430 guiIntfStruct.SubtitleChanged=1; //what is this for? (mw) |
7150 | 431 return; |
432 } | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
433 if ( subdata ) |
7150 | 434 { |
7169 | 435 mp_msg( MSGT_GPLAYER,MSGL_INFO,"[gui] Delete subtitles.\n" ); |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
436 sub_free( subdata ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
437 subdata=NULL; |
7150 | 438 vo_sub=NULL; |
7169 | 439 if ( vo_osd_list ) |
440 { | |
441 int len; | |
442 mp_osd_obj_t * osd = vo_osd_list; | |
443 while ( osd ) | |
444 { | |
445 if ( osd->type == OSDTYPE_SUBTITLE ) break; | |
446 osd=osd->next; | |
447 } | |
448 if ( osd && osd->flags&OSDFLAG_VISIBLE ) | |
449 { | |
450 len=osd->stride * ( osd->bbox.y2 - osd->bbox.y1 ); | |
451 memset( osd->bitmap_buffer,0,len ); | |
452 memset( osd->alpha_buffer,0,len ); | |
453 } | |
454 } | |
7150 | 455 } |
7169 | 456 if ( name ) |
457 { | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
458 mp_msg( MSGT_GPLAYER,MSGL_INFO,"[gui] Load subtitle: %s\n",name ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
459 subdata=sub_read_file( gstrdup( name ), guiIntfStruct.FPS ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
460 if ( !subdata ) mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_CantLoadSub,name ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
461 sub_name = (malloc(2 * sizeof(char*))); //when mplayer will be restarted |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
462 sub_name[0] = strdup(name); //sub_name[0] will be read |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
463 sub_name[1] = NULL; |
7169 | 464 } |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
465 update_set_of_subtitles(); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
466 |
7150 | 467 } |
468 #endif | |
469 | |
7009 | 470 static void add_vop( char * str ) |
471 { | |
472 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[gui] add video filter: %s\n",str ); | |
473 if ( vo_plugin_args ) | |
474 { | |
475 int i = 0; | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
476 while ( vo_plugin_args[i].name ) if ( !gstrcmp( vo_plugin_args[i++].name,str ) ) { i=-1; break; } |
7009 | 477 if ( i != -1 ) |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
478 { vo_plugin_args=realloc( vo_plugin_args,( i + 2 ) * sizeof( m_obj_settings_t ) ); vo_plugin_args[i].name=strdup( str );vo_plugin_args[i].attribs = NULL; vo_plugin_args[i+1].name=NULL; } |
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
479 } else { vo_plugin_args=malloc( 2 * sizeof( m_obj_settings_t ) ); vo_plugin_args[0].name=strdup( str );vo_plugin_args[0].attribs = NULL; vo_plugin_args[1].name=NULL; } |
7009 | 480 } |
481 | |
482 static void remove_vop( char * str ) | |
483 { | |
484 int n = 0; | |
485 | |
486 if ( !vo_plugin_args ) return; | |
487 | |
488 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[gui] remove video filter: %s\n",str ); | |
489 | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
490 while ( vo_plugin_args[n++].name ); n--; |
7009 | 491 if ( n > -1 ) |
492 { | |
493 int i = 0,m = -1; | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
494 while ( vo_plugin_args[i].name ) if ( !gstrcmp( vo_plugin_args[i++].name,str ) ) { m=i - 1; break; } |
7009 | 495 i--; |
496 if ( m > -1 ) | |
497 { | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
498 if ( n == 1 ) { free( vo_plugin_args[0].name );free( vo_plugin_args[0].attribs ); free( vo_plugin_args ); vo_plugin_args=NULL; } |
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
499 else { free( vo_plugin_args[i].name );free( vo_plugin_args[i].attribs ); memcpy( &vo_plugin_args[i],&vo_plugin_args[i + 1],( n - i ) * sizeof( m_obj_settings_t ) ); } |
7009 | 500 } |
501 } | |
502 } | |
503 | |
504 int guiGetEvent( int type,char * arg ) | |
4798 | 505 { |
6280 | 506 stream_t * stream = (stream_t *) arg; |
5672
1f8b34f1e7c0
ifdef reading dvd args, without it non-dvd compilation fails.
eyck
parents:
5665
diff
changeset
|
507 #ifdef USE_DVDREAD |
5665 | 508 dvd_priv_t * dvdp = (dvd_priv_t *) arg; |
5672
1f8b34f1e7c0
ifdef reading dvd args, without it non-dvd compilation fails.
eyck
parents:
5665
diff
changeset
|
509 #endif |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
510 |
4798 | 511 switch ( type ) |
512 { | |
513 case guiXEvent: | |
8973 | 514 guiIntfStruct.event_struct=(void *)arg; |
4798 | 515 wsEvents( wsDisplay,(XEvent *)arg,NULL ); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
516 gtkEventHandling(); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
517 break; |
4798 | 518 case guiCEvent: |
4963 | 519 switch ( (int)arg ) |
520 { | |
9202 | 521 case guiSetPlay: |
522 guiIntfStruct.Playing=1; | |
11918
634a2b279b1a
'video window vanishes after pause' bugfix, based on Andr«± K«ähne's (andre.kuehne@gmx.net) bugreport
pontscho
parents:
11874
diff
changeset
|
523 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); |
9202 | 524 break; |
525 case guiSetStop: | |
526 guiIntfStruct.Playing=0; | |
12068 | 527 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); |
9202 | 528 break; |
8423 | 529 case guiSetPause: guiIntfStruct.Playing=2; break; |
4963 | 530 } |
8423 | 531 mplState(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
532 break; |
5665 | 533 case guiSetState: |
534 mplState(); | |
535 break; | |
536 case guiSetFileName: | |
537 if ( arg ) guiSetFilename( guiIntfStruct.Filename,arg ); | |
538 break; | |
5789 | 539 case guiSetAudioOnly: |
540 guiIntfStruct.AudioOnly=(int)arg; | |
7009 | 541 if ( (int)arg ) { guiIntfStruct.NoWindow=True; wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); } |
5789 | 542 else wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); |
543 break; | |
8312
ef8c992672f4
- audio track handling in menu (idea from R«ädiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
544 case guiSetDemuxer: |
ef8c992672f4
- audio track handling in menu (idea from R«ädiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
545 guiIntfStruct.demuxer=(void *)arg; |
ef8c992672f4
- audio track handling in menu (idea from R«ädiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
546 break; |
5789 | 547 case guiSetShVideo: |
548 { | |
5986 | 549 if ( !appMPlayer.subWindow.isFullScreen ) |
550 { | |
551 wsResizeWindow( &appMPlayer.subWindow,vo_dwidth,vo_dheight ); | |
552 wsMoveWindow( &appMPlayer.subWindow,True,appMPlayer.sub.x,appMPlayer.sub.y ); | |
553 } | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
554 guiIntfStruct.MovieWidth=vo_dwidth; |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5986
diff
changeset
|
555 guiIntfStruct.MovieHeight=vo_dheight; |
9314
f38fe55d0e05
this patch adds the option -guiwid to gmplayer. I think its a more clean
arpi
parents:
9306
diff
changeset
|
556 if (guiWinID>=0) |
9306 | 557 wsMoveWindow( &appMPlayer.mainWindow,0,0, vo_dheight); |
5789 | 558 } |
559 break; | |
5665 | 560 #ifdef USE_DVDREAD |
561 case guiSetDVD: | |
562 guiIntfStruct.DVD.titles=dvdp->vmg_file->tt_srpt->nr_of_srpts; | |
563 guiIntfStruct.DVD.chapters=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
564 guiIntfStruct.DVD.angles=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
565 guiIntfStruct.DVD.nr_of_audio_channels=dvdp->nr_of_channels; | |
566 memcpy( guiIntfStruct.DVD.audio_streams,dvdp->audio_streams,sizeof( dvdp->audio_streams ) ); | |
567 guiIntfStruct.DVD.nr_of_subtitles=dvdp->nr_of_subtitles; | |
568 memcpy( guiIntfStruct.DVD.subtitles,dvdp->subtitles,sizeof( dvdp->subtitles ) ); | |
569 guiIntfStruct.DVD.current_title=dvd_title + 1; | |
570 guiIntfStruct.DVD.current_chapter=dvd_chapter + 1; | |
571 guiIntfStruct.DVD.current_angle=dvd_angle + 1; | |
572 guiIntfStruct.Track=dvd_title + 1; | |
573 break; | |
574 #endif | |
6280 | 575 case guiSetStream: |
576 guiIntfStruct.StreamType=stream->type; | |
577 switch( stream->type ) | |
578 { | |
7150 | 579 #ifdef USE_DVDREAD |
6280 | 580 case STREAMTYPE_DVD: |
581 guiGetEvent( guiSetDVD,(char *)stream->priv ); | |
582 break; | |
7150 | 583 #endif |
6280 | 584 #ifdef HAVE_VCD |
585 case STREAMTYPE_VCD: | |
586 { | |
587 int i; | |
10696
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
588 |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
589 if (!stream->priv) |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
590 { |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
591 guiIntfStruct.VCDTracks=0; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
592 break; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
593 } |
6280 | 594 for ( i=1;i < 100;i++ ) |
10696
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
595 if ( vcd_seek_to_track( stream->priv,i ) < 0 ) break; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
596 vcd_seek_to_track( stream->priv,vcd_track ); |
6280 | 597 guiIntfStruct.VCDTracks=--i; |
598 break; | |
599 } | |
600 #endif | |
7150 | 601 default: break; |
6280 | 602 } |
603 break; | |
4858 | 604 case guiIEvent: |
605 printf( "cmd: %d\n",(int)arg ); | |
606 switch( (int)arg ) | |
607 { | |
608 case MP_CMD_QUIT: | |
609 mplEventHandling( evExit,0 ); | |
610 break; | |
611 case MP_CMD_VO_FULLSCREEN: | |
612 mplEventHandling( evFullScreen,0 ); | |
613 break; | |
614 default: | |
615 mplEventHandling( guiCMDArray[ (int)arg - MP_CMD_GUI_EVENTS - 1 ],0 ); | |
616 } | |
617 break; | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
618 case guiReDraw: |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
619 mplEventHandling( evRedraw,0 ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
620 break; |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
621 case guiSetVolume: |
6903 | 622 if ( audio_out ) |
623 { | |
624 float l,r; | |
625 mixer_getvolume( &l,&r ); | |
626 guiIntfStruct.Volume=(r>l?r:l); | |
627 if ( r != l ) guiIntfStruct.Balance=( ( r - l ) + 100 ) * 0.5f; | |
628 else guiIntfStruct.Balance=50.0f; | |
629 btnModify( evSetVolume,guiIntfStruct.Volume ); | |
630 btnModify( evSetBalance,guiIntfStruct.Balance ); | |
631 } | |
632 break; | |
7009 | 633 case guiSetFileFormat: |
634 guiIntfStruct.FileFormat=(int)arg; | |
635 break; | |
6903 | 636 case guiSetValues: |
6912 | 637 // -- video |
7217 | 638 guiIntfStruct.sh_video=arg; |
6912 | 639 if ( arg ) |
640 { | |
7217 | 641 sh_video_t * sh = (sh_video_t *)arg; |
7150 | 642 guiIntfStruct.FPS=sh->fps; |
6912 | 643 } |
7009 | 644 |
645 if ( guiIntfStruct.NoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); | |
8280
72700fefd3dc
no seeking if stream is STREAMTYPE_STREAM (net/stdin)
pontscho
parents:
8150
diff
changeset
|
646 |
8300 | 647 if ( guiIntfStruct.StreamType == STREAMTYPE_STREAM ) btnSet( evSetMoviePosition,btnDisabled ); |
648 else btnSet( evSetMoviePosition,btnReleased ); | |
8284 | 649 |
6794 | 650 // -- audio |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
651 if ( audio_out ) |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
652 { |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
653 float l,r; |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
654 mixer_getvolume( &l,&r ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
655 guiIntfStruct.Volume=(r>l?r:l); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
656 if ( r != l ) guiIntfStruct.Balance=( ( r - l ) + 100 ) * 0.5f; |
6627 | 657 else guiIntfStruct.Balance=50.0f; |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
658 btnModify( evSetVolume,guiIntfStruct.Volume ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
659 btnModify( evSetBalance,guiIntfStruct.Balance ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
660 } |
6627 | 661 |
662 if ( gtkEnableAudioEqualizer ) | |
663 { | |
664 equalizer_t eq; | |
665 int i,j; | |
666 for ( i=0;i<6;i++ ) | |
667 for ( j=0;j<10;j++ ) | |
668 { | |
669 eq.channel=i; eq.band=j; eq.gain=gtkEquChannels[i][j]; | |
670 gtkSet( gtkSetEqualizer,0,&eq ); | |
671 } | |
672 } | |
6794 | 673 // -- subtitle |
7009 | 674 #ifdef HAVE_DXR3 |
8043 | 675 if ( video_driver_list && !gstrcmp( video_driver_list[0],"dxr3" ) && guiIntfStruct.FileFormat != DEMUXER_TYPE_MPEG_PS |
676 #ifdef USE_LIBAVCODEC | |
677 && !gtkVopLAVC | |
678 #endif | |
679 #ifdef USE_LIBFAME | |
680 && !gtkVopFAME | |
681 #endif | |
682 ) | |
7009 | 683 { |
684 gtkMessageBox( GTK_MB_FATAL,MSGTR_NEEDLAVCFAME ); | |
685 guiIntfStruct.Playing=0; | |
686 return True; | |
687 } | |
688 #endif | |
6627 | 689 break; |
690 case guiSetDefaults: | |
9055 | 691 // if ( guiIntfStruct.Playing == 1 && guiIntfStruct.FilenameChanged ) |
692 if ( guiIntfStruct.FilenameChanged ) | |
8423 | 693 { |
694 audio_id=-1; | |
695 video_id=-1; | |
696 dvdsub_id=-1; | |
697 vobsub_id=-1; | |
698 stream_cache_size=-1; | |
699 autosync=0; | |
700 vcd_track=0; | |
701 dvd_title=0; | |
9055 | 702 force_fps=0; |
8423 | 703 } |
704 wsPostRedisplay( &appMPlayer.subWindow ); | |
705 break; | |
706 case guiSetParameters: | |
9055 | 707 guiGetEvent( guiSetDefaults,NULL ); |
8423 | 708 switch ( guiIntfStruct.StreamType ) |
709 { | |
710 case STREAMTYPE_PLAYLIST: | |
711 break; | |
712 #ifdef HAVE_VCD | |
713 case STREAMTYPE_VCD: | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
714 { |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
715 char tmp[512]; |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
716 sprintf( tmp,"vcd://%d",guiIntfStruct.Track + 1 ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
717 guiSetFilename( guiIntfStruct.Filename,tmp ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
718 } |
8423 | 719 break; |
720 #endif | |
721 #ifdef USE_DVDREAD | |
722 case STREAMTYPE_DVD: | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
723 { |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
724 char tmp[512]; |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
725 sprintf( tmp,"dvd://%d",guiIntfStruct.Title ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
726 guiSetFilename( guiIntfStruct.Filename,tmp ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
727 } |
8423 | 728 dvd_chapter=guiIntfStruct.Chapter; |
729 dvd_angle=guiIntfStruct.Angle; | |
730 break; | |
731 #endif | |
6794 | 732 } |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
733 //if ( guiIntfStruct.StreamType != STREAMTYPE_PLAYLIST ) // Does not make problems anymore! |
8423 | 734 { |
735 if ( guiIntfStruct.Filename ) filename=gstrdup( guiIntfStruct.Filename ); | |
736 else if ( filename ) guiSetFilename( guiIntfStruct.Filename,filename ); | |
737 } | |
7009 | 738 // --- video opts |
7019 | 739 |
7582 | 740 if ( !video_driver_list ) |
6794 | 741 { |
6797
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
742 int i = 0; |
6903 | 743 while ( video_out_drivers[i++] ) |
744 if ( video_out_drivers[i - 1]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) | |
745 { | |
8150 | 746 gaddlist( &video_driver_list,(char *)video_out_drivers[i - 1]->info->short_name ); |
6903 | 747 break; |
748 } | |
6794 | 749 } |
750 | |
7582 | 751 if ( !video_driver_list && !video_driver_list[0] ) { gtkMessageBox( GTK_MB_FATAL,MSGTR_IDFGCVD ); exit_player( "gui init" ); } |
7009 | 752 |
753 { | |
754 int i = 0; | |
755 guiIntfStruct.NoWindow=False; | |
756 while ( video_out_drivers[i++] ) | |
757 if ( video_out_drivers[i - 1]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) | |
6794 | 758 { |
8150 | 759 if ( ( video_driver_list && !gstrcmp( video_driver_list[0],(char *)video_out_drivers[i - 1]->info->short_name ) )&&( video_out_drivers[i - 1]->control( VOCTRL_GUI_NOWINDOW,NULL ) == VO_TRUE ) ) |
7009 | 760 { guiIntfStruct.NoWindow=True; break; } |
6794 | 761 } |
7009 | 762 } |
763 | |
764 #ifdef HAVE_DXR3 | |
8043 | 765 #ifdef USE_LIBAVCODEC |
7009 | 766 remove_vop( "lavc" ); |
8043 | 767 #endif |
768 #ifdef USE_LIBFAME | |
7009 | 769 remove_vop( "fame" ); |
8043 | 770 #endif |
7582 | 771 if ( video_driver_list && !gstrcmp( video_driver_list[0],"dxr3" ) ) |
7009 | 772 { |
773 if ( ( guiIntfStruct.StreamType != STREAMTYPE_DVD)&&( guiIntfStruct.StreamType != STREAMTYPE_VCD ) ) | |
774 { | |
8043 | 775 #ifdef USE_LIBAVCODEC |
7009 | 776 if ( gtkVopLAVC ) add_vop( "lavc" ); |
8043 | 777 #endif |
778 #ifdef USE_LIBFAME | |
7009 | 779 if ( gtkVopFAME ) add_vop( "fame" ); |
8043 | 780 #endif |
7009 | 781 } |
782 } | |
783 #endif | |
784 // --- | |
7019 | 785 if ( gtkVopPP ) add_vop( "pp" ); |
786 else remove_vop( "pp" ); | |
6794 | 787 |
788 // --- audio opts | |
7887
0e5544951425
A small patch to Gui/interface.c; the first fix is a plain bug, the second is
arpi
parents:
7707
diff
changeset
|
789 // if ( ao_plugin_cfg.plugin_list ) { free( ao_plugin_cfg.plugin_list ); ao_plugin_cfg.plugin_list=NULL; } |
6840 | 790 if ( gtkAONorm ) gset( &ao_plugin_cfg.plugin_list,"volnorm" ); |
6794 | 791 if ( gtkEnableAudioEqualizer ) gset( &ao_plugin_cfg.plugin_list,"eq" ); |
792 if ( gtkAOExtraStereo ) | |
793 { | |
794 gset( &ao_plugin_cfg.plugin_list,"extrastereo" ); | |
795 ao_plugin_cfg.pl_extrastereo_mul=gtkAOExtraStereoMul; | |
796 } | |
8600
54eac4cf587c
Lots of functions and variables specific to OSS audio are used without
arpi
parents:
8484
diff
changeset
|
797 #ifdef USE_OSS_AUDIO |
8484 | 798 mixer_device=gstrdup( gtkAOOSSMixer ); |
7582 | 799 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"oss",3 ) && gtkAOOSSDevice ) |
6794 | 800 { |
8423 | 801 char * tmp = calloc( 1,strlen( gtkAOOSSDevice ) + 7 ); |
7019 | 802 sprintf( tmp,"oss:%s",gtkAOOSSDevice ); |
7582 | 803 gaddlist( &audio_driver_list,tmp ); |
7019 | 804 } |
8615 | 805 #endif |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
806 #ifdef HAVE_SDL |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
807 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"sdl",3 ) && gtkAOSDLDriver ) |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
808 { |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
809 char * tmp = calloc( 1,strlen( gtkAOSDLDriver ) + 10 ); |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
810 sprintf( tmp,"sdl:%s",gtkAOSDLDriver ); |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
811 gaddlist( &audio_driver_list,tmp ); |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
812 } |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
813 #endif |
6794 | 814 // -- subtitle |
815 #ifdef USE_SUB | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
816 //subdata->filename=gstrdup( guiIntfStruct.Subtitlename ); |
6794 | 817 stream_dump_type=0; |
818 if ( gtkSubDumpMPSub ) stream_dump_type=4; | |
819 if ( gtkSubDumpSrt ) stream_dump_type=6; | |
820 gtkSubDumpMPSub=gtkSubDumpSrt=0; | |
6627 | 821 #endif |
6794 | 822 #if defined( USE_OSD ) || defined( USE_SUB ) |
823 guiLoadFont(); | |
6627 | 824 #endif |
825 | |
6794 | 826 // --- misc |
8423 | 827 if ( gtkCacheOn ) stream_cache_size=gtkCacheSize; |
8484 | 828 if ( gtkAutoSyncOn ) autosync=gtkAutoSync; |
8423 | 829 |
8484 | 830 if ( guiIntfStruct.AudioFile ) audio_stream=gstrdup( guiIntfStruct.AudioFile ); |
831 else if ( guiIntfStruct.FilenameChanged ) gfree( (void**)&audio_stream ); | |
832 //audio_stream=NULL; | |
6627 | 833 |
8423 | 834 guiIntfStruct.DiskChanged=0; |
835 guiIntfStruct.FilenameChanged=0; | |
836 guiIntfStruct.NewPlay=0; | |
837 | |
6627 | 838 break; |
4798 | 839 } |
7009 | 840 return False; |
4798 | 841 } |
842 | |
843 void guiEventHandling( void ) | |
844 { | |
7009 | 845 if ( !guiIntfStruct.Playing || guiIntfStruct.NoWindow ) wsHandleEvents(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
846 gtkEventHandling(); |
4798 | 847 } |
6627 | 848 |
849 // --- | |
850 | |
851 float gtkEquChannels[6][10]; | |
852 | |
6713 | 853 plItem * plCurrent = NULL; |
854 plItem * plList = NULL; | |
855 plItem * plLastPlayed = NULL; | |
856 | |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
857 URLItem *URLList = NULL; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
858 |
9055 | 859 char *fsHistory[fsPersistant_MaxPos] = { NULL,NULL,NULL,NULL,NULL }; |
860 | |
6713 | 861 #if defined( MP_DEBUG ) && 0 |
862 void list( void ) | |
6627 | 863 { |
6713 | 864 plItem * next = plList; |
865 printf( "--- list ---\n" ); | |
866 while( next || next->next ) | |
867 { | |
868 printf( "item: %s/%s\n",next->path,next->name ); | |
869 if ( next->next ) next=next->next; else break; | |
870 } | |
871 printf( "--- end of list ---\n" ); | |
872 } | |
873 #else | |
874 #define list(); | |
875 #endif | |
876 | |
877 void * gtkSet( int cmd,float fparam, void * vparam ) | |
878 { | |
6627 | 879 equalizer_t * eq = (equalizer_t *)vparam; |
6713 | 880 plItem * item = (plItem *)vparam; |
6627 | 881 |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
882 URLItem * url_item = (URLItem *)vparam; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
883 int is_added = True; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
884 |
6627 | 885 switch ( cmd ) |
886 { | |
6713 | 887 // --- handle playlist |
6755 | 888 case gtkAddPlItem: // add item to playlist |
6713 | 889 if ( plList ) |
890 { | |
891 plItem * next = plList; | |
892 while ( next->next ) { /*printf( "%s\n",next->name );*/ next=next->next; } | |
893 next->next=item; item->prev=next; | |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
894 } else { item->prev=item->next=NULL; plCurrent=plList=item; } |
6713 | 895 list(); |
896 return NULL; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
897 case gtkInsertPlItem: // add item into playlist after current |
6713 | 898 if ( plCurrent ) |
899 { | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
900 plItem * curr = plCurrent; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
901 item->next=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
902 if (item->next) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
903 item->next->prev=item; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
904 item->prev=curr; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
905 curr->next=item; |
6713 | 906 plCurrent=plCurrent->next; |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
907 return plCurrent; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
908 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
909 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
910 return gtkSet(gtkAddPlItem,0,(void*)item); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
911 return NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
912 case gtkGetNextPlItem: // get current item from playlist |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
913 if ( plCurrent && plCurrent->next) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
914 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
915 plCurrent=plCurrent->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
916 /*if ( !plCurrent && plList ) |
6713 | 917 { |
918 plItem * next = plList; | |
919 while ( next->next ) { if ( !next->next ) break; next=next->next; } | |
920 plCurrent=next; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
921 }*/ |
6713 | 922 return plCurrent; |
923 } | |
924 return NULL; | |
925 case gtkGetPrevPlItem: | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
926 if ( plCurrent && plCurrent->prev) |
6713 | 927 { |
928 plCurrent=plCurrent->prev; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
929 //if ( !plCurrent && plList ) plCurrent=plList; |
6713 | 930 return plCurrent; |
931 } | |
6794 | 932 return NULL; |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
933 case gtkSetCurrPlItem: // set current item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
934 plCurrent=item; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
935 return plCurrent; |
6713 | 936 case gtkGetCurrPlItem: // get current item |
937 return plCurrent; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
938 case gtkDelCurrPlItem: // delete current item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
939 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
940 plItem * curr = plCurrent; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
941 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
942 if (!curr) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
943 return NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
944 if (curr->prev) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
945 curr->prev->next=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
946 if (curr->next) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
947 curr->next->prev=curr->prev; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
948 if (curr==plList) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
949 plList=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
950 plCurrent=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
951 // Free it |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
952 if ( curr->path ) free( curr->path ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
953 if ( curr->name ) free( curr->name ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
954 free( curr ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
955 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
956 mplCurr(); // Instead of using mplNext && mplPrev |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
957 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
958 return plCurrent; |
6713 | 959 case gtkDelPl: // delete list |
960 { | |
961 plItem * curr = plList; | |
962 plItem * next; | |
963 if ( !plList ) return NULL; | |
964 if ( !curr->next ) | |
965 { | |
966 if ( curr->path ) free( curr->path ); | |
967 if ( curr->name ) free( curr->name ); | |
968 free( curr ); | |
969 } | |
970 else | |
971 { | |
972 while ( curr->next ) | |
973 { | |
974 next=curr->next; | |
975 if ( curr->path ) free( curr->path ); | |
976 if ( curr->name ) free( curr->name ); | |
977 free( curr ); | |
978 curr=next; | |
979 } | |
980 } | |
981 plList=NULL; plCurrent=NULL; | |
982 } | |
983 return NULL; | |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
984 // ----- Handle url |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
985 case gtkAddURLItem: |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
986 if ( URLList ) |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
987 { |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
988 URLItem * next_url = URLList; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
989 is_added = False; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
990 while ( next_url->next ) |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
991 { |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
992 if ( !gstrcmp( next_url->url,url_item->url ) ) |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
993 { |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
994 is_added=True; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
995 break; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
996 } |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
997 next_url=next_url->next; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
998 } |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
999 if ( ( !is_added )&&( gstrcmp( next_url->url,url_item->url ) ) ) next_url->next=url_item; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1000 } else { url_item->next=NULL; URLList=url_item; } |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1001 return NULL; |
6794 | 1002 // --- subtitle |
7139 | 1003 #ifndef HAVE_FREETYPE |
6794 | 1004 case gtkSetFontFactor: |
7019 | 1005 font_factor=fparam; |
6794 | 1006 guiLoadFont(); |
1007 return NULL; | |
7139 | 1008 #else |
1009 case gtkSetFontOutLine: | |
1010 subtitle_font_thickness=( 8.0f / 100.0f ) * fparam; | |
1011 guiLoadFont(); | |
1012 return NULL; | |
1013 case gtkSetFontBlur: | |
1014 subtitle_font_radius=( 8.0f / 100.0f ) * fparam; | |
1015 guiLoadFont(); | |
1016 return NULL; | |
1017 case gtkSetFontTextScale: | |
1018 text_font_scale_factor=fparam; | |
1019 guiLoadFont(); | |
1020 return NULL; | |
1021 case gtkSetFontOSDScale: | |
1022 osd_font_scale_factor=fparam; | |
1023 guiLoadFont(); | |
1024 return NULL; | |
1025 case gtkSetFontEncoding: | |
9056 | 1026 gfree( (void **)&subtitle_font_encoding ); |
7139 | 1027 subtitle_font_encoding=gstrdup( (char *)vparam ); |
1028 guiLoadFont(); | |
1029 return NULL; | |
1030 case gtkSetFontAutoScale: | |
1031 subtitle_autoscale=(int)fparam; | |
1032 guiLoadFont(); | |
1033 return NULL; | |
1034 #endif | |
9056 | 1035 #ifdef USE_ICONV |
1036 case gtkSetSubEncoding: | |
1037 gfree( (void **)&sub_cp ); | |
1038 sub_cp=gstrdup( (char *)vparam ); | |
1039 break; | |
6794 | 1040 #endif |
1041 // --- misc | |
1042 case gtkClearStruct: | |
7009 | 1043 if ( (unsigned int)vparam & guiFilenames ) |
6794 | 1044 { |
1045 gfree( (void **)&guiIntfStruct.Filename ); | |
1046 gfree( (void **)&guiIntfStruct.Subtitlename ); | |
1047 gfree( (void **)&guiIntfStruct.AudioFile ); | |
7009 | 1048 gtkSet( gtkDelPl,0,NULL ); |
6794 | 1049 } |
1050 #ifdef USE_DVDREAD | |
7009 | 1051 if ( (unsigned int)vparam & guiDVD ) memset( &guiIntfStruct.DVD,0,sizeof( guiDVDStruct ) ); |
6794 | 1052 #endif |
1053 #ifdef HAVE_VCD | |
7009 | 1054 if ( (unsigned int)vparam & guiVCD ) guiIntfStruct.VCDTracks=0; |
6794 | 1055 #endif |
1056 return NULL; | |
1057 case gtkSetExtraStereo: | |
1058 gtkAOExtraStereoMul=fparam; | |
11412 | 1059 audio_plugin_extrastereo.control( AOCONTROL_PLUGIN_ES_SET,(void *)>kAOExtraStereoMul ); |
6794 | 1060 return NULL; |
1061 case gtkSetPanscan: | |
7217 | 1062 { |
1063 mp_cmd_t * mp_cmd; | |
1064 mp_cmd=(mp_cmd_t *)calloc( 1,sizeof( *mp_cmd ) ); | |
1065 mp_cmd->id=MP_CMD_PANSCAN; mp_cmd->name=strdup( "panscan" ); | |
1066 mp_cmd->args[0].v.f=fparam; mp_cmd->args[1].v.i=1; | |
1067 mp_input_queue_cmd( mp_cmd ); | |
1068 } | |
6794 | 1069 return NULL; |
1070 case gtkSetAutoq: | |
7019 | 1071 auto_quality=(int)fparam; |
6794 | 1072 return NULL; |
6713 | 1073 // --- set equalizers |
6627 | 1074 case gtkSetContrast: |
7217 | 1075 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"contrast",(int)fparam ); |
1076 return NULL; | |
6627 | 1077 case gtkSetBrightness: |
7217 | 1078 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"brightness",(int)fparam ); |
1079 return NULL; | |
6627 | 1080 case gtkSetHue: |
7217 | 1081 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"hue",(int)fparam ); |
1082 return NULL; | |
6627 | 1083 case gtkSetSaturation: |
7217 | 1084 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"saturation",(int)fparam ); |
1085 return NULL; | |
6627 | 1086 case gtkSetEqualizer: |
1087 if ( eq ) | |
1088 { | |
1089 gtkEquChannels[eq->channel][eq->band]=eq->gain; | |
11412 | 1090 audio_plugin_eq.control( AOCONTROL_PLUGIN_EQ_SET_GAIN,(void *)eq ); |
6627 | 1091 } |
1092 else | |
1093 { | |
1094 int i,j; equalizer_t tmp; tmp.gain=0.0f; | |
1095 memset( gtkEquChannels,0,sizeof( gtkEquChannels ) ); | |
1096 for ( i=0;i<6;i++ ) | |
1097 for ( j=0;j<10;j++ ) | |
11412 | 1098 { tmp.channel=i; tmp.band=j; audio_plugin_eq.control( AOCONTROL_PLUGIN_EQ_SET_GAIN,(void *)&tmp ); } |
6627 | 1099 } |
6713 | 1100 return NULL; |
6627 | 1101 } |
6713 | 1102 return NULL; |
6627 | 1103 } |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1104 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1105 #define mp_basename(s) (strrchr(s,'/')==NULL?(char*)s:(strrchr(s,'/')+1)) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1106 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1107 #include "../playtree.h" |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1108 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1109 //This function adds/inserts one file into the gui playlist |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1110 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1111 int import_file_into_gui(char* temp, int insert) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1112 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1113 char *filename, *pathname; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1114 plItem * item; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1115 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1116 filename = strdup(mp_basename(temp)); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1117 pathname = strdup(temp); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1118 if (strlen(pathname)-strlen(filename)>0) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1119 pathname[strlen(pathname)-strlen(filename)-1]='\0'; // We have some path so remove / at end |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1120 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1121 pathname[strlen(pathname)-strlen(filename)]='\0'; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1122 mp_msg(MSGT_PLAYTREE,MSGL_V, "Adding filename %s && pathname %s\n",filename,pathname); //FIXME: Change to MSGL_DBG2 ? |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1123 item=calloc( 1,sizeof( plItem ) ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1124 if (!item) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1125 return 0; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1126 item->name=filename; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1127 item->path=pathname; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1128 if (insert) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1129 gtkSet( gtkInsertPlItem,0,(void*)item ); // Inserts the item after current, and makes current=item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1130 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1131 gtkSet( gtkAddPlItem,0,(void*)item ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1132 return 1; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1133 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1134 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1135 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1136 // This function imports the initial playtree (based on cmd-line files) into the gui playlist |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1137 // by either: |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1138 // - overwriting gui pl (enqueue=0) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1139 // - appending it to gui pl (enqueue=1) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1140 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1141 int import_initial_playtree_into_gui(play_tree_t* my_playtree, m_config_t* config, int enqueue) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1142 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1143 play_tree_iter_t* my_pt_iter=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1144 int result=0; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1145 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1146 if (!enqueue) // Delete playlist before "appending" |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1147 gtkSet(gtkDelPl,0,0); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1148 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1149 if((my_pt_iter=pt_iter_create(&my_playtree,config))) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1150 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1151 while ((filename=pt_iter_get_next_file(my_pt_iter))!=NULL) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1152 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1153 if (import_file_into_gui(filename, 0)) // Add it to end of list |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1154 result=1; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1155 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1156 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1157 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1158 mplCurr(); // Update filename |
10193 | 1159 mplGotoTheNext=1; |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1160 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1161 if (!enqueue) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1162 filename=guiIntfStruct.Filename; // Backward compatibility; if file is specified on commandline, |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1163 // gmplayer does directly start in Play-Mode. |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1164 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1165 filename=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1166 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1167 return result; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1168 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1169 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1170 // This function imports and inserts an playtree, that is created "on the fly", for example by |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1171 // parsing some MOV-Reference-File; or by loading an playlist with "File Open" |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1172 // |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1173 // The file which contained the playlist is thereby replaced with it's contents. |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1174 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1175 int import_playtree_playlist_into_gui(play_tree_t* my_playtree, m_config_t* config) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1176 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1177 play_tree_iter_t* my_pt_iter=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1178 int result=0; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1179 plItem * save=(plItem*)gtkSet( gtkGetCurrPlItem, 0, 0); // Save current item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1180 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1181 if((my_pt_iter=pt_iter_create(&my_playtree,config))) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1182 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1183 while ((filename=pt_iter_get_next_file(my_pt_iter))!=NULL) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1184 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1185 if (import_file_into_gui(filename, 1)) // insert it into the list and set plCurrent=new item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1186 result=1; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1187 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1188 pt_iter_destroy(&my_pt_iter); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1189 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1190 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1191 if (save) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1192 gtkSet(gtkSetCurrPlItem, 0, (void*)save); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1193 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1194 gtkSet(gtkSetCurrPlItem, 0, (void*)plList); // go to head, if plList was empty before |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1195 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1196 if (save && result) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1197 gtkSet(gtkDelCurrPlItem, 0, 0); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1198 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1199 mplCurr(); // Update filename |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1200 filename=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1201 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1202 return result; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1203 } |