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