|
Lines 4543-4548
ev_shape_notify(session_t *ps, XShapeEvent *ev) {
Link Here
|
| 4543 |
update_reg_ignore_expire(ps, w); |
4543 |
update_reg_ignore_expire(ps, w); |
| 4544 |
} |
4544 |
} |
| 4545 |
|
4545 |
|
|
|
4546 |
#ifdef CONFIG_XRANDR |
| 4546 |
/** |
4547 |
/** |
| 4547 |
* Handle ScreenChangeNotify events from X RandR extension. |
4548 |
* Handle ScreenChangeNotify events from X RandR extension. |
| 4548 |
*/ |
4549 |
*/ |
|
Lines 4561-4566
ev_screen_change_notify(session_t *ps,
Link Here
|
| 4561 |
} |
4562 |
} |
| 4562 |
} |
4563 |
} |
| 4563 |
} |
4564 |
} |
|
|
4565 |
#endif // CONFIG_XRANDR |
| 4564 |
|
4566 |
|
| 4565 |
#if defined(DEBUG_EVENTS) || defined(DEBUG_RESTACK) |
4567 |
#if defined(DEBUG_EVENTS) || defined(DEBUG_RESTACK) |
| 4566 |
/** |
4568 |
/** |
|
Lines 4659-4668
ev_handle(session_t *ps, XEvent *ev) {
Link Here
|
| 4659 |
ev_shape_notify(ps, (XShapeEvent *) ev); |
4661 |
ev_shape_notify(ps, (XShapeEvent *) ev); |
| 4660 |
break; |
4662 |
break; |
| 4661 |
} |
4663 |
} |
|
|
4664 |
#ifdef CONFIG_XRANDR |
| 4662 |
if (ps->randr_exists && ev->type == (ps->randr_event + RRScreenChangeNotify)) { |
4665 |
if (ps->randr_exists && ev->type == (ps->randr_event + RRScreenChangeNotify)) { |
| 4663 |
ev_screen_change_notify(ps, (XRRScreenChangeNotifyEvent *) ev); |
4666 |
ev_screen_change_notify(ps, (XRRScreenChangeNotifyEvent *) ev); |
| 4664 |
break; |
4667 |
break; |
| 4665 |
} |
4668 |
} |
|
|
4669 |
#endif // CONFIG_XRANDR |
| 4666 |
if (isdamagenotify(ps, ev)) { |
4670 |
if (isdamagenotify(ps, ev)) { |
| 4667 |
ev_damage_notify(ps, (XDamageNotifyEvent *) ev); |
4671 |
ev_damage_notify(ps, (XDamageNotifyEvent *) ev); |
| 4668 |
break; |
4672 |
break; |
|
Lines 4762-4770
usage(int ret) {
Link Here
|
| 4762 |
" Detect _NET_WM_OPACITY on client windows, useful for window\n" |
4766 |
" Detect _NET_WM_OPACITY on client windows, useful for window\n" |
| 4763 |
" managers not passing _NET_WM_OPACITY of client windows to frame\n" |
4767 |
" managers not passing _NET_WM_OPACITY of client windows to frame\n" |
| 4764 |
" windows.\n" |
4768 |
" windows.\n" |
|
|
4769 |
#ifndef CONFIG_XRANDR |
| 4770 |
#define WARNING " (AUTODETECTION DISABLED AT COMPILE TIME)" |
| 4771 |
#else |
| 4772 |
#define WARNING |
| 4773 |
#endif |
| 4765 |
"--refresh-rate val\n" |
4774 |
"--refresh-rate val\n" |
| 4766 |
" Specify refresh rate of the screen. If not specified or 0, compton\n" |
4775 |
" Specify refresh rate of the screen. If not specified or 0, compton\n" |
| 4767 |
" will try detecting this with X RandR extension.\n" |
4776 |
" will try detecting this with X RandR extension."WARNING"\n" |
| 4768 |
"--vsync vsync-method\n" |
4777 |
"--vsync vsync-method\n" |
| 4769 |
" Set VSync method. There are up to 4 VSync methods currently available.\n" |
4778 |
" Set VSync method. There are up to 4 VSync methods currently available.\n" |
| 4770 |
" none = No VSync\n" |
4779 |
" none = No VSync\n" |
|
Lines 6259-6282
init_atoms(session_t *ps) {
Link Here
|
| 6259 |
ps->atom_win_type_tde_transparent_to_desktop = get_atom(ps, "_TDE_TRANSPARENT_TO_DESKTOP"); |
6268 |
ps->atom_win_type_tde_transparent_to_desktop = get_atom(ps, "_TDE_TRANSPARENT_TO_DESKTOP"); |
| 6260 |
} |
6269 |
} |
| 6261 |
|
6270 |
|
|
|
6271 |
#ifdef CONFIG_XRANDR |
| 6262 |
/** |
6272 |
/** |
| 6263 |
* Update refresh rate info with X Randr extension. |
6273 |
* Update refresh rate info with X Randr extension. |
| 6264 |
*/ |
6274 |
*/ |
| 6265 |
static void |
6275 |
static void |
| 6266 |
update_refresh_rate(session_t *ps) { |
6276 |
update_refresh_rate(session_t *ps) { |
| 6267 |
XRRScreenConfiguration* randr_info; |
6277 |
XRRScreenConfiguration* randr_info; |
| 6268 |
|
6278 |
|
| 6269 |
if (!(randr_info = XRRGetScreenInfo(ps->dpy, ps->root))) |
6279 |
if (!(randr_info = XRRGetScreenInfo(ps->dpy, ps->root))) |
| 6270 |
return; |
6280 |
return; |
| 6271 |
ps->refresh_rate = XRRConfigCurrentRate(randr_info); |
6281 |
ps->refresh_rate = XRRConfigCurrentRate(randr_info); |
| 6272 |
|
6282 |
|
| 6273 |
XRRFreeScreenConfigInfo(randr_info); |
6283 |
XRRFreeScreenConfigInfo(randr_info); |
| 6274 |
|
6284 |
|
| 6275 |
if (ps->refresh_rate) |
6285 |
if (ps->refresh_rate) |
| 6276 |
ps->refresh_intv = US_PER_SEC / ps->refresh_rate; |
6286 |
ps->refresh_intv = US_PER_SEC / ps->refresh_rate; |
| 6277 |
else |
6287 |
else |
| 6278 |
ps->refresh_intv = 0; |
6288 |
ps->refresh_intv = 0; |
| 6279 |
} |
6289 |
} |
|
|
6290 |
#endif // CONFIG_XRANDR |
| 6280 |
|
6291 |
|
| 6281 |
/** |
6292 |
/** |
| 6282 |
* Initialize refresh-rated based software optimization. |
6293 |
* Initialize refresh-rated based software optimization. |
|
Lines 6291-6300
swopti_init(session_t *ps) {
Link Here
|
| 6291 |
if (ps->refresh_rate) |
6302 |
if (ps->refresh_rate) |
| 6292 |
ps->refresh_intv = US_PER_SEC / ps->refresh_rate; |
6303 |
ps->refresh_intv = US_PER_SEC / ps->refresh_rate; |
| 6293 |
|
6304 |
|
|
|
6305 |
#ifdef CONFIG_XRANDR |
| 6294 |
// Auto-detect refresh rate otherwise |
6306 |
// Auto-detect refresh rate otherwise |
| 6295 |
if (!ps->refresh_rate && ps->randr_exists) { |
6307 |
if (!ps->refresh_rate && ps->randr_exists) { |
| 6296 |
update_refresh_rate(ps); |
6308 |
update_refresh_rate(ps); |
| 6297 |
} |
6309 |
} |
|
|
6310 |
#endif // CONFIG_XRANDR |
| 6298 |
|
6311 |
|
| 6299 |
// Turn off vsync_sw if we can't get the refresh rate |
6312 |
// Turn off vsync_sw if we can't get the refresh rate |
| 6300 |
if (!ps->refresh_rate) |
6313 |
if (!ps->refresh_rate) |
|
Lines 7196-7204
session_init(session_t *ps_old, int argc, char **argv) {
Link Here
|
| 7196 |
.shape_exists = false, |
7209 |
.shape_exists = false, |
| 7197 |
.shape_event = 0, |
7210 |
.shape_event = 0, |
| 7198 |
.shape_error = 0, |
7211 |
.shape_error = 0, |
|
|
7212 |
#ifdef CONFIG_XRANDR |
| 7199 |
.randr_exists = 0, |
7213 |
.randr_exists = 0, |
| 7200 |
.randr_event = 0, |
7214 |
.randr_event = 0, |
| 7201 |
.randr_error = 0, |
7215 |
.randr_error = 0, |
|
|
7216 |
#endif // CONFIG_XRANDR |
| 7202 |
#ifdef CONFIG_VSYNC_OPENGL |
7217 |
#ifdef CONFIG_VSYNC_OPENGL |
| 7203 |
.glx_exists = false, |
7218 |
.glx_exists = false, |
| 7204 |
.glx_event = 0, |
7219 |
.glx_event = 0, |
|
Lines 7371-7381
session_init(session_t *ps_old, int argc, char **argv) {
Link Here
|
| 7371 |
|
7386 |
|
| 7372 |
// Query X RandR |
7387 |
// Query X RandR |
| 7373 |
if ((ps->o.sw_opti && !ps->o.refresh_rate) || ps->o.xinerama_shadow_crop) { |
7388 |
if ((ps->o.sw_opti && !ps->o.refresh_rate) || ps->o.xinerama_shadow_crop) { |
| 7374 |
if (XRRQueryExtension(ps->dpy, &ps->randr_event, &ps->randr_error)) |
7389 |
#ifdef CONFIG_XRANDR |
| 7375 |
ps->randr_exists = true; |
7390 |
if (XRRQueryExtension(ps->dpy, &ps->randr_event, &ps->randr_error)) |
| 7376 |
else |
7391 |
ps->randr_exists = true; |
| 7377 |
printf_errf("(): No XRandR extension, automatic screen change " |
7392 |
else |
| 7378 |
"detection impossible."); |
7393 |
printf_errf("(): No XRandR extension, automatic screen change " |
|
|
7394 |
"detection impossible."); |
| 7395 |
#else // CONFIG_XRANDR |
| 7396 |
printf_errf("(): Xrandr support not compiled in."); |
| 7397 |
#endif // CONFIG_XRANDR |
| 7379 |
} |
7398 |
} |
| 7380 |
|
7399 |
|
| 7381 |
// Query X DBE extension |
7400 |
// Query X DBE extension |
|
Lines 7435-7445
session_init(session_t *ps_old, int argc, char **argv) {
Link Here
|
| 7435 |
if (ps->o.sw_opti) |
7454 |
if (ps->o.sw_opti) |
| 7436 |
ps->o.sw_opti = swopti_init(ps); |
7455 |
ps->o.sw_opti = swopti_init(ps); |
| 7437 |
|
7456 |
|
|
|
7457 |
#ifdef CONFIG_XRANDR |
| 7438 |
// Monitor screen changes if vsync_sw is enabled and we are using |
7458 |
// Monitor screen changes if vsync_sw is enabled and we are using |
| 7439 |
// an auto-detected refresh rate, or when Xinerama features are enabled |
7459 |
// an auto-detected refresh rate, or when Xinerama features are enabled |
| 7440 |
if (ps->randr_exists && ((ps->o.sw_opti && !ps->o.refresh_rate) |
7460 |
if (ps->randr_exists && ((ps->o.sw_opti && !ps->o.refresh_rate) |
| 7441 |
|| ps->o.xinerama_shadow_crop)) |
7461 |
|| ps->o.xinerama_shadow_crop)) |
| 7442 |
XRRSelectInput(ps->dpy, ps->root, RRScreenChangeNotifyMask); |
7462 |
XRRSelectInput(ps->dpy, ps->root, RRScreenChangeNotifyMask); |
|
|
7463 |
#else |
| 7464 |
if( (ps->o.sw_opti && !ps->o.refresh_rate) ) { |
| 7465 |
printf_errf("(): Xrandr support not compiled in. Plese specify --refrash-rate manually"); |
| 7466 |
} |
| 7467 |
if (ps->o.xinerama_shadow_crop) { |
| 7468 |
printf_errf("(): due to Xrandr support not compiled in." |
| 7469 |
" Xinerama features may malfunction on changing screen size."); |
| 7470 |
} |
| 7471 |
#endif // CONFIG_XRANDR |
| 7443 |
|
7472 |
|
| 7444 |
// Initialize VSync |
7473 |
// Initialize VSync |
| 7445 |
if (!vsync_init(ps)) |
7474 |
if (!vsync_init(ps)) |