}
private void setWindowShape(final Window w, final PixmapSource src) {
Runnable action = new Runnable() {
public void run() {
X11 x11 = X11.INSTANCE;
Display dpy = x11.XOpenDisplay(null);
if (dpy == null) {
return;
}
Pixmap pm = null;
try {
X11.Window win = getDrawable(w);
pm = src.getPixmap(dpy, win);
Xext ext = Xext.INSTANCE;
ext.XShapeCombineMask(dpy, win, X11.Xext.ShapeBounding,
0, 0, pm == null ? Pixmap.None : pm,
X11.Xext.ShapeSet);
}
finally {
if (pm != null) {
x11.XFreePixmap(dpy, pm);
}
x11.XCloseDisplay(dpy);
}
setForceHeavyweightPopups(getWindow(w), pm != null);
}
};
whenDisplayable(w, action);