Example #1
0
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);

}
Example #4
0
void 
compzillaWindow::UnredirectWindow ()
{
    if (!mIsRedirected)
        return;

    ReleaseWindow ();

    XCompositeUnredirectWindow (mDisplay, mWindow, CompositeRedirectManual);
    mIsRedirected = false;
}
Example #5
0
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);
}
Example #7
0
void X11Support::unredirectWindow(unsigned long window)
{
	XCompositeUnredirectWindow(QX11Info::display(), window, CompositeRedirectManual);
}
Example #8
0
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(&params, "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(&params);

	return ret;
}