diff -up xgalaga-2.0.34/libsprite/makewindow.c.fs xgalaga-2.0.34/libsprite/makewindow.c --- xgalaga-2.0.34/libsprite/makewindow.c.fs 2007-08-31 19:32:40.000000000 +0200 +++ xgalaga-2.0.34/libsprite/makewindow.c 2007-08-31 19:41:36.000000000 +0200 @@ -536,7 +536,7 @@ void W_ToggleFullscreen(_win) { #ifdef XF86VIDMODE int i; - XF86VidModeModeLine mode; + XF86VidModeModeLine mode = { .hdisplay = 0, .privsize = 0 }; XF86VidModeModeInfo **modes; int mode_count; #endif @@ -609,8 +609,6 @@ void W_ToggleFullscreen(_win) fs_width = mode.hdisplay; fs_height = mode.vdisplay; } - else /* If we can't get the currentmode force setting of a new mode. */ - mode.hdisplay = 0; /* Get list of modelines. */ if (!XF86VidModeGetAllModeLines(W_Display, W_Screen, &mode_count, &modes)) @@ -645,7 +643,8 @@ void W_ToggleFullscreen(_win) } /* Switch video mode. */ - if (((modes[i]->hdisplay != mode.hdisplay) || + if ((i >= 0) && + ((modes[i]->hdisplay != mode.hdisplay) || (modes[i]->vdisplay != mode.vdisplay)) && XF86VidModeSwitchToMode(W_Display, W_Screen, modes[i])) { @@ -658,6 +657,18 @@ void W_ToggleFullscreen(_win) /* Set viewport. */ XF86VidModeSetViewPort(W_Display, W_Screen, 0, 0); + + /* clean up */ + if (mode.privsize) + XFree(mode.private); + + if (mode_count) + { + for (i = 0; i < mode_count; i++) + if (modes[i]->privsize) + XFree(modes[i]->private); + XFree(modes); + } #endif /* Center the window (if nescesarry) */