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