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