summaryrefslogtreecommitdiff
path: root/libxklavier/xklavier_props.c
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2004-09-17 23:42:30 +0000
committerSergey Udaltsov <svu@gnome.org>2004-09-17 23:42:30 +0000
commit3bdb42faf970272f4a7c163364ce0401beab6a32 (patch)
tree4f1e3acc00a43e013344f39144d865ad8737427e /libxklavier/xklavier_props.c
parent6be58314e011e4a2747d3d1060b5461f84e21135 (diff)
downloadlibxklavier-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.c53
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" );