summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xold-configure2
-rw-r--r--video/out/x11_common.c16
-rw-r--r--video/out/x11_common.h2
-rw-r--r--wscript2
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;
diff --git a/wscript b/wscript
index 13b0e31e51..47cda430d4 100644
--- a/wscript
+++ b/wscript
@@ -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',