src/video/fbcon/SDL_fbevents.c
changeset 1022 3d4f1930ed02
parent 769 b8d311d90021
child 1201 718d00094f82
equal deleted inserted replaced
1021:ddd058103e28 1022:3d4f1930ed02
   833    video hardware and when we regain it.
   833    video hardware and when we regain it.
   834  */
   834  */
   835 static void switch_vt(_THIS, unsigned short which)
   835 static void switch_vt(_THIS, unsigned short which)
   836 {
   836 {
   837 	struct vt_stat vtstate;
   837 	struct vt_stat vtstate;
   838 	unsigned short current;
   838 	unsigned short v_active;
   839 	SDL_Surface *screen;
   839 	SDL_Surface *screen;
   840 	__u16 saved_pal[3*256];
   840 	__u16 saved_pal[3*256];
   841 	Uint32 screen_arealen;
   841 	Uint32 screen_arealen;
   842 	Uint8 *screen_contents;
   842 	Uint8 *screen_contents;
   843 
   843 
   844 	/* Figure out whether or not we're switching to a new console */
   844 	/* Figure out whether or not we're switching to a new console */
   845 	if ( (ioctl(keyboard_fd, VT_GETSTATE, &vtstate) < 0) ||
   845 	if ( (ioctl(keyboard_fd, VT_GETSTATE, &vtstate) < 0) ||
   846 	     (which == vtstate.v_active) ) {
   846 	     (which == vtstate.v_active) ) {
   847 		return;
   847 		return;
   848 	}
   848 	}
   849 	current = vtstate.v_active;
   849 	v_active = vtstate.v_active;
   850 
   850 
   851 	/* Save the contents of the screen, and go to text mode */
   851 	/* Save the contents of the screen, and go to text mode */
   852 	SDL_mutexP(hw_lock);
   852 	SDL_mutexP(hw_lock);
   853 	wait_idle(this);
   853 	wait_idle(this);
   854 	screen = SDL_VideoSurface;
   854 	screen = SDL_VideoSurface;
   862 
   862 
   863 	/* New console, switch to it */
   863 	/* New console, switch to it */
   864 	if ( ioctl(keyboard_fd, VT_ACTIVATE, which) == 0 ) {
   864 	if ( ioctl(keyboard_fd, VT_ACTIVATE, which) == 0 ) {
   865 		/* Wait for our console to be activated again */
   865 		/* Wait for our console to be activated again */
   866 		ioctl(keyboard_fd, VT_WAITACTIVE, which);
   866 		ioctl(keyboard_fd, VT_WAITACTIVE, which);
   867 		while ( ioctl(keyboard_fd, VT_WAITACTIVE, current) < 0 ) {
   867 		while ( ioctl(keyboard_fd, VT_WAITACTIVE, v_active) < 0 ) {
   868 			if ( (errno != EINTR) && (errno != EAGAIN) ) {
   868 			if ( (errno != EINTR) && (errno != EAGAIN) ) {
   869 				/* Unknown VT error - cancel this */
   869 				/* Unknown VT error - cancel this */
   870 				break;
   870 				break;
   871 			}
   871 			}
   872 			SDL_Delay(500);
   872 			SDL_Delay(500);