aboutsummaryrefslogtreecommitdiff
path: root/debian/patches/0105_nxagent_export-remote-keyboard-config.full.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/0105_nxagent_export-remote-keyboard-config.full.patch')
-rw-r--r--debian/patches/0105_nxagent_export-remote-keyboard-config.full.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/debian/patches/0105_nxagent_export-remote-keyboard-config.full.patch b/debian/patches/0105_nxagent_export-remote-keyboard-config.full.patch
new file mode 100644
index 000000000..389feaf92
--- /dev/null
+++ b/debian/patches/0105_nxagent_export-remote-keyboard-config.full.patch
@@ -0,0 +1,96 @@
+Description: Export remote keyboard configuration to session directory
+ Let nxagent write the keyboard configuration to <session_directory>/keyboard
+ and make it available within the NX session.
+ .
+ Originally contributed by Marcelo Boveto Shima <marceloshima@gmail.com>.
+Forwarded: pending...
+Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+Last-Update: 2011-12-31
+--- a/nx-X11/programs/Xserver/hw/nxagent/Error.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Error.c
+@@ -497,7 +497,7 @@
+ return rootPath;
+ }
+
+-char *nxagentGetSessionPath()
++char *nxagentGetSessionPath(void)
+ {
+
+ char *rootPath;
+--- a/nx-X11/programs/Xserver/hw/nxagent/Error.h
++++ b/nx-X11/programs/Xserver/hw/nxagent/Error.h
+@@ -34,4 +34,6 @@
+
+ void nxagentEndRedirectToClientsLog(void);
+
++char *nxagentGetSessionPath(void);
++
+ #endif /* __Error_H__ */
+--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+@@ -52,6 +52,7 @@
+ #include "Keyboard.h"
+ #include "Events.h"
+ #include "Options.h"
++#include "Error.h"
+
+ #include "NXlib.h"
+
+@@ -72,6 +73,8 @@
+
+ #include "Xatom.h"
+
++#include <errno.h>
++
+ static int nxagentXkbGetNames(char **rules, char **model, char **layout,
+ char **variant, char **options);
+
+@@ -1790,6 +1793,48 @@
+ }
+ #endif
+
++ if (drulesLen != 0)
++ {
++ char *sessionpath = nxagentGetSessionPath();
++ if (sessionpath != NULL){
++ int keyboard_file_path_size = strlen(sessionpath) + strlen("/keyboard");
++ char *keyboard_file_path = malloc((keyboard_file_path_size + 1) * sizeof(char));
++ FILE *keyboard_file;
++ if ( keyboard_file_path == NULL)
++ {
++ FatalError("nxagentKeyboardProc: malloc failed.");
++ }
++ strcpy(keyboard_file_path, sessionpath);
++ strcat(keyboard_file_path, "/keyboard");
++ if ((keyboard_file = fopen(keyboard_file_path, "w")) != NULL) {
++ if ( drules != NULL )
++ fprintf(keyboard_file, "rules=%s\n", drules);
++ if ( dmodel != NULL )
++ fprintf(keyboard_file, "model=%s\n", dmodel);
++ if ( dlayout != NULL )
++ fprintf(keyboard_file, "layout=%s\n", dlayout);
++ if ( dvariant != NULL )
++ fprintf(keyboard_file, "variant=%s\n", dvariant);
++ if ( doptions != NULL )
++ fprintf(keyboard_file, "options=%s\n", doptions);
++ fclose(keyboard_file);
++ fprintf(stderr, "keyboard file created\n");
++ }
++ else {
++ int save_err = errno;
++ fprintf(stderr, "keyboard file not created: %s\n", strerror(save_err));
++ }
++ free(keyboard_file_path);
++ }
++ else {
++ fprintf(stderr, "SessionPath not defined\n");
++ }
++ }
++ else
++ {
++ fprintf(stderr, "Failed to create the keyboard file\n");
++ }
++
+ if (nxagentOption(ClientOs) == ClientOsLinux &&
+ drules != NULL && dmodel != NULL &&
+ (strcmp(drules, "evdev") == 0 ||