Mercurial > mplayer.hg
annotate Gui/mplayer/psignal.c @ 1765:29913c011d50
normal size
author | pontscho |
---|---|
date | Thu, 30 Aug 2001 10:55:17 +0000 |
parents | b60319205152 |
children | 8bbfd587166b |
rev | line source |
---|---|
1693 | 1 |
2 #include <stdlib.h> | |
3 #include <stdio.h> | |
4 #include <string.h> | |
5 #include <signal.h> | |
6 #include <unistd.h> | |
7 | |
8 #include "widgets.h" | |
9 #include "play.h" | |
10 | |
11 #include "../app.h" | |
12 | |
13 #include "../skin/skin.h" | |
14 #include "../wm/ws.h" | |
15 #include "../config.h" | |
16 #include "../error.h" | |
17 #include "../language.h" | |
18 | |
19 #include "../../config.h" | |
20 | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
21 #include "../../libvo/x11_common.h" |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
22 //#include "../../libvo/sub.h" |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
23 |
1693 | 24 #include "./mplayer.h" |
25 | |
26 #define gtkShow( w ) gtkShMem->vs.window=w; gtkSendMessage( evShowWindow ); | |
27 | |
28 pid_t mplMPlayerPID = 0; | |
29 pid_t mplParentPID = 0; | |
30 | |
1741 | 31 pid_t gtkPID = 0; |
1693 | 32 |
33 int mplCriticalError = 0; | |
34 int gtkIsOk = 0; | |
35 | |
36 void mplErrorHandler( int critical,const char * format, ... ) | |
37 { | |
38 char * p; | |
39 va_list ap; | |
40 int n; | |
41 | |
42 if ( (p=(char *)malloc( 512 ) ) == NULL ) return; | |
43 va_start( ap,format ); | |
44 n=vsnprintf( p,512,format,ap ); | |
45 va_end( ap ); | |
46 mplCriticalError=critical; | |
47 gtkMessageBox( p ); | |
48 } | |
49 | |
1741 | 50 /* |
1693 | 51 void mplPlayerSigHandler( int s ) |
52 { | |
53 #ifdef DEBUG | |
54 dbprintf( 5,"[psignal] mpl sig handler msg: %d\n",mplShMem->message ); | |
55 #endif | |
56 if ( s != SIGTYPE ) return; | |
57 switch ( mplShMem->message ) | |
58 { | |
59 case mplQuit: | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
60 exit_player( "GUI close" ); |
1693 | 61 break; |
62 case mplPauseEvent: | |
63 // if ( osd_function != OSD_PAUSE ) osd_function=OSD_PAUSE; | |
64 // else osd_function=OSD_PLAY; | |
65 break; | |
66 case mplResizeEvent: | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
67 vo_resize=1; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
68 vo_expose=1; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
69 printf( "[psignal] resize.\n" ); |
1693 | 70 // if (video_out != NULL ) video_out->check_events(); |
71 break; | |
72 case mplExposeEvent: | |
1723
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
73 vo_expose=1; |
5e4214a7540e
GUI stuff. now seeking works, and xmga renders to video window
arpi
parents:
1700
diff
changeset
|
74 printf( "[psignal] expose.\n" ); |
1693 | 75 // if (video_out != NULL ) video_out->check_events(); |
76 break; | |
77 case mplSeekEvent: | |
78 // rel_seek_secs+=mplShMem->videodata.seek; | |
79 // if ( rel_seek_secs > 0 ) osd_function=OSD_FFW; | |
80 // else osd_function=OSD_REW; | |
81 break; | |
82 case mplIncAudioBufferDelay: | |
83 // audio_delay+=0.1; // increase audio buffer delay | |
84 // a_frame-=0.1; | |
85 break; | |
86 case mplDecAudioBufferDelay: | |
87 // audio_delay-=0.1; // increase audio buffer delay | |
88 // a_frame+=0.1; | |
89 break; | |
90 } | |
91 mplShMem->message=0; | |
92 } | |
1741 | 93 */ |
1693 | 94 |
95 void gtkSigHandler( int s ) | |
96 { | |
97 if ( s != SIGTYPE ) return; | |
98 #ifdef DEBUG | |
99 dbprintf( 5,"[psignal] gtk sig handler msg: %d\n",gtkShMem->message ); | |
100 #endif | |
101 switch ( gtkShMem->message ) | |
102 { | |
103 case evHideWindow: | |
104 switch ( gtkShMem->vs.window ) | |
105 { | |
106 case evPlayList: gtk_widget_hide( PlayList ); gtkVisiblePlayList=0; break; | |
107 case evSkinBrowser: gtk_widget_hide( SkinBrowser ); gtkVisibleSkinBrowser=0; break; | |
108 case evLoad: gtk_widget_hide( FileSelect ); gtkVisibleFileSelect=0; break; | |
109 } | |
110 break; | |
111 case evSkinBrowser: | |
112 if ( gtkVisibleSkinBrowser ) gtk_widget_hide( SkinBrowser ); | |
113 gtkClearList( SkinList ); | |
114 if ( !gtkFillSkinList( sbMPlayerPrefixDir ) ) break; | |
115 if ( gtkFillSkinList( sbMPlayerDirInHome ) ) | |
116 { | |
117 gtkSetDefaultToCList( SkinList,cfgSkin ); | |
118 gtk_widget_show( SkinBrowser ); | |
119 gtkVisibleSkinBrowser=1; | |
120 gtkShow( evSkinBrowser ); | |
121 } | |
122 break; | |
123 case evPreferences: | |
124 if ( gtkVisibleOptions ) gtk_widget_hide( Options ); | |
125 gtk_widget_show( Options ); | |
126 gtkVisibleOptions=1; | |
127 break; | |
128 case evPlayList: | |
129 if ( gtkVisiblePlayList ) gtk_widget_hide( PlayList ); | |
130 gtk_widget_show( PlayList ); | |
131 gtkVisiblePlayList=1; | |
132 gtkShow( evPlayList ); | |
133 break; | |
134 case evLoad: | |
135 if ( gtkVisibleFileSelect ) gtk_widget_hide( FileSelect ); | |
136 gtk_widget_show( FileSelect ); | |
137 gtkVisibleFileSelect=1; | |
138 gtkShow( evPlay ); | |
139 break; | |
1741 | 140 case evFirstLoad: |
141 if ( gtkVisibleFileSelect ) gtk_widget_hide( FileSelect ); | |
142 gtk_widget_show( FileSelect ); | |
143 gtkVisibleFileSelect=1; | |
144 gtkShow( evFirstLoad ); | |
145 break; | |
1693 | 146 case evMessageBox: |
147 gtk_label_set_text( gtkMessageBoxText,(char *)gtkShMem->mb.str ); | |
148 gtk_widget_set_usize( MessageBox,gtkShMem->mb.sx,gtkShMem->mb.sy ); | |
149 gtk_widget_set_usize( gtkMessageBoxText,gtkShMem->mb.tsx,gtkShMem->mb.tsy ); | |
150 if ( gtkVisibleMessageBox ) gtk_widget_hide( MessageBox ); | |
151 gtk_widget_show( MessageBox ); | |
152 gtkVisibleMessageBox=1; | |
153 break; | |
154 case evAbout: | |
155 if ( gtkVisibleAboutBox ) gtk_widget_hide( AboutBox ); | |
156 gtk_widget_show( AboutBox ); | |
157 gtkVisibleAboutBox=1; | |
158 break; | |
159 case evExit: | |
1700 | 160 gtk_main_quit(); |
1693 | 161 break; |
162 } | |
163 gtkShMem->message=0; | |
164 } | |
165 | |
166 listItems tmpList; | |
167 | |
168 void mplMainSigHandler( int s ) | |
169 { | |
1741 | 170 if ( s != SIGTYPE ) return; |
171 | |
1693 | 172 #ifdef DEBUG |
173 if ( gtkShMem->message ) dbprintf( 5,"[psignal] main sig handler gtk msg: %d\n",gtkShMem->message ); | |
1741 | 174 // if ( mplShMem->message ) dbprintf( 5,"[psignal] main sig handler mpl msg: %d\n",mplShMem->message ); |
1693 | 175 #endif |
176 | |
177 switch ( gtkShMem->message ) | |
178 { | |
179 case evGtkIsOk: | |
180 #ifdef DEBUG | |
1741 | 181 dbprintf( 5,"[psignal] gtk is ok.\n" ); |
1693 | 182 #endif |
183 gtkIsOk=True; | |
184 break; | |
185 case evShowWindow: | |
186 switch ( gtkShMem->vs.window ) | |
187 { | |
188 case evPlayList: gtkVisiblePlayList=1; break; | |
189 case evLoad: gtkVisibleFileSelect=1; break; | |
190 case evSkinBrowser: gtkVisibleSkinBrowser=1; break; | |
191 } | |
192 break; | |
193 case evHideWindow: | |
194 switch ( gtkShMem->vs.window ) | |
195 { | |
196 case evPlayList: | |
197 btnModify( evPlayList,btnReleased ); gtkVisiblePlayList=0; | |
198 mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow ); | |
199 break; | |
200 case evSkinBrowser: gtkVisibleSkinBrowser=0; break; | |
201 case evLoad: gtkVisibleFileSelect=0; break; | |
202 } | |
203 break; | |
204 case evSkinBrowser: | |
205 if ( strcmp( cfgSkin,gtkShMem->sb.name ) ) | |
206 { | |
207 int ret; | |
208 #ifdef DEBUG | |
209 dbprintf( 1,"[psignal] skin: %s\n",gtkShMem->sb.name ); | |
210 #endif | |
211 | |
212 mainVisible=0; | |
213 | |
214 appInitStruct( &tmpList ); | |
215 skinAppMPlayer=&tmpList; | |
216 ret=skinRead( gtkShMem->sb.name ); | |
217 | |
218 appInitStruct( &tmpList ); | |
219 skinAppMPlayer=&appMPlayer; | |
220 appInitStruct( &appMPlayer ); | |
221 if ( !ret ) strcpy( cfgSkin,gtkShMem->sb.name ); | |
222 skinRead( cfgSkin ); | |
223 | |
224 if ( ret ) | |
225 { | |
226 mainVisible=1; | |
227 break; | |
228 } | |
229 | |
230 // appCopy( &appMPlayer,&tmpList ); | |
231 // appInitStruct( &tmpList ); | |
232 // skinAppMPlayer=&appMPlayer; | |
233 // strcpy( cfgSkin,gtkShMem->sb.name ); | |
234 | |
235 if ( mplDrawBuffer ) free( mplDrawBuffer ); | |
236 if ( ( mplDrawBuffer = (unsigned char *)calloc( 1,appMPlayer.main.Bitmap.ImageSize ) ) == NULL ) | |
237 { message( False,langNEMDB ); break; } | |
238 wsResizeWindow( &appMPlayer.mainWindow,appMPlayer.main.width,appMPlayer.main.height ); | |
239 wsMoveWindow( &appMPlayer.mainWindow,appMPlayer.main.x,appMPlayer.main.y ); | |
240 wsResizeImage( &appMPlayer.mainWindow ); | |
241 wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image ); | |
242 mainVisible=1; mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow ); | |
243 btnModify( evSetVolume,mplShMem->Volume ); | |
244 btnModify( evSetBalance,mplShMem->Balance ); | |
245 btnModify( evSetMoviePosition,mplShMem->Position ); | |
246 | |
247 if ( appMPlayer.menuBase.Bitmap.Image ) | |
248 { | |
249 if ( mplMenuDrawBuffer ) free( mplMenuDrawBuffer ); | |
250 if ( ( mplMenuDrawBuffer = (unsigned char *)calloc( 1,appMPlayer.menuBase.Bitmap.ImageSize ) ) == NULL ) | |
251 { message( False,langNEMDB ); break; } | |
252 wsResizeWindow( &appMPlayer.menuWindow,appMPlayer.menuBase.width,appMPlayer.menuBase.height ); | |
253 wsResizeImage( &appMPlayer.menuWindow ); | |
254 } | |
255 | |
256 mplSkinChanged=1; | |
257 if ( !mplShMem->Playing ) | |
258 { | |
259 mplSkinChanged=0; | |
260 if ( appMPlayer.subWindow.isFullScreen ) wsFullScreen( &appMPlayer.subWindow ); | |
261 wsResizeWindow( &appMPlayer.subWindow,appMPlayer.sub.width,appMPlayer.sub.height ); | |
262 wsMoveWindow( &appMPlayer.subWindow,appMPlayer.sub.x,appMPlayer.sub.y ); | |
263 if ( appMPlayer.sub.Bitmap.Image ) wsResizeImage( &appMPlayer.subWindow ); | |
264 mplSubRender=1; wsPostRedisplay( &appMPlayer.subWindow ); | |
265 } | |
266 } | |
267 break; | |
268 case evFileLoaded: | |
269 if ( Filename ) free( Filename ); | |
270 Filename=(char *)malloc( strlen( gtkShMem->fs.dir ) + strlen( gtkShMem->fs.filename ) + 2 ); | |
271 strcpy( Filename,gtkShMem->fs.dir ); strcat( Filename,"/" ); strcat( Filename,gtkShMem->fs.filename ); | |
272 if ( mplMainAutoPlay ) mplGeneralTimer=1; | |
273 break; | |
274 case evMessageBox: | |
275 if ( mplCriticalError ) | |
276 { gtkSendMessage( evExit ); exit( 1 ); } | |
277 mplCriticalError=0; | |
278 break; | |
279 } | |
280 | |
281 // switch( mplShMem->message ) | |
282 // { | |
283 // } | |
284 gtkShMem->message=0; | |
1741 | 285 // mplShMem->message=0; |
1693 | 286 } |
287 | |
288 void mplSendMessage( int msg ) | |
289 { | |
290 if ( !mplShMem->Playing ) return; | |
291 mplShMem->message=msg; | |
1741 | 292 // kill( mplMPlayerPID,SIGTYPE ); usleep( 10 ); |
293 // kill( mplMPlayerPID,SIGTYPE ); usleep( 10 ); | |
1693 | 294 kill( mplMPlayerPID,SIGTYPE ); |
295 } | |
296 | |
297 void gtkSendMessage( int msg ) | |
298 { | |
299 if ( !gtkIsOk ) return; | |
300 gtkShMem->message=msg; | |
1741 | 301 kill( gtkPID,SIGTYPE ); |
1693 | 302 } |