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