diff options
author | Sergey Udaltsov <svu@gnome.org> | 2004-09-17 23:42:30 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2004-09-17 23:42:30 +0000 |
commit | 3bdb42faf970272f4a7c163364ce0401beab6a32 (patch) | |
tree | 4f1e3acc00a43e013344f39144d865ad8737427e /libxklavier/xklavier_props.c | |
parent | 6be58314e011e4a2747d3d1060b5461f84e21135 (diff) | |
download | libxklavier-3bdb42faf970272f4a7c163364ce0401beab6a32.tar.gz |
The default value for the root window property is introduced. I help it will help to the poor people with broken XKB - just a little...
Diffstat (limited to 'libxklavier/xklavier_props.c')
-rw-r--r-- | libxklavier/xklavier_props.c | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/libxklavier/xklavier_props.c b/libxklavier/xklavier_props.c index f0363a6..600b9c9 100644 --- a/libxklavier/xklavier_props.c +++ b/libxklavier/xklavier_props.c @@ -13,6 +13,9 @@ #include "xklavier_config.h" #include "xklavier_private.h" +#define XKB_DEFAULT_MODEL "pc101" +#define XKB_DEFAULT_LAYOUT "us" + void XklConfigRecInit( XklConfigRecPtr data ) { // clear the structure VarDefsPtr... @@ -43,6 +46,22 @@ static Bool ListsEqual( int numItems1, char** items1, return True; } +static Bool _XklGetDefaultNamesProp( char **rulesFileOut, XklConfigRecPtr data ) +{ + if ( rulesFileOut != NULL ) + *rulesFileOut = strdup( XKB_DEFAULT_RULESET ); + data->model = strdup( XKB_DEFAULT_MODEL ); +// keeping Nvariants = Nlayouts + data->numLayouts = data->numVariants = 1; + data->layouts = malloc( sizeof( char * ) ); + data->layouts[0] = strdup( XKB_DEFAULT_LAYOUT ); + data->variants = malloc( sizeof( char * ) ); + data->variants[0] = strdup( "" ); + data->numOptions = 0; + data->options = NULL; + return True; +} + Bool XklConfigRecEquals( XklConfigRecPtr data1, XklConfigRecPtr data2 ) { if ( data1 == data2 ) @@ -98,11 +117,11 @@ 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 ); - if( rulesFile != NULL ) - free( rulesFile ); + XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], NULL, data ); + + if( !rv ) + rv = _XklGetDefaultNamesProp( NULL, data ); return rv; #else @@ -113,12 +132,8 @@ Bool XklConfigGetFromServer( XklConfigRecPtr data ) Bool XklConfigGetFromBackup( XklConfigRecPtr data ) { #ifdef XKB_HEADERS_PRESENT - char *rulesFile = NULL; Bool rv = - XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], &rulesFile, - data ); - if( rulesFile != NULL ) - free( rulesFile ); + XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], NULL, data ); return rv; #else @@ -130,21 +145,24 @@ Bool XklBackupNamesProp( ) { Bool rv = True; #ifdef XKB_HEADERS_PRESENT - char *rf; + char *rf = NULL; XklConfigRec data; + Bool cgp = False; XklConfigRecInit( &data ); if( XklGetNamesProp - ( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], &rf, &data ) ) + ( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], NULL, &data ) ) { XklConfigRecDestroy( &data ); - if( rf != NULL ) - free( rf ); return True; } // "backup" property is not defined XklConfigRecReset( &data ); - if( XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], &rf, &data ) ) + cgp = XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], &rf, &data ); + if ( !cgp ) + cgp = _XklGetDefaultNamesProp( &rf, &data ); + + if ( cgp ) { #if 0 int i; @@ -183,19 +201,16 @@ Bool XklRestoreNamesProp( ) { Bool rv = True; #ifdef XKB_HEADERS_PRESENT - char *rf; + char *rf = NULL; XklConfigRec data; XklConfigRecInit( &data ); - if( !XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], &rf, &data ) ) + if( !XklGetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM_BACKUP], NULL, &data ) ) { XklConfigRecDestroy( &data ); return False; } - if( rf != NULL ) - free( rf ); - if( !XklSetNamesProp( _xklAtoms[XKB_RF_NAMES_PROP_ATOM], rf, &data ) ) { XklDebug( 150, "Could not backup the configuration" ); |