48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
#define HOOK_NAME "property"
 | 
						|
 | 
						|
#include <dix-config.h>
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
#include "dix/dix_priv.h"
 | 
						|
#include "dix/registry_priv.h"
 | 
						|
#include "include/propertyst.h"
 | 
						|
#include "Xext/xacestr.h"
 | 
						|
 | 
						|
#include "namespace.h"
 | 
						|
#include "hooks.h"
 | 
						|
 | 
						|
static inline Bool winIsRoot(WindowPtr pWin) {
 | 
						|
    if (!pWin)
 | 
						|
        return FALSE;
 | 
						|
    if (pWin->drawable.pScreen->root == pWin)
 | 
						|
        return TRUE;
 | 
						|
    return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
void hookPropertyAccess(CallbackListPtr *pcbl, void *unused, void *calldata)
 | 
						|
{
 | 
						|
    XNS_HOOK_HEAD(XacePropertyAccessRec);
 | 
						|
    struct XnamespaceClientPriv *obj = XnsClientPriv(dixClientForWindow(param->pWin));
 | 
						|
 | 
						|
    ATOM name = (*param->ppProp)->propertyName;
 | 
						|
 | 
						|
    if (XnsClientSameNS(subj, obj))
 | 
						|
        return;
 | 
						|
 | 
						|
    if (param->pWin == subj->ns->rootWindow)
 | 
						|
        return;
 | 
						|
 | 
						|
    if (winIsRoot(param->pWin)) {
 | 
						|
        XNS_HOOK_LOG("window is the screen's root window\n");
 | 
						|
    } else {
 | 
						|
        XNS_HOOK_LOG("not a root window\n");
 | 
						|
    }
 | 
						|
 | 
						|
    XNS_HOOK_LOG("access to property %s (atom 0x%x) window 0x%lx of client %d\n",
 | 
						|
        NameForAtom(name),
 | 
						|
        name,
 | 
						|
        (unsigned long)param->pWin->drawable.id,
 | 
						|
        dixClientForWindow(param->pWin)->index);
 | 
						|
}
 |