aboutsummaryrefslogtreecommitdiff
path: root/debian/patches-refused/109_nxagent_locale-utf8-compound-text.full.patch
blob: 6c112262e02c5e250484704dad16d465d373a116 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
Description: Enable locale support
 Enable locale support in nxagent.
 .
 Originally contributed by FreeNX Team (dimbor).
Forwarded: not-yet
Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
Last-Update: 2011-12-31
--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c
@@ -64,6 +64,9 @@
 #include "NX.h"
 #include "NXlib.h"
 
+/* by dimbor */
+#include <X11/Xlocale.h>
+
 /*
  * Set here the required log level.
  */
@@ -366,6 +369,20 @@
    */
 
   blackRoot = TRUE;
+
+  /* by dimbor */
+  char *locale = setlocale(LC_ALL, "");
+  if (!locale)
+   fprintf(stderr, "InitOutput: failed to set locale, reverting to \"C\"\n");
+  else
+  {
+    if (!XSupportsLocale())
+      fprintf(stderr, "InitOutput: Locale %s not supported by X\n",locale);
+    else
+      fprintf(stderr, "InitOutput: Set %s locale\n",locale);
+  }
+  if (!XSetLocaleModifiers(""))
+         fprintf(stderr,"InitOutput: cannot set locale modifiers.\n");
 }
 
 void InitInput(argc, argv)
--- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c
@@ -32,6 +32,10 @@
 
 #include "NXlib.h"
 
+/* by dimbor */
+#include "Xatom.h"
+#include <X11/Xlocale.h>
+
 /*
  * Set here the required log level.
  */
@@ -419,6 +423,28 @@
   }
 }
 
+/* by dimbor */
+char *textToUTF8String(char *text, int nitems)
+{
+  XTextProperty t_prop;
+  char *ret=NULL;
+  t_prop.value=((unsigned char *)text);
+  t_prop.nitems=nitems;
+  if (!t_prop.nitems)
+    return ret;
+  t_prop.format=8;
+  t_prop.encoding=XInternAtom(nxagentDisplay, "COMPOUND_TEXT", 0);
+  char **list;
+  int num;
+  int r = Xutf8TextPropertyToTextList(nxagentDisplay, &t_prop,&list, &num);
+  if ((r == Success || r > 0) && num > 0 && *list)
+  {
+    ret=(char *)strdup (*list);
+    XFreeStringList(list);
+  }
+  return ret;
+}
+
 int nxagentExportAllProperty(pWin)
   WindowPtr pWin;
 {
@@ -464,6 +490,7 @@
 
   if (strncmp(propertyS, "WM_", 3) != 0 &&
           strncmp(propertyS, "_NET_", 5) != 0 &&
+          strncmp(propertyS, "_MOTIF_", 7) != 0 &&
               strcmp(propertyS, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR") != 0)
   {
     #ifdef TEST
@@ -474,6 +501,7 @@
     #endif
   }
   else if (strcmp(typeS, "STRING") == 0 ||
+             strcmp(typeS, "_MOTIF_WM_HINTS") == 0 ||
                #ifndef _XSERVER64
                strcmp(typeS, "CARDINAL") == 0 ||
                    strcmp(typeS, "WM_SIZE_HINTS") == 0 ||
@@ -483,6 +511,19 @@
     output = value;
     export = True;
   }
+  /* add by dimbor, modified by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+  else if (strcmp(typeS, "COMPOUND_TEXT") == 0)
+  {
+    output = textToUTF8String(value, nUnits);
+    if ( output != NULL ) {
+      type = MakeAtom("UTF8_STRING", strlen("UTF8_STRING"), True);
+    } else {
+      output = value;
+    }
+    nUnits = strlen((char *) output);
+    freeMem = True;
+    export = True;
+  } */
   #ifdef _XSERVER64
   else if (strcmp(typeS, "CARDINAL") == 0 || strcmp(typeS, "WM_SIZE_HINTS") == 0)
   {