changeset 331:0f1737e626fa

- Changed keypress-detection from keydown to keyup, seems to fix keyrepeat bug (key had to be pressed twice to be detected) - Changed key-handling: 'f' cycles fullscreen/windowed, ESC/RETURN/'q' quits - Bugfix which avoids exit, because return is passed to sdl-output on startup, which caused the player to exit (keyboard-buffer problem? better solution recommed)
author atmosfear
date Tue, 10 Apr 2001 21:41:31 +0000
parents 3c7ce767bb32
children a5c6f9d536dd
files libvo/vo_sdl.c
diffstat 1 files changed, 23 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_sdl.c	Tue Apr 10 21:25:09 2001 +0000
+++ b/libvo/vo_sdl.c	Tue Apr 10 21:41:31 2001 +0000
@@ -50,6 +50,13 @@
  *    - Minor bugfix to aspect-ratio vor non-4:3-resolutions (like 1280x1024)
  *    - Bugfix to check_events() to reveal mouse cursor after 'q'-quit in
  *       fullscreen-mode
+ *    Felix Buenemann <Atmosfear@users.sourceforge.net> - March 12, 2001
+ *    - Changed keypress-detection from keydown to keyup, seems to fix keyrepeat
+ *       bug (key had to be pressed twice to be detected)
+ *    - Changed key-handling: 'f' cycles fullscreen/windowed, ESC/RETURN/'q' quits
+ *    - Bugfix which avoids exit, because return is passed to sdl-output on startup,
+ *       which caused the player to exit (keyboard-buffer problem? better solution
+ *       recommed)
  */
 
 #include <stdio.h>
@@ -135,13 +142,13 @@
  *             *name == 
  *   returns : 0 on success, -1 on failure
  **/
-
+  
 static int sdl_open (void *plugin, void *name)
 {
 	struct sdl_priv_s *priv = &sdl_priv;
 	const SDL_VideoInfo *vidInfo = NULL;
 	static int opened = 0;
-
+	
 	if (opened)
 	    return 0;
 	opened = 1;
@@ -209,7 +216,8 @@
 	
 	/* We dont want those in out event queue */
 	SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
-	SDL_EventState(SDL_KEYUP, SDL_IGNORE);
+	//SDL_EventState(SDL_KEYUP, SDL_IGNORE);
+	SDL_EventState(SDL_KEYDOWN, SDL_IGNORE);
 	SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
 	SDL_EventState(SDL_MOUSEBUTTONDOWN, SDL_IGNORE);
 	SDL_EventState(SDL_MOUSEBUTTONUP, SDL_IGNORE);
@@ -473,7 +481,8 @@
 {
 	struct sdl_priv_s *priv = &sdl_priv;
 	SDL_Event event;
-	SDLKey keypressed;
+	SDLKey keypressed = 0;
+	static int firstcheck = 0;
 	
 	/* Poll the waiting SDL Events */
 	while ( SDL_PollEvent(&event) ) {
@@ -493,7 +502,7 @@
 			
 			
 			/* graphics mode selection shortcuts */
-			case SDL_KEYDOWN:
+			case SDL_KEYUP:
 				keypressed = event.key.keysym.sym;
 
 				/* plus key pressed. plus cycles through available fullscreenmodes, if we have some */
@@ -506,8 +515,8 @@
 //					LOG (LOG_DEBUG, "SDL video out: Set next available fullscreen mode.");
 				}
 
-				/* return or escape key pressed toggles/exits fullscreenmode */
-				else if ( (keypressed == SDLK_RETURN) || (keypressed == SDLK_ESCAPE) ) {
+				/* f key pressed toggles/exits fullscreenmode */
+				else if ( keypressed == SDLK_f ) {
 					if (priv->surface->flags & SDL_FULLSCREEN) {
 						priv->surface = SDL_SetVideoMode(priv->windowsize.w, priv->windowsize.h, priv->bpp, priv->sdlflags);
 						SDL_ShowCursor(1);
@@ -522,7 +531,13 @@
                                 
                                 else switch(keypressed){
 //                                case SDLK_q: if(!(priv->surface->flags & SDL_FULLSCREEN))mplayer_put_key('q');break;
-                                case SDLK_q: SDL_ShowCursor(1); mplayer_put_key('q');break; //F.B.: added ShowCursor
+				case SDLK_RETURN:
+					if (!firstcheck) { firstcheck = 1; break; }
+                                case SDLK_ESCAPE:
+				case SDLK_q:
+					SDL_ShowCursor(1);
+					mplayer_put_key('q');
+				break;
                                 case SDLK_p: mplayer_put_key('p');break;
                                 case SDLK_SPACE: mplayer_put_key(' ');break;
                                 case SDLK_UP: mplayer_put_key(KEY_UP);break;