mirror of
https://github.com/yshui/picom.git
synced 2024-11-11 13:51:02 -05:00
ignore override_redirect windows for XSelectInput and get_frame_extents calls
This commit is contained in:
parent
a6afff2c4a
commit
01e978a512
1 changed files with 17 additions and 10 deletions
23
compton.c
23
compton.c
|
@ -1425,7 +1425,8 @@ configure_win(Display *dpy, XConfigureEvent *ce);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
map_win(Display *dpy, Window id,
|
map_win(Display *dpy, Window id,
|
||||||
unsigned long sequence, Bool fade) {
|
unsigned long sequence, Bool fade,
|
||||||
|
Bool override_redirect) {
|
||||||
win *w = find_win(dpy, id);
|
win *w = find_win(dpy, id);
|
||||||
|
|
||||||
if (!w) return;
|
if (!w) return;
|
||||||
|
@ -1440,6 +1441,7 @@ map_win(Display *dpy, Window id,
|
||||||
|
|
||||||
/* select before reading the property
|
/* select before reading the property
|
||||||
so that no property changes are lost */
|
so that no property changes are lost */
|
||||||
|
if (!override_redirect)
|
||||||
XSelectInput(dpy, id, PropertyChangeMask | FocusChangeMask);
|
XSelectInput(dpy, id, PropertyChangeMask | FocusChangeMask);
|
||||||
|
|
||||||
// this causes problems for inactive transparency
|
// this causes problems for inactive transparency
|
||||||
|
@ -1654,7 +1656,7 @@ set_opacity(Display *dpy, win *w, unsigned long opacity) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_win(Display *dpy, Window id, Window prev) {
|
add_win(Display *dpy, Window id, Window prev, Bool override_redirect) {
|
||||||
win *new = malloc(sizeof(win));
|
win *new = malloc(sizeof(win));
|
||||||
win **p;
|
win **p;
|
||||||
|
|
||||||
|
@ -1717,6 +1719,7 @@ add_win(Display *dpy, Window id, Window prev) {
|
||||||
new->top_width = 0;
|
new->top_width = 0;
|
||||||
new->bottom_width = 0;
|
new->bottom_width = 0;
|
||||||
|
|
||||||
|
if (!override_redirect)
|
||||||
get_frame_extents(dpy, id,
|
get_frame_extents(dpy, id,
|
||||||
&new->left_width, &new->right_width,
|
&new->left_width, &new->right_width,
|
||||||
&new->top_width, &new->bottom_width);
|
&new->top_width, &new->bottom_width);
|
||||||
|
@ -1729,7 +1732,7 @@ add_win(Display *dpy, Window id, Window prev) {
|
||||||
if (inactive_opacity && IS_NORMAL_WIN(new)) {
|
if (inactive_opacity && IS_NORMAL_WIN(new)) {
|
||||||
new->opacity = INACTIVE_OPACITY;
|
new->opacity = INACTIVE_OPACITY;
|
||||||
}
|
}
|
||||||
map_win(dpy, id, new->damage_sequence - 1, True);
|
map_win(dpy, id, new->damage_sequence - 1, True, override_redirect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2433,7 +2436,7 @@ main(int argc, char **argv) {
|
||||||
&parent_return, &children, &nchildren);
|
&parent_return, &children, &nchildren);
|
||||||
|
|
||||||
for (i = 0; i < nchildren; i++) {
|
for (i = 0; i < nchildren; i++) {
|
||||||
add_win(dpy, children[i], i ? children[i-1] : None);
|
add_win(dpy, children[i], i ? children[i-1] : None, False);
|
||||||
}
|
}
|
||||||
|
|
||||||
XFree(children);
|
XFree(children);
|
||||||
|
@ -2462,8 +2465,10 @@ main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG_EVENTS
|
#if DEBUG_EVENTS
|
||||||
|
if (ev.type != damage_event + XDamageNotify) {
|
||||||
printf("event %10.10s serial 0x%08x window 0x%08x\n",
|
printf("event %10.10s serial 0x%08x window 0x%08x\n",
|
||||||
ev_name(&ev), ev_serial(&ev), ev_window(&ev));
|
ev_name(&ev), ev_serial(&ev), ev_window(&ev));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (ev.type) {
|
switch (ev.type) {
|
||||||
|
@ -2498,8 +2503,8 @@ main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CreateNotify:
|
case CreateNotify:
|
||||||
//if (ev.xcreatewindow.override_redirect) break;
|
add_win(dpy, ev.xcreatewindow.window, 0,
|
||||||
add_win(dpy, ev.xcreatewindow.window, 0);
|
ev.xcreatewindow.override_redirect);
|
||||||
break;
|
break;
|
||||||
case ConfigureNotify:
|
case ConfigureNotify:
|
||||||
configure_win(dpy, &ev.xconfigure);
|
configure_win(dpy, &ev.xconfigure);
|
||||||
|
@ -2508,14 +2513,16 @@ main(int argc, char **argv) {
|
||||||
destroy_win(dpy, ev.xdestroywindow.window, True);
|
destroy_win(dpy, ev.xdestroywindow.window, True);
|
||||||
break;
|
break;
|
||||||
case MapNotify:
|
case MapNotify:
|
||||||
map_win(dpy, ev.xmap.window, ev.xmap.serial, True);
|
map_win(dpy, ev.xmap.window, ev.xmap.serial, True,
|
||||||
|
ev.xmap.override_redirect);
|
||||||
break;
|
break;
|
||||||
case UnmapNotify:
|
case UnmapNotify:
|
||||||
unmap_win(dpy, ev.xunmap.window, True);
|
unmap_win(dpy, ev.xunmap.window, True);
|
||||||
break;
|
break;
|
||||||
case ReparentNotify:
|
case ReparentNotify:
|
||||||
if (ev.xreparent.parent == root) {
|
if (ev.xreparent.parent == root) {
|
||||||
add_win(dpy, ev.xreparent.window, 0);
|
add_win(dpy, ev.xreparent.window, 0,
|
||||||
|
ev.xreparent.override_redirect);
|
||||||
} else {
|
} else {
|
||||||
destroy_win(dpy, ev.xreparent.window, True);
|
destroy_win(dpy, ev.xreparent.window, True);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue