diff options
-rwxr-xr-x | old-configure | 2 | ||||
-rw-r--r-- | video/out/x11_common.c | 16 | ||||
-rw-r--r-- | video/out/x11_common.h | 2 | ||||
-rw-r--r-- | wscript | 2 |
4 files changed, 20 insertions, 2 deletions
diff --git a/old-configure b/old-configure index b4b1f7cf2b..b32c9f0598 100755 --- a/old-configure +++ b/old-configure @@ -634,7 +634,7 @@ fi check_pkg_config "Xinerama" $_xinerama XINERAMA 'xinerama' -check_pkg_config "Xrandr" $_xrandr XRANDR 'xrandr' +check_pkg_config "Xrandr" $_xrandr XRANDR 'xrandr >= 1.2.0' check_pkg_config "CACA" $_caca CACA 'caca >= 0.99.beta18' diff --git a/video/out/x11_common.c b/video/out/x11_common.c index f1b69e4f55..6d5485edf2 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -327,6 +327,17 @@ static void xrandr_read(struct vo_x11_state *x11) #if HAVE_XRANDR x11->num_displays = 0; + if (x11->xrandr_event < 0) { + int event_base, error_base; + if (!XRRQueryExtension(x11->display, &event_base, &error_base)) { + MP_VERBOSE(x11, "Couldn't init Xrandr.\n"); + return; + } + x11->xrandr_event = event_base + RRNotify; + XRRSelectInput(x11->display, x11->rootwin, RRScreenChangeNotifyMask | + RRCrtcChangeNotifyMask | RROutputChangeNotifyMask); + } + XRRScreenResources *r = XRRGetScreenResources(x11->display, x11->rootwin); if (!r) { MP_VERBOSE(x11, "Xrandr doesn't work.\n"); @@ -452,6 +463,7 @@ int vo_x11_init(struct vo *vo) *x11 = (struct vo_x11_state){ .log = mp_log_new(x11, vo->log, "x11"), .screensaver_enabled = true, + .xrandr_event = -1, }; vo->x11 = x11; @@ -932,6 +944,10 @@ int vo_x11_check_events(struct vo *vo) if (x11->ShmCompletionWaitCount > 0) x11->ShmCompletionWaitCount--; } + if (Event.type == x11->xrandr_event) { + xrandr_read(x11); + vo_x11_update_geometry(vo); + } break; } } diff --git a/video/out/x11_common.h b/video/out/x11_common.h index d1ccdd7223..4c11ad1465 100644 --- a/video/out/x11_common.h +++ b/video/out/x11_common.h @@ -50,6 +50,8 @@ struct vo_x11_state { struct xrandr_display displays[MAX_DISPLAYS]; int num_displays; + int xrandr_event; + bool screensaver_enabled; bool dpms_touched; double screensaver_time_last; @@ -569,7 +569,7 @@ video_output_features = [ 'name': '--xrandr', 'desc': 'Xrandr', 'deps': [ 'x11' ], - 'func': check_pkg_config('xrandr'), + 'func': check_pkg_config('xrandr', '>= 1.2.0'), } , { 'name': '--gl-cocoa', 'desc': 'OpenGL Cocoa Backend', |