void clientwin_destroy(ClientWin *cw, bool destroyed) { MainWin *mw = cw->mainwin; session_t * const ps = mw->ps; free_picture(ps, &cw->origin); free_picture(ps, &cw->destination); free_pixmap(ps, &cw->pixmap); free_pixmap(ps, &cw->cpixmap); if (cw->src.window && !destroyed) { free_damage(ps, &cw->damage); // Stop listening to events, this should be safe because we don't // monitor window re-map anyway XSelectInput(ps->dpy, cw->src.window, 0); if (cw->redirected) XCompositeUnredirectWindow(ps->dpy, cw->src.window, CompositeRedirectAutomatic); } if (cw->mini.window) { // Somehow it doesn't work without unmapping firstly XUnmapWindow(ps->dpy, cw->mini.window); XDestroyWindow(ps->dpy, cw->mini.window); } free(cw); }
static void xcc_cleanup(XCompcapMain_private *p) { PLock lock(&p->lock); XDisplayLock xlock; if (p->gltex) { gs_texture_destroy(p->gltex); p->gltex = 0; } if (p->glxpixmap) { glXDestroyPixmap(xdisp, p->glxpixmap); p->glxpixmap = 0; } if (p->pixmap) { XFreePixmap(xdisp, p->pixmap); p->pixmap = 0; } if (p->win) { XCompositeUnredirectWindow(xdisp, p->win, CompositeRedirectAutomatic); XSelectInput(xdisp, p->win, 0); p->win = 0; } }
static void hd_panel_window_dialog_unrealize (GtkWidget *widget) { XCompositeUnredirectWindow (GDK_DISPLAY (), GDK_WINDOW_XID (widget->window), CompositeRedirectAutomatic); GTK_WIDGET_CLASS (hd_panel_window_dialog_parent_class)->unrealize (widget); }
void compzillaWindow::UnredirectWindow () { if (!mIsRedirected) return; ReleaseWindow (); XCompositeUnredirectWindow (mDisplay, mWindow, CompositeRedirectManual); mIsRedirected = false; }
void CompositeWindow::unredirect () { if (!priv->redirected || !priv->cScreen->compositingActive ()) return; release (); priv->redirected = false; priv->overlayWindow = true; priv->cScreen->overlayWindowCount ()++; if (priv->cScreen->overlayWindowCount () > 0) priv->cScreen->updateOutputWindow (); XCompositeUnredirectWindow (screen->dpy (), ROOTPARENT (priv->window), CompositeRedirectManual); }
static void sync_unredirected (MetaSurfaceActorX11 *self) { MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); MetaDisplay *display = priv->display; Display *xdisplay = meta_display_get_xdisplay (display); Window xwindow = meta_window_x11_get_toplevel_xwindow (priv->window); meta_error_trap_push (display); if (priv->unredirected) { detach_pixmap (self); XCompositeUnredirectWindow (xdisplay, xwindow, CompositeRedirectManual); } else { XCompositeRedirectWindow (xdisplay, xwindow, CompositeRedirectManual); } meta_error_trap_pop (display); }
void X11Support::unredirectWindow(unsigned long window) { XCompositeUnredirectWindow(QX11Info::display(), window, CompositeRedirectManual); }
int xcomposite_get_widow_contents() { int ret = 0; int ver, rev, eventB, baseB; int x, y; Pixmap pxm = 0; window_struct params; if(create_window(¶ms, "Test Window")) { ret = -1; goto cleanup; } if(!XCompositeQueryExtension(params.display, &eventB, &baseB)) { BLTS_ERROR("XCompositeQueryExtension failed\n"); ret = -1; goto cleanup; } if(!XCompositeQueryVersion(params.display, &ver, &rev)) { BLTS_ERROR("XCompositeQueryVersion failed\n"); ret = -1; goto cleanup; } BLTS_DEBUG("XComposite Extension version %i.%i\n", ver, rev); /* Redirect window to off-screen storage (the window might be already redirected when using composite window manager) */ XCompositeRedirectWindow(params.display, params.window, 0); /* Draw rectangle pattern */ for(x = 0; x < params.window_attributes.width; x+=20) { for(y = 0; y < params.window_attributes.height; y+=20) { XFillRectangle(params.display, params.window, params.gc, x, y, 10, 10); } } XFlush(params.display); sleep(1); /* Get pixmap of window contents */ pxm = XCompositeNameWindowPixmap(params.display, params.window); XCompositeUnredirectWindow(params.display, params.window, 0); /* Copy the pixmap over the window (you should see white/black stripes * after this) */ for(y = 0; y < params.window_attributes.height; y++) { XCopyArea(params.display, pxm, params.window, params.gc, 0, 0, params.window_attributes.width, params.window_attributes.height, 0, y ); } XFlush(params.display); sleep(1); cleanup: if(params.display && pxm) { XFreePixmap(params.display, pxm); } close_window(¶ms); return ret; }