summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2004-01-20 08:56:41 +0000
committerSergey Udaltsov <svu@gnome.org>2004-01-20 08:56:41 +0000
commit21b25ac93553d1a8e4a94607875bd99b016d4a71 (patch)
treefa905c4b6ba115d5fd17c146eb7023e9d9f0e1bd
parentab2c2908cc9605d2810cd2e56011e114d02fff7f (diff)
downloadlibxklavier-21b25ac93553d1a8e4a94607875bd99b016d4a71.tar.gz
Trying to make libxklavier buildable without xkb headers, first round
-rw-r--r--libxklavier/Makefile.am6
-rw-r--r--libxklavier/xklavier.h3
-rw-r--r--libxklavier/xklavier_config.h4
-rw-r--r--libxklavier/xklavier_config_xkb.c18
-rw-r--r--libxklavier/xklavier_dump.c6
-rw-r--r--libxklavier/xklavier_evt.c8
-rw-r--r--libxklavier/xklavier_private.h11
-rw-r--r--libxklavier/xklavier_private_xkb.h16
-rw-r--r--libxklavier/xklavier_props.c18
-rw-r--r--libxklavier/xklavier_xkb.c42
10 files changed, 113 insertions, 19 deletions
diff --git a/libxklavier/Makefile.am b/libxklavier/Makefile.am
index 49f65b7..c8a9dd8 100644
--- a/libxklavier/Makefile.am
+++ b/libxklavier/Makefile.am
@@ -1,4 +1,8 @@
-AM_CFLAGS = -DDATA_DIR=\"$(datadir)/$(PACKAGE)\" -I. -I$(includedir) $(XML_CFLAGS) -I$(x_includes) -I$(top_srcdir)
+if XKB_HEADERS_PRESENT
+ XKB_HEADERS_PRESENT_CFLAG = -DXKB_HEADERS_PRESENT=1
+endif
+
+AM_CFLAGS = -DDATA_DIR=\"$(datadir)/$(PACKAGE)\" -I. -I$(includedir) $(XML_CFLAGS) -I$(x_includes) -I$(top_srcdir) $(XKB_HEADERS_PRESENT_CFLAG)
lib_LTLIBRARIES = libxklavier.la
noinst_HEADERS = xklavier_private.h xklavier_private_xkb.h
diff --git a/libxklavier/xklavier.h b/libxklavier/xklavier.h
index 51fb087..487f260 100644
--- a/libxklavier/xklavier.h
+++ b/libxklavier/xklavier.h
@@ -8,7 +8,10 @@
#include <stdarg.h>
#include <X11/Xlib.h>
+
+#ifdef XKB_HEADERS_PRESENT
#include <X11/XKBlib.h>
+#endif
#ifdef __cplusplus
extern "C"
diff --git a/libxklavier/xklavier_config.h b/libxklavier/xklavier_config.h
index f59988b..15c3c85 100644
--- a/libxklavier/xklavier_config.h
+++ b/libxklavier/xklavier_config.h
@@ -31,6 +31,10 @@ extern "C"
{
#endif /* __cplusplus */
+#ifndef XKB_HEADERS_PRESENT
+ typedef void * XkbDescPtr;
+#endif
+
/**
* The configuration item. Corresponds to XML element "configItem".
*/
diff --git a/libxklavier/xklavier_config_xkb.c b/libxklavier/xklavier_config_xkb.c
index b9de6b5..8aa9e81 100644
--- a/libxklavier/xklavier_config_xkb.c
+++ b/libxklavier/xklavier_config_xkb.c
@@ -11,8 +11,10 @@
#include "xklavier_private_xkb.h"
+#ifdef XKB_HEADERS_PRESENT
#include <X11/extensions/XKBfile.h>
#include <X11/extensions/XKM.h>
+#endif
#define RULES_FILE "xfree86"
@@ -28,10 +30,13 @@
#define XK_XKB_KEYS
#include <X11/keysymdef.h>
+#ifdef XKB_HEADERS_PRESENT
XkbRF_VarDefsRec _xklVarDefs;
static XkbRF_RulesPtr rules;
static XkbComponentNamesRec componentNames;
+#endif
+
static char *locale;
Bool XklConfigLoadRegistry( void )
@@ -47,6 +52,7 @@ Bool XklConfigLoadRegistry( void )
static Bool _XklConfigPrepareBeforeKbd( const XklConfigRecPtr data )
{
+#ifdef XKB_HEADERS_PRESENT
memset( &_xklVarDefs, 0, sizeof( _xklVarDefs ) );
_xklVarDefs.model = ( char * ) data->model;
@@ -77,12 +83,13 @@ static Bool _XklConfigPrepareBeforeKbd( const XklConfigRecPtr data )
_xklLastErrorMsg = "Could not translate rules into components";
return False;
}
-
+#endif
return True;
}
static void _XklConfigCleanAfterKbd( )
{
+#ifdef XKB_HEADERS_PRESENT
XkbRF_Free( rules, True );
if( locale != NULL )
@@ -100,6 +107,7 @@ static void _XklConfigCleanAfterKbd( )
free( _xklVarDefs.options );
_xklVarDefs.options = NULL;
}
+#endif
}
static void _XklApplyFun2XkbDesc( XkbDescPtr xkb, XkbDescModifierFunc fun,
@@ -157,6 +165,7 @@ Bool XklConfigActivate( const XklConfigRecPtr data, XkbDescModifierFunc fun,
}
#endif
+#ifdef XKB_HEADERS_PRESENT
if( _XklConfigPrepareBeforeKbd( data ) )
{
XkbDescPtr xkb;
@@ -186,11 +195,13 @@ Bool XklConfigActivate( const XklConfigRecPtr data, XkbDescModifierFunc fun,
}
}
_XklConfigCleanAfterKbd( );
+#endif
return rv;
}
int XklSetKeyAsSwitcher( XkbDescPtr kbd, void *userData )
{
+#ifdef XKB_HEADERS_PRESENT
if( kbd != NULL )
{
XkbClientMapPtr map = kbd->map;
@@ -215,6 +226,9 @@ int XklSetKeyAsSwitcher( XkbDescPtr kbd, void *userData )
XklDebug( 160, "No client map in the keyboard description?\n" );
}
return XkbKeySymsMask | XkbKeyTypesMask | XkbKeyActionsMask;
+#else
+ return 0;
+#endif
}
Bool XklConfigWriteXKMFile( const char *fileName, const XklConfigRecPtr data,
@@ -222,6 +236,7 @@ Bool XklConfigWriteXKMFile( const char *fileName, const XklConfigRecPtr data,
{
Bool rv = False;
+#ifdef XKB_HEADERS_PRESENT
FILE *output = fopen( fileName, "w" );
XkbFileInfo dumpInfo;
@@ -253,5 +268,6 @@ Bool XklConfigWriteXKMFile( const char *fileName, const XklConfigRecPtr data,
}
_XklConfigCleanAfterKbd( );
fclose( output );
+#endif
return rv;
}
diff --git a/libxklavier/xklavier_dump.c b/libxklavier/xklavier_dump.c
index 70d345c..7d3b460 100644
--- a/libxklavier/xklavier_dump.c
+++ b/libxklavier/xklavier_dump.c
@@ -19,6 +19,7 @@
#include "xklavier_private.h"
#include "xklavier_private_xkb.h"
+#ifdef XKB_HEADERS_PRESENT
static void _XkbModsRecDump( FILE * fs, XkbModsRec * mods )
{
fprintf( fs, "flags: 0x%X\n", mods->mask );
@@ -234,9 +235,11 @@ static void _XkbClientMapDump( FILE * fs, int level, XkbClientMapPtr map,
} else
fprintf( fs, "%*sNO key_sym_map\n", level, "" );
}
+#endif
void _XkbDescDump( FILE * fs, int level, XkbDescPtr kbd )
{
+#ifdef XKB_HEADERS_PRESENT
fprintf( fs, "%*sflags: 0x%X\n", level, "", kbd->flags );
fprintf( fs, "%*sdevice_spec: %d\n", level, "", kbd->device_spec );
fprintf( fs, "%*smin_key_code: %d\n", level, "", kbd->min_key_code );
@@ -262,6 +265,9 @@ void _XkbDescDump( FILE * fs, int level, XkbDescPtr kbd )
_XkbClientMapDump( fs, level + 2, kbd->map, kbd );
} else
fprintf( fs, "%*sNO map\n", level, "" );
+#else
+ fprintf( fs, "XKB libraries not present\n" );
+#endif
}
void XklDumpXkbDesc( const char *filename, XkbDescPtr kbd )
diff --git a/libxklavier/xklavier_evt.c b/libxklavier/xklavier_evt.c
index cf492a6..f5868f5 100644
--- a/libxklavier/xklavier_evt.c
+++ b/libxklavier/xklavier_evt.c
@@ -13,10 +13,12 @@ int XklFilterEvents( XEvent * xev )
XAnyEvent *pe = ( XAnyEvent * ) xev;
XklDebug( 400, "**> Filtering event %d of type %d from window %d\n",
pe->serial, pe->type, pe->window );
+#ifdef XKB_HEADERS_PRESENT
if( xev->type == _xklXkbEventType )
{
_XklXkbEvHandler( ( XkbEvent * ) xev );
} else
+#endif
switch ( xev->type )
{ /* core events */
case FocusIn:
@@ -119,6 +121,7 @@ void _XklStdXkbHandler( int grp, XklStateChange changeType, unsigned inds,
_XklSaveAppState( _xklCurClient, &_xklCurState );
}
+#ifdef XKB_HEADERS_PRESENT
/**
* XKB event handler
*/
@@ -195,6 +198,7 @@ void _XklXkbEvHandler( XkbEvent * kev )
break;
}
}
+#endif
/**
* FocusIn handler
@@ -285,6 +289,7 @@ void _XklFocusInEvHandler( XFocusChangeEvent * fev )
}
}
+#ifdef XKB_HEADERS_PRESENT
if( XklGetIndicatorsHandling( ) )
{
int i;
@@ -306,6 +311,7 @@ void _XklFocusInEvHandler( XFocusChangeEvent * fev )
selectedWindowState.indicators & bit, status );
}
} else
+#endif
XklDebug( 150,
"Not restoring the indicators %X after gaining focus: indicator handling is not enabled\n",
_xklCurState.indicators );
@@ -411,6 +417,7 @@ void _XklPropertyEvHandler( XPropertyEvent * pev )
XklDelState( pev->window );
}
}
+#ifdef XKB_HEADERS_PRESENT
} else
if( pev->atom == _xklAtoms[XKB_RF_NAMES_PROP_ATOM]
&& pev->window == _xklRootWindow )
@@ -423,6 +430,7 @@ void _XklPropertyEvHandler( XPropertyEvent * pev )
_XklFreeAllInfo( );
_XklLoadAllInfo( );
}
+#endif
}
}
diff --git a/libxklavier/xklavier_private.h b/libxklavier/xklavier_private.h
index f158fa8..d0a894e 100644
--- a/libxklavier/xklavier_private.h
+++ b/libxklavier/xklavier_private.h
@@ -97,9 +97,14 @@ extern char *_xklIndicatorNames[];
#define WM_STATE 1
#define XKLAVIER_STATE 2
#define XKLAVIER_TRANSPARENT 3
-#define XKB_RF_NAMES_PROP_ATOM 4
-#define XKB_RF_NAMES_PROP_ATOM_BACKUP 5
-#define TOTAL_ATOMS 6
+
+#ifdef XKB_HEADERS_PRESENT
+ #define XKB_RF_NAMES_PROP_ATOM 4
+ #define XKB_RF_NAMES_PROP_ATOM_BACKUP 5
+ #define TOTAL_ATOMS 6
+#else
+ #define TOTAL_ATOMS 4
+#endif
#define XKLAVIER_STATE_PROP_LENGTH 2
diff --git a/libxklavier/xklavier_private_xkb.h b/libxklavier/xklavier_private_xkb.h
index 8616789..b99a405 100644
--- a/libxklavier/xklavier_private_xkb.h
+++ b/libxklavier/xklavier_private_xkb.h
@@ -1,6 +1,8 @@
#ifndef __XKLAVIER_PRIVATE_XKB_H__
#define __XKLAVIER_PRIVATE_XKB_H__
+#ifdef XKB_HEADERS_PRESENT
+
#include <X11/extensions/XKBrules.h>
extern void _XklStdXkbHandler( int grp, XklStateChange changeType,
@@ -8,12 +10,6 @@ extern void _XklStdXkbHandler( int grp, XklStateChange changeType,
extern void _XklXkbEvHandler( XkbEvent * kev );
-extern void XklDumpXkbDesc( const char *filename, XkbDescPtr kbd );
-
-extern Bool _xklXkbExtPresent;
-
-extern XkbDescPtr _xklXkb;
-
#define ForPhysIndicators( i, bit ) \
for ( i=0, bit=1; i<XkbNumIndicators; i++, bit<<=1 ) \
if ( _xklXkb->indicators->phys_indicators & bit )
@@ -23,3 +19,11 @@ extern int _xklXkbEventType, _xklXkbError;
extern XkbRF_VarDefsRec _xklVarDefs;
#endif
+
+extern Bool _xklXkbExtPresent;
+
+extern XkbDescPtr _xklXkb;
+
+extern void XklDumpXkbDesc( const char *filename, XkbDescPtr kbd );
+
+#endif
diff --git a/libxklavier/xklavier_props.c b/libxklavier/xklavier_props.c
index b6fec8c..4ab8cf9 100644
--- a/libxklavier/xklavier_props.c
+++ b/libxklavier/xklavier_props.c
@@ -97,6 +97,7 @@ void XklConfigRecReset( XklConfigRecPtr data )
Bool XklConfigGetFromServer( XklConfigRecPtr data )
{
+#ifdef XKB_HEADERS_PRESENT
char *rulesFile = NULL;
Bool rv =
XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], &rulesFile, data );
@@ -104,10 +105,14 @@ Bool XklConfigGetFromServer( XklConfigRecPtr data )
free( rulesFile );
return rv;
+#else
+ return False;
+#endif
}
Bool XklConfigGetFromBackup( XklConfigRecPtr data )
{
+#ifdef XKB_HEADERS_PRESENT
char *rulesFile = NULL;
Bool rv =
XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], &rulesFile,
@@ -116,13 +121,17 @@ Bool XklConfigGetFromBackup( XklConfigRecPtr data )
free( rulesFile );
return rv;
+#else
+ return False;
+#endif
}
Bool XklBackupNamesProp( )
{
+ Bool rv = True;
+#ifdef XKB_HEADERS_PRESENT
char *rf;
XklConfigRec data;
- Bool rv = True;
XklConfigRecInit( &data );
if( XklGetNamesProp
@@ -166,15 +175,16 @@ Bool XklBackupNamesProp( )
rv = False;
}
XklConfigRecDestroy( &data );
-
+#endif
return rv;
}
Bool XklRestoreNamesProp( )
{
+ Bool rv = True;
+#ifdef XKB_HEADERS_PRESENT
char *rf;
XklConfigRec data;
- Bool rv = True;
XklConfigRecInit( &data );
if( !XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], &rf, &data ) )
@@ -192,7 +202,7 @@ Bool XklRestoreNamesProp( )
rv = False;
}
XklConfigRecDestroy( &data );
-
+#endif
return rv;
}
diff --git a/libxklavier/xklavier_xkb.c b/libxklavier/xklavier_xkb.c
index 5dd6994..3dd2351 100644
--- a/libxklavier/xklavier_xkb.c
+++ b/libxklavier/xklavier_xkb.c
@@ -9,7 +9,7 @@
#include "xklavier_private_xkb.h"
XkbDescPtr _xklXkb;
-
+#ifdef XKB_HEADERS_PRESENT
char *_xklIndicatorNames[XkbNumIndicators];
unsigned _xklPhysIndicatorsMask;
@@ -22,6 +22,13 @@ const char **XklGetGroupNames( void )
{
return ( const char ** ) groupNames;
}
+#else
+const char **XklGetGroupNames( void )
+{
+ static const char* dummyName = "???";
+ return ( const char ** ) &dummyName;
+}
+#endif
int XklInit( Display * a_dpy )
{
@@ -31,6 +38,7 @@ int XklInit( Display * a_dpy )
_xklDefaultErrHandler =
XSetErrorHandler( ( XErrorHandler ) _XklErrHandler );
+#ifdef XKB_HEADERS_PRESENT
/* Lets begin */
_xklXkbExtPresent = XkbQueryExtension( _xklDpy = a_dpy,
&opcode, &_xklXkbEventType,
@@ -39,22 +47,31 @@ int XklInit( Display * a_dpy )
{
return -1;
}
+#endif
scr = DefaultScreen( _xklDpy );
_xklRootWindow = RootWindow( _xklDpy, scr );
+#ifdef XKB_HEADERS_PRESENT
XklDebug( 160,
"xkbEvenType: %X, xkbError: %X, display: %p, root: " WINID_FORMAT
"\n", _xklXkbEventType, _xklXkbError, _xklDpy, _xklRootWindow );
+#else
+ XklDebug( 160,
+ "NO XKB LIBS, display: %p, root: " WINID_FORMAT
+ "\n", _xklDpy, _xklRootWindow );
+#endif
_xklAtoms[WM_NAME] = XInternAtom( _xklDpy, "WM_NAME", False );
_xklAtoms[WM_STATE] = XInternAtom( _xklDpy, "WM_STATE", False );
_xklAtoms[XKLAVIER_STATE] = XInternAtom( _xklDpy, "XKLAVIER_STATE", False );
_xklAtoms[XKLAVIER_TRANSPARENT] =
XInternAtom( _xklDpy, "XKLAVIER_TRANSPARENT", False );
+#ifdef XKB_HEADERS_PRESENT
_xklAtoms[XKB_RF_NAMES_PROP_ATOM] =
XInternAtom( _xklDpy, _XKB_RF_NAMES_PROP_ATOM, False );
_xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP] =
XInternAtom( _xklDpy, "_XKB_RULES_NAMES_BACKUP", False );
+#endif
_xklAllowSecondaryGroupOnce = False;
_xklSkipOneRestore = False;
@@ -67,6 +84,7 @@ int XklInit( Display * a_dpy )
int XklPauseListen( )
{
+#ifdef XKB_HEADERS_PRESENT
XkbSelectEvents( _xklDpy, XkbUseCoreKbd, XkbAllEventsMask, 0 );
// XkbSelectEventDetails( _xklDpy,
// XkbUseCoreKbd,
@@ -75,11 +93,13 @@ int XklPauseListen( )
// 0 );
//!!_XklSelectInput( _xklRootWindow, 0 );
+#endif
return 0;
}
int XklResumeListen( )
{
+#ifdef XKB_HEADERS_PRESENT
/* What events we want */
#define XKB_EVT_MASK \
(XkbStateNotifyMask| \
@@ -106,7 +126,7 @@ int XklResumeListen( )
XkbUseCoreKbd,
XkbNamesNotify,
XKB_NAMES_EVT_DTL_MASK, XKB_NAMES_EVT_DTL_MASK );
-
+#endif
_XklSelectInputMerging( _xklRootWindow,
SubstructureNotifyMask | PropertyChangeMask );
_XklGetRealState( &_xklCurState );
@@ -115,7 +135,11 @@ int XklResumeListen( )
unsigned XklGetNumGroups( )
{
+#ifdef XKB_HEADERS_PRESENT
return _xklXkb->ctrls->num_groups;
+#else
+ return 1;
+#endif
}
#define KBD_MASK \
@@ -127,6 +151,7 @@ unsigned XklGetNumGroups( )
void _XklFreeAllInfo( )
{
+#ifdef XKB_HEADERS_PRESENT
if( _xklXkb != NULL )
{
int i;
@@ -140,6 +165,7 @@ void _XklFreeAllInfo( )
XkbFreeKeyboard( _xklXkb, XkbAllComponentsMask, True );
_xklXkb = NULL;
}
+#endif
}
/**
@@ -147,6 +173,7 @@ void _XklFreeAllInfo( )
*/
Bool _XklLoadAllInfo( )
{
+#ifdef XKB_HEADERS_PRESENT
int i;
unsigned bit;
Atom *gna;
@@ -210,16 +237,18 @@ Bool _XklLoadAllInfo( )
XklDebug( 200, "Real indicators are %X\n",
_xklXkb->indicators->phys_indicators );
+#endif
if( _xklConfigCallback != NULL )
( *_xklConfigCallback ) ( _xklConfigCallbackData );
-
return True;
}
void XklLockGroup( int group )
{
XklDebug( 100, "Posted request for change the group to %d ##\n", group );
+#ifdef XKB_HEADERS_PRESENT
XkbLockGroup( _xklDpy, XkbUseCoreKbd, group );
+#endif
XSync( _xklDpy, False );
}
@@ -228,9 +257,12 @@ void XklLockGroup( int group )
*/
void _XklGetRealState( XklState * curState_return )
{
+#ifdef XKB_HEADERS_PRESENT
XkbStateRec state;
+#endif
curState_return->group = 0;
+#ifdef XKB_HEADERS_PRESENT
if( Success == XkbGetState( _xklDpy, XkbUseCoreKbd, &state ) )
curState_return->group = state.locked_group;
@@ -239,6 +271,7 @@ void _XklGetRealState( XklState * curState_return )
&curState_return->indicators ) )
curState_return->indicators &= _xklXkb->indicators->phys_indicators;
else
+#endif
curState_return->indicators = 0;
}
@@ -248,6 +281,7 @@ void _XklGetRealState( XklState * curState_return )
*/
Bool _XklSetIndicator( int indicatorNum, Bool set )
{
+#ifdef XKB_HEADERS_PRESENT
XkbIndicatorMapPtr map;
map = _xklXkb->indicators->maps + indicatorNum;
@@ -396,6 +430,6 @@ Bool _XklSetIndicator( int indicatorNum, Bool set )
return True;
}
}
-
+#endif
return True;
}