[SDL] [PATCH] fbcon needs to save/restore the screeninfo for vc switches

Bart Oldeman bartoldeman at users.sourceforge.net
Mon Nov 28 00:16:12 PST 2005


Hi,

I observed that the original resolution is lost when I flip consoles back 
and forth using the alt-fn keys. This is using Linux kernel 2.6.14, 
radeonfb. The patch below fixes this. Perhaps this isn't meant to be 
used, and it's a kernel bug, but then it just works around a kernel bug ;)

By the way, does anyone why SDL freezes the application when switched away 
using fbcon? It could catch a signal for flipping back, and provide a 
fake frame buffer at a fixed position so that the application can work in 
the background.

Using ctrl-alt-fn for flipping instead of alt-fn may help a few games that 
actually use that key combination. Would such a patch be accepted, or 
should something like that be configurable (environment variable?)

Bart

Index: src/video/fbcon/SDL_fbevents.c
===================================================================
RCS file: /home/sdlweb/libsdl.org/cvs/SDL12/src/video/fbcon/SDL_fbevents.c,v
retrieving revision 1.14
diff -u -r1.14 SDL_fbevents.c
--- src/video/fbcon/SDL_fbevents.c	4 Jan 2005 19:04:14 -0000	1.14
+++ src/video/fbcon/SDL_fbevents.c	28 Nov 2005 08:13:44 -0000
@@ -834,6 +834,7 @@
   */
  static void switch_vt(_THIS, unsigned short which)
  {
+	struct fb_var_screeninfo vinfo;
  	struct vt_stat vtstate;
  	unsigned short v_active;
  	SDL_Surface *screen;
@@ -858,6 +859,7 @@
  		memcpy(screen_contents, screen->pixels, screen_arealen);
  	}
  	FB_SavePaletteTo(this, 256, saved_pal);
+	ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo);
  	ioctl(keyboard_fd, KDSETMODE, KD_TEXT);

  	/* New console, switch to it */
@@ -875,6 +877,7 @@

  	/* Restore graphics mode and the contents of the screen */
  	ioctl(keyboard_fd, KDSETMODE, KD_GRAPHICS);
+	ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo);
  	FB_RestorePaletteFrom(this, 256, saved_pal);
  	if ( screen_contents ) {
  		memcpy(screen->pixels, screen_contents, screen_arealen);




More information about the SDL mailing list