• Mike Gabriel's avatar
    Clear header file namespace separation (<X11/...> vs. <nx-X11/...>). · 433d8186
    Mike Gabriel authored
     In the process of building nxagent against more and more system-wide installed
     X.org libraries, we come to the limit of including structs from this (bundled
     nx-X11) and that (system-wide X.Org) library.
    
     This commit introduces a clear namespace separation of headers provided by
     nx-X11 and headers provided by X.Org. This approach is only temporary as we
     want to drop all nx-X11 bundled libraries from nx-libs.
    
     However, for a while we need to make this separation clear and also ship
     some reduced fake X.Org headers that avoid pulling in libX* and libNX_X*
     symbols at the same time.
    
     This patch has been tested on Debian jessie and unstable and requires no
     overall testing on various distros and distro versions, as we finally will
     drop all libNX_X* libraries and build against X.org's client libs.
    
     For now, this hack eases our development / cleanup process.
    433d8186
Shadow.h 3.37 KB
/**************************************************************************/
/*                                                                        */
/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/.         */
/*                                                                        */
/* NXCOMPSHAD, NX protocol compression and NX extensions to this software */
/* are copyright of NoMachine. Redistribution and use of the present      */
/* software is allowed according to terms specified in the file LICENSE   */
/* which comes in the source distribution.                                */
/*                                                                        */
/* Check http://www.nomachine.com/licensing.html for applicability.       */
/*                                                                        */
/* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
/*                                                                        */
/* All rights reserved.                                                   */
/*                                                                        */
/**************************************************************************/

#ifndef Shadow_H
#define Shadow_H

#include <nx-X11/Xlib.h>

#define NXShadowCorrectColor(length, buffer) \
\
{ \
  unsigned short a; \
  unsigned short b; \
  unsigned short *shorts; \
  int i; \
\
  length >>= 1; \
  shorts = (unsigned short *)buffer; \
  for (i = 0; i < length ; i++) \
  { \
    a = shorts[i]; \
\
    b = a & 63; \
    a <<= 1; \
    a = (a & ~127) | b; \
\
    shorts[i] = a; \
  } \
}

#ifdef __cplusplus
extern "C" {
#endif

typedef char* UpdaterHandle;

typedef struct _ShadowOptions
{
  char  optionShmExtension;
  char  optionDamageExtension;
  int   optionShadowDisplayUid;
} ShadowOptions;

extern ShadowOptions NXShadowOptions;

extern int           NXShadowCreate(void *, char *, char *, void **);
extern void          NXShadowDestroy(void);

/*
 * Use an already opened Display connection.
 * We use <void *> instead of <Display *> to avoid
 * useless dependences from Xlib headers.
 */

extern int NXShadowAddUpdaterDisplay(void *display, int *width, int *height,
                                         unsigned char *depth);
extern UpdaterHandle NXShadowAddUpdater(char *displayName);
extern int           NXShadowRemoveUpdater(UpdaterHandle handle);
extern int           NXShadowRemoveAllUpdaters(void);

extern void          NXShadowHandleInput(void);
extern int           NXShadowHasChanged(int (*)(void *), void *, int *);
extern void          NXShadowExportChanges(long *, char **);
extern int           NXShadowHasUpdaters(void);
extern int           NXShadowCaptureCursor(unsigned int wnd, void *vis);
extern void          NXShadowColorCorrect(int, int, unsigned int, unsigned int, char *);
extern void          NXShadowUpdateBuffer(void **);

extern void          NXShadowEvent(Display *, XEvent);
extern void          NXShadowWebKeyEvent(KeySym keysym, Bool isKeyPress);

extern void          NXShadowSetDisplayUid(int uid);

extern void          NXShadowDisableShm(void);
extern void          NXShadowDisableDamage(void);

extern void          NXShadowGetScreenSize(int *width, int *height);
extern void          NXShadowSetScreenSize(int *width, int *height);

extern void          NXShadowInitKeymap(void *keysyms);

#ifdef __cplusplus
}
#endif

#endif /* Shadow_H */