diff options
author | Richard Grenville <pyxlcy@gmail.com> | 2013-08-28 21:47:16 +0800 |
---|---|---|
committer | Richard Grenville <pyxlcy@gmail.com> | 2013-08-28 21:54:04 +0800 |
commit | 17c318b44a4534262499eca771ea878182769a13 (patch) | |
tree | 730af7c7850fc8e0a6cd726fef1a6e9e05210a41 | |
parent | 731ed301d424036e79234069b7e491484043c73c (diff) | |
download | tdebase-17c318b44a4534262499eca771ea878182769a13.tar.gz tdebase-17c318b44a4534262499eca771ea878182769a13.zip |
Bug fix #137: Auto-detect screen changes
Attempt to auto-detect screen changes to address the issue reported by
Feltzer.
-rw-r--r-- | compton.c | 24 | ||||
-rw-r--r-- | compton.h | 3 |
2 files changed, 17 insertions, 10 deletions
@@ -4114,12 +4114,15 @@ ev_shape_notify(session_t *ps, XShapeEvent *ev) { static void ev_screen_change_notify(session_t *ps, XRRScreenChangeNotifyEvent __attribute__((unused)) *ev) { - if (!ps->o.refresh_rate) { + if (ps->o.xinerama_shadow_crop) + cxinerama_upd_scrs(ps); + + if (ps->o.sw_opti && !ps->o.refresh_rate) { update_refresh_rate(ps); if (!ps->refresh_rate) { fprintf(stderr, "ev_screen_change_notify(): Refresh rate detection " - "failed, software VSync disabled."); - ps->o.vsync = VSYNC_NONE; + "failed, --sw-opti disabled."); + ps->o.sw_opti = false; } } } @@ -5714,11 +5717,6 @@ swopti_init(session_t *ps) { if (!ps->refresh_rate) return false; - // Monitor screen changes only if vsync_sw is enabled and we are using - // an auto-detected refresh rate - if (ps->randr_exists && !ps->o.refresh_rate) - XRRSelectInput(ps->dpy, ps->root, RRScreenChangeNotify); - return true; } @@ -6710,11 +6708,11 @@ session_init(session_t *ps_old, int argc, char **argv) { get_cfg(ps, argc, argv, false); // Query X RandR - if (ps->o.sw_opti && !ps->o.refresh_rate) { + if ((ps->o.sw_opti && !ps->o.refresh_rate) || ps->o.xinerama_shadow_crop) { if (XRRQueryExtension(ps->dpy, &ps->randr_event, &ps->randr_error)) ps->randr_exists = true; else - printf_errf("(): No XRandR extension, automatic refresh rate " + printf_errf("(): No XRandR extension, automatic screen change " "detection impossible."); } @@ -6775,6 +6773,12 @@ session_init(session_t *ps_old, int argc, char **argv) { if (ps->o.sw_opti) ps->o.sw_opti = swopti_init(ps); + // Monitor screen changes if vsync_sw is enabled and we are using + // an auto-detected refresh rate, or when Xinerama features are enabled + if (ps->randr_exists && ((ps->o.sw_opti && !ps->o.refresh_rate) + || ps->o.xinerama_shadow_crop)) + XRRSelectInput(ps->dpy, ps->root, RRScreenChangeNotifyMask); + // Initialize VSync if (!vsync_init(ps)) exit(1); @@ -1233,6 +1233,9 @@ cxinerama_win_upd_scr(session_t *ps, win *w) { #endif } +static void +cxinerama_upd_scrs(session_t *ps); + static session_t * session_init(session_t *ps_old, int argc, char **argv); |