summaryrefslogtreecommitdiffstats
path: root/libvo/x11_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvo/x11_common.c')
-rw-r--r--libvo/x11_common.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index f64e6a72a7..b8bb7e6945 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -672,16 +672,27 @@ void vo_vm_switch(uint32_t X, uint32_t Y, int* modeline_width, int* modeline_hei
void vo_vm_close(Display *dpy)
{
#ifdef HAVE_NEW_GUI
- if ((vidmodes!=NULL)&&( vo_window == None ) )
+ if (vidmodes!=NULL && vo_window != None)
#else
if (vidmodes!=NULL)
#endif
- {
- int screen; screen=DefaultScreen( dpy );
- XF86VidModeSwitchToMode(dpy,screen,vidmodes[0]);
- XF86VidModeSwitchToMode(dpy,screen,vidmodes[0]);
- free(vidmodes);
- }
+ {
+ int i, modecount;
+ int screen; screen=DefaultScreen( dpy );
+
+ free(vidmodes); vidmodes=NULL;
+ XF86VidModeGetAllModeLines(mDisplay,mScreen,&modecount,&vidmodes);
+ for (i=0; i<modecount; i++)
+ if ((vidmodes[i]->hdisplay == vo_screenwidth) && (vidmodes[i]->vdisplay == vo_screenheight))
+ {
+ printf("\nReturning to original mode %dx%d\n", vo_screenwidth, vo_screenheight);
+ break;
+ }
+
+ XF86VidModeSwitchToMode(dpy,screen,vidmodes[i]);
+ XF86VidModeSwitchToMode(dpy,screen,vidmodes[i]);
+ free(vidmodes);
+ }
}
#endif