diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c
index 53bcd4803cb9361bbc3aaef204f47133828f2eb1..1e8ec9a3420e8aaf51a8de5c22572b3ec0decb21 100644
--- a/src/conio/sdl_con.c
+++ b/src/conio/sdl_con.c
@@ -448,24 +448,9 @@ void exit_sdl_con(void)
 	sdl_user_func_ret(SDL_USEREVENT_QUIT);
 }
 
-#if (defined(__MACH__) && defined(__APPLE__))
+int sdl_using_directx=0;
 int sdl_using_quartz=0;
-#endif
-
-#if !defined(NO_X) && defined(__unix__)
-int sdl_using_x11()
-{
-	char	driver[16];
-
-	if(sdl.VideoDriverName(driver, sizeof(driver))==NULL)
-		return(FALSE);
-	if(!strcmp(driver,"x11"))
-		return(TRUE);
-	if(!strcmp(driver,"dga"))
-		return(TRUE);
-	return(FALSE);
-}
-#endif
+int sdl_using_x11=0;
 
 void sdl_copytext(const char *text, size_t buflen)
 {
@@ -485,7 +470,7 @@ void sdl_copytext(const char *text, size_t buflen)
 #endif
 
 #if !defined(NO_X) && defined(__unix__)
-	if(sdl_x11available && sdl_using_x11()) {
+	if(sdl_x11available && sdl_using_x11) {
 		sdl.mutexP(sdl_copybuf_mutex);
 		FREE_AND_NULL(sdl_copybuf);
 
@@ -529,7 +514,7 @@ char *sdl_getcliptext(void)
 #endif
 
 #if !defined(NO_X) && defined(__unix__)
-	if(sdl_x11available && sdl_using_x11()) {
+	if(sdl_x11available && sdl_using_x11) {
 		sdl_user_func(SDL_USEREVENT_PASTE,0,0,0,0);
 		sdl.SemWait(sdl_pastebuf_set);
 		if(sdl_pastebuf!=NULL) {
@@ -1207,8 +1192,14 @@ void setup_surfaces(void)
 	SDL_Surface	*tmp_rect=NULL;
 	SDL_Event	ev;
 
-	if(fullscreen)
+	if(fullscreen) {
+#if defined(_WIN32)
+		if(sdl_using_directx) {
+			flags=SDL_SWSURFACE|SDL_ANYFORMAT;
+		}
+#endif
 		flags |= SDL_FULLSCREEN;
+	}
 	else
 		flags |= SDL_RESIZABLE;
 
@@ -1319,6 +1310,24 @@ int sdl_video_event_thread(void *data)
 	SDL_Event	ev;
 
 	if(!init_sdl_video()) {
+		char	driver[16];
+		if(sdl.VideoDriverName(driver, sizeof(driver))!=NULL) {
+#if defined(_WIN32)
+			if(!strcmp(driver,"directx"))
+				sdl_using_directx=TRUE;
+#endif
+#if (defined(__MACH__) && defined(__APPLE__))
+			if(!strcmp(driver,"Quartz"))
+				sdl_using_quartz=TRUE;
+#endif
+#if !defined(NO_X) && defined(__unix__)
+			if(!strcmp(driver,"x11"))
+				sdl_using_x11=TRUE;
+			if(!strcmp(driver,"dga"))
+				sdl_using_x11=TRUE;
+#endif
+		}
+
 		while(1) {
 			if(sdl.WaitEvent(&ev)==1) {
 				switch (ev.type) {
@@ -1561,7 +1570,7 @@ int sdl_video_event_thread(void *data)
 	#endif
 
 	#if !defined(NO_X) && defined(__unix__)
-								if(sdl_x11available && sdl_using_x11()) {
+								if(sdl_x11available && sdl_using_x11) {
 									SDL_SysWMinfo	wmi;
 
 									SDL_VERSION(&(wmi.version));
@@ -1599,7 +1608,7 @@ int sdl_video_event_thread(void *data)
 	#endif
 
 	#if !defined(NO_X) && defined(__unix__)
-								if(sdl_x11available && sdl_using_x11()) {
+								if(sdl_x11available && sdl_using_x11) {
 									Window sowner=None;
 									SDL_SysWMinfo	wmi;
 
@@ -1640,7 +1649,7 @@ int sdl_video_event_thread(void *data)
 					}
 					case SDL_SYSWMEVENT:			/* ToDo... This is where Copy/Paste needs doing */
 	#if !defined(NO_X) && defined(__unix__)
-						if(sdl_x11available && sdl_using_x11()) {
+						if(sdl_x11available && sdl_using_x11) {
 							XEvent *e;
 							e=&ev.syswm.msg->event.xevent;
 							switch(e->type) {