83 lines
2.0 KiB
C
83 lines
2.0 KiB
C
#ifndef __XSERVER_NAMESPACE_H
|
|
#define __XSERVER_NAMESPACE_H
|
|
|
|
#include <stdio.h>
|
|
#include <X11/Xmd.h>
|
|
|
|
#include "include/dixstruct.h"
|
|
#include "include/list.h"
|
|
#include "include/privates.h"
|
|
#include "include/window.h"
|
|
#include "include/windowstr.h"
|
|
|
|
struct auth_token {
|
|
struct xorg_list entry;
|
|
const char *authProto;
|
|
char *authTokenData;
|
|
size_t authTokenLen;
|
|
XID authId;
|
|
};
|
|
|
|
struct Xnamespace {
|
|
struct xorg_list entry;
|
|
const char *name;
|
|
Bool builtin;
|
|
Bool allowMouseMotion;
|
|
Bool allowShape;
|
|
Bool allowTransparency;
|
|
Bool allowXInput;
|
|
Bool allowXKeyboard;
|
|
Bool superPower;
|
|
struct xorg_list auth_tokens;
|
|
size_t refcnt;
|
|
WindowPtr rootWindow;
|
|
};
|
|
|
|
extern struct xorg_list ns_list;
|
|
extern struct Xnamespace ns_root;
|
|
extern struct Xnamespace ns_anon;
|
|
|
|
struct XnamespaceClientPriv {
|
|
Bool isServer;
|
|
XID authId;
|
|
struct Xnamespace* ns;
|
|
};
|
|
|
|
#define NS_NAME_ROOT "root"
|
|
#define NS_NAME_ANONYMOUS "anon"
|
|
|
|
extern DevPrivateKeyRec namespaceClientPrivKeyRec;
|
|
|
|
Bool XnsLoadConfig(void);
|
|
struct Xnamespace *XnsFindByName(const char* name);
|
|
struct Xnamespace* XnsFindByAuth(size_t szAuthProto, const char* authProto, size_t szAuthToken, const char* authToken);
|
|
void XnamespaceAssignClient(struct XnamespaceClientPriv *priv, struct Xnamespace *ns);
|
|
void XnamespaceAssignClientByName(struct XnamespaceClientPriv *priv, const char *name);
|
|
|
|
static inline struct XnamespaceClientPriv *XnsClientPriv(ClientPtr client) {
|
|
if (client == NULL) return NULL;
|
|
return dixLookupPrivate(&client->devPrivates, &namespaceClientPrivKeyRec);
|
|
}
|
|
|
|
static inline Bool XnsClientSameNS(struct XnamespaceClientPriv *p1, struct XnamespaceClientPriv *p2)
|
|
{
|
|
if (!p1 && !p2)
|
|
return TRUE;
|
|
if (!p1 || !p2)
|
|
return FALSE;
|
|
return (p1->ns == p2->ns);
|
|
}
|
|
|
|
#define XNS_LOG(...) do { printf("XNS "); printf(__VA_ARGS__); } while (0)
|
|
|
|
static inline Bool streq(const char *a, const char *b)
|
|
{
|
|
if (!a && !b)
|
|
return TRUE;
|
|
if (!a || !b)
|
|
return FALSE;
|
|
return (strcmp(a,b) == 0);
|
|
}
|
|
|
|
#endif /* __XSERVER_NAMESPACE_H */
|