Package: xserver-xorg
Version: 6.8.2.dfsg.1-5
Severity: wishlist
Tags: patch

Hi,

In order to ease migration from xlibs to xkeyboard-config, an option
is to install xkeyboard-config files under another directory, so
that xlibs and xkeyboard-config can be installed simultaneously.
The selection between xlibs and xkeyboard-config data files could
be made when X starts by adding a new XKBPATH environment variable.

Here is a patch implementing this feature; I am unable for now to
test it due to lack of CPU and disk resources, and will be grateful
if someone could test it.

If you XSF guys decide eventually to replace xlibs by xkeyboard-config,
this hack can be removed, but until then it would really help to
install xkeyboard-config on Debian systems.

Denis
Index: xorg-x11/xc/programs/setxkbmap/setxkbmap.c
===================================================================
--- xorg-x11.orig/xc/programs/setxkbmap/setxkbmap.c
+++ xorg-x11/xc/programs/setxkbmap/setxkbmap.c
@@ -318,9 +318,13 @@
 int    i;
 Bool   ok;
 unsigned       present;
+char   *xkbpath;
 
     ok= True;
     addToList(&szInclPath,&numInclPath,&inclPath,".");
+    xkbpath= (char *)getenv("XKBPATH");
+    if (xkbpath!=NULL)
+       addToList(&szInclPath,&numInclPath,&inclPath,xkbpath);
     addToList(&szInclPath,&numInclPath,&inclPath,DFLT_XKB_CONFIG_ROOT);
     for (i=1;(i<argc)&&ok;i++) {
        if (argv[i][0]!='-') {
Index: xorg-x11/xc/programs/xkbcomp/xkbpath.c
===================================================================
--- xorg-x11.orig/xc/programs/xkbcomp/xkbpath.c
+++ xorg-x11/xc/programs/xkbcomp/xkbpath.c
@@ -131,9 +131,14 @@
 void
 XkbAddDefaultDirectoriesToPath(void)
 {
+char *xkbpath;
+
     if (noDefaultPath)
        return;
     XkbAddDirectoryToPath(".");
+    xkbpath= (char *)getenv("XKBPATH");
+    if (xkbpath!=NULL)
+       XkbAddDirectoryToPath(xkbpath);
     XkbAddDirectoryToPath(DFLT_XKB_CONFIG_ROOT);
 }
 
Index: xorg-x11/xc/programs/xkbevd/xkbevd.c
===================================================================
--- xorg-x11.orig/xc/programs/xkbevd/xkbevd.c
+++ xorg-x11/xc/programs/xkbevd/xkbevd.c
@@ -471,20 +471,28 @@
     else {
        file= fopen(cfgFileName,"r");
        if (file==NULL) { /* no personal config, try for a system one */
+           char *xkbpath;
            if (cfgFileName!=buf) { /* user specified a file.  bail */
                uError("Can't open config file \"%s\n",cfgFileName);
                uAction("Exiting\n");
                exit(1);
            }
-           sprintf(buf,DFLT_SYS_XKBEVD_CONFIG,DFLT_XKB_CONFIG_ROOT);
-           file= fopen(cfgFileName,"r");
+           xkbpath= (char *)getenv("XKBPATH");
+           if (xkbpath!=NULL) {
+               sprintf(buf,DFLT_SYS_XKBEVD_CONFIG,xkbpath);
+               file= fopen(cfgFileName,"r");
+           }
            if (file==NULL) {
-               if (verbose) {
-                   uError("Couldn't find a config file anywhere\n");
-                   uAction("Exiting\n");
-                   exit(1);
+               sprintf(buf,DFLT_SYS_XKBEVD_CONFIG,DFLT_XKB_CONFIG_ROOT);
+               file= fopen(cfgFileName,"r");
+               if (file==NULL) {
+                   if (verbose) {
+                       uError("Couldn't find a config file anywhere\n");
+                       uAction("Exiting\n");
+                       exit(1);
+                   }
+                   exit(0);
                }
-               exit(0);
            }
        }
     }

Reply via email to