diff options
author | Sergey Udaltsov <svu@gnome.org> | 2004-11-02 01:36:25 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2004-11-02 01:36:25 +0000 |
commit | 6b41cdb4b6d67d8095c6b9eefa7003ec8a44ca87 (patch) | |
tree | 6453f0bc477745ecc84834869bd4ba276ad2a02a /libxklavier/xklavier.c | |
parent | 253e818f948d458efd1d9df8558be22db9c161b1 (diff) | |
download | libxklavier-6b41cdb4b6d67d8095c6b9eefa7003ec8a44ca87.tar.gz |
Ensuring VTable is initialized - before using it.
Diffstat (limited to 'libxklavier/xklavier.c')
-rw-r--r-- | libxklavier/xklavier.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libxklavier/xklavier.c b/libxklavier/xklavier.c index a9c718a..0ce8a53 100644 --- a/libxklavier/xklavier.c +++ b/libxklavier/xklavier.c @@ -37,7 +37,7 @@ int _xklDebugLevel = 0; Window _xklPrevAppWindow; -XklVTable *xklVTable; +XklVTable *xklVTable = NULL; XklConfigCallback _xklConfigCallback = NULL; void *_xklConfigCallbackData; @@ -698,41 +698,58 @@ Bool _XklIsTransparentAppWindow( Window appWin ) return False; } +void _XklEnsureVTableInited( void ) +{ + if ( xklVTable == NULL ) + { + XklDebug( 0, "ERROR: XKL VTable is NOT initialized.\n" ); + /* force the crash! */ + char *p = NULL; *p = '\0'; + } +} + /** * Calling through vtable */ const char **XklGetGroupNames( void ) { + _XklEnsureVTableInited(); return (*xklVTable->xklGetGroupNamesHandler)(); } unsigned XklGetNumGroups( void ) { + _XklEnsureVTableInited(); return (*xklVTable->xklGetNumGroupsHandler)(); } void XklLockGroup( int group ) { + _XklEnsureVTableInited(); (*xklVTable->xklLockGroupHandler)( group ); } int XklPauseListen( void ) { + _XklEnsureVTableInited(); return (*xklVTable->xklPauseListenHandler)(); } int XklResumeListen( void ) { + _XklEnsureVTableInited(); return (*xklVTable->xklResumeListenHandler)(); } Bool _XklLoadAllInfo( void ) { + _XklEnsureVTableInited(); return (*xklVTable->xklLoadAllInfoHandler)(); } void _XklFreeAllInfo( void ) { + _XklEnsureVTableInited(); (*xklVTable->xklFreeAllInfoHandler)(); } |