From c91fe980b952d4d357a291fcda89f35ea1a83993 Mon Sep 17 00:00:00 2001 From: Marcelo Boveto Shima Date: Tue, 10 Feb 2015 18:56:59 +0100 Subject: Export remote keyboard configuration to session directory (105_nxagent_export-remote-keyboard-config.full.patch) Let nxagent write the keyboard configuration to /keyboard and make it available within the NX session. --- ...xagent_export-remote-keyboard-config.full.patch | 96 ---------------------- debian/patches/series | 1 - nx-X11/programs/Xserver/hw/nxagent/Error.c | 2 +- nx-X11/programs/Xserver/hw/nxagent/Error.h | 2 + nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 45 ++++++++++ 5 files changed, 48 insertions(+), 98 deletions(-) delete mode 100644 debian/patches/105_nxagent_export-remote-keyboard-config.full.patch diff --git a/debian/patches/105_nxagent_export-remote-keyboard-config.full.patch b/debian/patches/105_nxagent_export-remote-keyboard-config.full.patch deleted file mode 100644 index 389feaf92..000000000 --- a/debian/patches/105_nxagent_export-remote-keyboard-config.full.patch +++ /dev/null @@ -1,96 +0,0 @@ -Description: Export remote keyboard configuration to session directory - Let nxagent write the keyboard configuration to /keyboard - and make it available within the NX session. - . - Originally contributed by Marcelo Boveto Shima . -Forwarded: pending... -Author: Mike Gabriel -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 -+ - 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 || diff --git a/debian/patches/series b/debian/patches/series index cfe913d4b..d34201547 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,4 +1,3 @@ -105_nxagent_export-remote-keyboard-config.full.patch 106_nxagent_utf8-copy-clipboard.full.patch 107_nxagent_clipboard-compound-text+small-bed-sheets.full.patch 108_nxagent_wine-close-delay.full.patch diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.c b/nx-X11/programs/Xserver/hw/nxagent/Error.c index d9016436e..df62cf4f7 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Error.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Error.c @@ -497,7 +497,7 @@ char *nxagentGetRootPath(void) return rootPath; } -char *nxagentGetSessionPath() +char *nxagentGetSessionPath(void) { char *rootPath; diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.h b/nx-X11/programs/Xserver/hw/nxagent/Error.h index e55fd71a5..51d6171da 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Error.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Error.h @@ -34,4 +34,6 @@ void nxagentStartRedirectToClientsLog(void); void nxagentEndRedirectToClientsLog(void); +char *nxagentGetSessionPath(void); + #endif /* __Error_H__ */ diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 6039e5c43..1637f0c4c 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -52,6 +52,7 @@ is" without express or implied warranty. #include "Keyboard.h" #include "Events.h" #include "Options.h" +#include "Error.h" #include "NXlib.h" @@ -72,6 +73,8 @@ is" without express or implied warranty. #include "Xatom.h" +#include + static int nxagentXkbGetNames(char **rules, char **model, char **layout, char **variant, char **options); @@ -1790,6 +1793,48 @@ void nxagentKeycodeConversionSetup(void) } #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 || -- cgit v1.2.3