summaryrefslogtreecommitdiff
path: root/libxklavier/xklavier_props.c
diff options
context:
space:
mode:
Diffstat (limited to 'libxklavier/xklavier_props.c')
-rw-r--r--libxklavier/xklavier_props.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/libxklavier/xklavier_props.c b/libxklavier/xklavier_props.c
index 5fb861c..53aaab8 100644
--- a/libxklavier/xklavier_props.c
+++ b/libxklavier/xklavier_props.c
@@ -19,6 +19,42 @@ void XklConfigRecInit( XklConfigRecPtr data )
memset( ( void * ) data, 0, sizeof( XklConfigRec ) );
}
+static Bool PtrsEqual( char* p1, char* p2 )
+{
+ if ( p1 == NULL && p2 == NULL )
+ return True;
+ if ( ( p1 == NULL && p2 != NULL ) ||
+ ( p1 != NULL && p2 == NULL ) )
+ return False;
+ return !strcmp( p1, p2 );
+}
+
+static Bool ListsEqual( int numItems1, char** items1,
+ int numItems2, char** items2 )
+{
+ int i;
+ if ( numItems1 != numItems2 )
+ return False;
+ for( i = numItems1; --i >= 0; )
+ if ( !PtrsEqual( *items1++ , *items2++ ) )
+ return False;
+ return True;
+}
+
+Bool XklConfigRecEquals( XklConfigRecPtr data1, XklConfigRecPtr data2 )
+{
+ if ( !PtrsEqual( data1->model, data2->model ) )
+ return False;
+ if ( !ListsEqual( data1->numLayouts, data1->layouts,
+ data2->numLayouts, data2->layouts ) )
+ return False;
+ if ( !ListsEqual( data1->numVariants, data1->variants,
+ data2->numVariants, data2->variants ) )
+ return False;
+ return ListsEqual( data1->numOptions, data1->options,
+ data2->numOptions, data2->options );
+}
+
void XklConfigRecDestroy( XklConfigRecPtr data )
{
int i;