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