Bug fix: Window rendered incorrectly if has no border with -e

- Fix a bug that window content and some borders are not rendered if the
  window has no border on particular sides when -e (frame-opacity) is
  enabled, introduced in 66d3f30978. Just as what I said in the commit
  message of the commit, "bugs are to be expected". :-S

- Fix a potential segfault in win_match().

- Slightly update CPackConfig.cmake to add dependency to libdrm.
pull/2/head
Richard Grenville 12 years ago
parent fe5537df9e
commit 798c631e2b

@ -866,7 +866,8 @@ win_match(win *w, wincond *condlst, wincond **cache) {
// Then go through the whole linked list
for (; condlst; condlst = condlst->next) {
if (win_match_once(w, condlst)) {
*cache = condlst;
if (cache)
*cache = condlst;
return true;
}
}
@ -1583,42 +1584,41 @@ win_paint_win(Display *dpy, win *w, Picture tgt_buffer) {
XRenderComposite(dpy, PictOpOver, w->picture, w->frame_alpha_pict, \
tgt_buffer, (cx), (cy), 0, 0, x + (cx), y + (cy), (cwid), (chei))
// The following complicated logic is requried because some broken
// The following complicated logic is required because some broken
// window managers (I'm talking about you, Openbox!) that makes
// top_width + bottom_width > height in some cases.
// top
COMP_BDR(0, 0, wid, min_i(t, hei));
int phei = min_i(t, hei);
if (phei > 0)
COMP_BDR(0, 0, wid, phei);
if (hei > t) {
int phei = min_i(hei - t, b);
phei = min_i(hei - t, b);
// bottom
if (phei) {
assert(phei > 0);
if (phei > 0)
COMP_BDR(0, hei - phei, wid, phei);
phei = hei - t - phei;
if (phei) {
assert(phei > 0);
// left
COMP_BDR(0, t, min_i(l, wid), phei);
if (wid > l) {
int pwid = min_i(wid - l, r);
if (pwid) {
assert(pwid > 0);
// right
COMP_BDR(wid - pwid, t, pwid, phei);
pwid = wid - l - pwid;
if (pwid)
assert(pwid > 0);
// body
XRenderComposite(dpy, op, w->picture, alpha_mask,
tgt_buffer, l, t, 0, 0, x + l, y + t, pwid, phei);
}
phei = hei - t - phei;
if (phei > 0) {
int pwid = min_i(l, wid);
// left
if (pwid > 0)
COMP_BDR(0, t, pwid, phei);
if (wid > l) {
pwid = min_i(wid - l, r);
// right
if (pwid > 0)
COMP_BDR(wid - pwid, t, pwid, phei);
pwid = wid - l - pwid;
if (pwid > 0) {
// body
XRenderComposite(dpy, op, w->picture, alpha_mask,
tgt_buffer, l, t, 0, 0, x + l, y + t, pwid, phei);
}
}
}

Loading…
Cancel
Save