static Bool
titleinfoInitWindow (CompPlugin *p,
		     CompWindow *w)
{
    TitleinfoWindow *tw;

    TITLEINFO_SCREEN (w->screen);

    tw = malloc (sizeof (TitleinfoWindow));
    if (!tw)
	return FALSE;

    tw->remoteMachine = NULL;
    tw->title         = NULL;
    tw->owner         = -1;

    w->base.privates[ts->windowPrivateIndex].ptr = tw;

    titleinfoUpdateTitle (w);
    titleinfoUpdateMachine (w);
    titleinfoUpdatePid (w);
    titleinfoUpdateVisibleName (w);

    return TRUE;
}
static void titleinfoFiniScreen(CompPlugin * p, CompScreen * s)
{
	TITLEINFO_SCREEN(s);

	UNWRAP(ts, s, addSupportedAtoms);

	freeWindowPrivateIndex(s, ts->windowPrivateIndex);

	free(ts);
}
static unsigned int
titleinfoAddSupportedAtoms(CompScreen * s, Atom * atoms, unsigned int size)
{
	unsigned int count;

	TITLEINFO_DISPLAY(s->display);
	TITLEINFO_SCREEN(s);

	UNWRAP(ts, s, addSupportedAtoms);
	count = (*s->addSupportedAtoms) (s, atoms, size);
	WRAP(ts, s, addSupportedAtoms, titleinfoAddSupportedAtoms);

	if ((size - count) >= 2) {
		atoms[count++] = td->visibleNameAtom;
		atoms[count++] = td->wmPidAtom;
	}

	return count;
}