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