summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Grenville <pyxlcy@gmail.com>2013-08-28 21:47:16 +0800
committerRichard Grenville <pyxlcy@gmail.com>2013-08-28 21:54:04 +0800
commit17c318b44a4534262499eca771ea878182769a13 (patch)
tree730af7c7850fc8e0a6cd726fef1a6e9e05210a41
parent731ed301d424036e79234069b7e491484043c73c (diff)
downloadtdebase-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.c24
-rw-r--r--compton.h3
2 files changed, 17 insertions, 10 deletions
diff --git a/compton.c b/compton.c
index e2b714e30..ae39e2417 100644
--- a/compton.c
+++ b/compton.c
@@ -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);
diff --git a/compton.h b/compton.h
index f4a7ef9a2..c66739dd4 100644
--- a/compton.h
+++ b/compton.h
@@ -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);