mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
dtlogin: make the language menu works.
This commit is contained in:
parent
d985889b74
commit
1eccd2e042
6 changed files with 31 additions and 28 deletions
|
@ -1450,16 +1450,6 @@ SetTitle( char *name, char *ptr )
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#if defined (_AIX) && defined (_POWER)
|
|
||||||
#define GETTYPATH "/usr/sbin/getty"
|
|
||||||
#elif defined(__OpenBSD__)
|
|
||||||
#define GETTYPATH "/usr/libexec/getty"
|
|
||||||
#elif defined(__linux__)
|
|
||||||
#define GETTYPATH "/sbin/getty"
|
|
||||||
#else
|
|
||||||
#define GETTYPATH "/etc/getty"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
StartGetty( struct display *d )
|
StartGetty( struct display *d )
|
||||||
{
|
{
|
||||||
|
|
|
@ -100,6 +100,7 @@
|
||||||
#define DEF_SUPATH "/usr/sbin:/usr/bin" /* same as ROOTPATH */
|
#define DEF_SUPATH "/usr/sbin:/usr/bin" /* same as ROOTPATH */
|
||||||
|
|
||||||
#define LANGLISTSIZE 2048
|
#define LANGLISTSIZE 2048
|
||||||
|
#define LANGUAGESIZE 50
|
||||||
#define DELIM " \t" /* delimiters in language list */
|
#define DELIM " \t" /* delimiters in language list */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
* a simple linked list of known displays
|
* a simple linked list of known displays
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
# include <sys/mman.h>
|
||||||
# include "dm.h"
|
# include "dm.h"
|
||||||
# include "vgmsg.h"
|
# include "vgmsg.h"
|
||||||
|
|
||||||
|
@ -190,7 +191,7 @@ RemoveDisplay( struct display *old )
|
||||||
IfFree (d->peer);
|
IfFree (d->peer);
|
||||||
IfFree (d->from);
|
IfFree (d->from);
|
||||||
XdmcpDisposeARRAY8(&d->clientAddr);
|
XdmcpDisposeARRAY8(&d->clientAddr);
|
||||||
IfFree (d->language);
|
munmap (d->language, LANGUAGESIZE + 1);
|
||||||
IfFree (d->langList);
|
IfFree (d->langList);
|
||||||
IfFree (d->utmpId);
|
IfFree (d->utmpId);
|
||||||
IfFree (d->gettyLine);
|
IfFree (d->gettyLine);
|
||||||
|
@ -216,8 +217,17 @@ RemoveDisplay( struct display *old )
|
||||||
struct display *
|
struct display *
|
||||||
NewDisplay( char *name, char *class )
|
NewDisplay( char *name, char *class )
|
||||||
{
|
{
|
||||||
|
char *language;
|
||||||
struct display *d;
|
struct display *d;
|
||||||
|
|
||||||
|
language = mmap (NULL, LANGUAGESIZE + 1, PROT_READ | PROT_WRITE,
|
||||||
|
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
|
||||||
|
|
||||||
|
if (language == MAP_FAILED) {
|
||||||
|
LogOutOfMem (ReadCatalog(MC_LOG_SET,MC_LOG_NEW_DPY,MC_DEF_LOG_NEW_DPY));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
d = (struct display *) malloc (sizeof (struct display));
|
d = (struct display *) malloc (sizeof (struct display));
|
||||||
if (!d) {
|
if (!d) {
|
||||||
LogOutOfMem (ReadCatalog(MC_LOG_SET,MC_LOG_NEW_DPY,MC_DEF_LOG_NEW_DPY));
|
LogOutOfMem (ReadCatalog(MC_LOG_SET,MC_LOG_NEW_DPY,MC_DEF_LOG_NEW_DPY));
|
||||||
|
@ -290,7 +300,7 @@ NewDisplay( char *name, char *class )
|
||||||
d->useChooser = 0;
|
d->useChooser = 0;
|
||||||
d->clientAddr.data = NULL;
|
d->clientAddr.data = NULL;
|
||||||
d->clientAddr.length = 0;
|
d->clientAddr.length = 0;
|
||||||
d->language = NULL;
|
d->language = language;
|
||||||
d->langList = NULL;
|
d->langList = NULL;
|
||||||
d->utmpId = NULL;
|
d->utmpId = NULL;
|
||||||
d->gettyLine = NULL;
|
d->gettyLine = NULL;
|
||||||
|
@ -303,4 +313,3 @@ NewDisplay( char *name, char *class )
|
||||||
displays = d;
|
displays = d;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -672,6 +672,8 @@ LoadDisplayResources( struct display *d )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lang = d->language;
|
||||||
|
d->language = NULL;
|
||||||
|
|
||||||
for (i = 0; i < NUM_DISPLAY_RESOURCES; i++) {
|
for (i = 0; i < NUM_DISPLAY_RESOURCES; i++) {
|
||||||
sprintf (name, "%s.%s.%s", AppName,
|
sprintf (name, "%s.%s.%s", AppName,
|
||||||
|
@ -682,6 +684,13 @@ LoadDisplayResources( struct display *d )
|
||||||
(char **) (((char *) d) + DisplayResources[i].offset), DisplayResources[i].default_value);
|
(char **) (((char *) d) + DisplayResources[i].offset), DisplayResources[i].default_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strlen(lang) && d->language && strlen(d->language))
|
||||||
|
*(strncpy(lang, d->language, LANGUAGESIZE) + LANGUAGESIZE) =
|
||||||
|
'\0';
|
||||||
|
|
||||||
|
free(d->language);
|
||||||
|
d->language = lang;
|
||||||
|
|
||||||
#ifdef _AIX
|
#ifdef _AIX
|
||||||
if(d->language == NULL || strlen(d->language) == 0)
|
if(d->language == NULL || strlen(d->language) == 0)
|
||||||
SetDefaultLanguage(d);
|
SetDefaultLanguage(d);
|
||||||
|
|
|
@ -2406,12 +2406,10 @@ RunGreeter( struct display *d, struct greet_info *greet,
|
||||||
Debug("Greeter returned language (NULL)\n");
|
Debug("Greeter returned language (NULL)\n");
|
||||||
|
|
||||||
|
|
||||||
if (strcmp(d->language, "default") == 0) {
|
if (strcmp(d->language, "default") == 0)
|
||||||
int len = strlen(defaultLanguage) + 1;
|
*(strncpy(d->language, defaultLanguage, LANGUAGESIZE) +
|
||||||
d->language = (d->language == NULL ?
|
LANGUAGESIZE) = '\0';
|
||||||
malloc(len) : realloc (d->language, len));
|
|
||||||
strcpy(d->language, defaultLanguage);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
#ifdef BLS
|
#ifdef BLS
|
||||||
case NOTIFY_BAD_SECLEVEL:
|
case NOTIFY_BAD_SECLEVEL:
|
||||||
|
@ -2678,7 +2676,7 @@ ManageGreeter( struct display *d, struct greet_info *greet,
|
||||||
Debug("GREET_STATE_AUTHENTICATE\n");
|
Debug("GREET_STATE_AUTHENTICATE\n");
|
||||||
|
|
||||||
r = (ResponseChallenge *)state->response;
|
r = (ResponseChallenge *)state->response;
|
||||||
|
|
||||||
if (greet->name == NULL)
|
if (greet->name == NULL)
|
||||||
{
|
{
|
||||||
greet->name = strdup(((char *)r) + r->offResponse);
|
greet->name = strdup(((char *)r) + r->offResponse);
|
||||||
|
@ -2805,17 +2803,14 @@ ManageGreeter( struct display *d, struct greet_info *greet,
|
||||||
*/
|
*/
|
||||||
ResponseLang *r;
|
ResponseLang *r;
|
||||||
char *lang;
|
char *lang;
|
||||||
int len;
|
|
||||||
|
|
||||||
Debug("GREET_STATE_LANG\n");
|
Debug("GREET_STATE_LANG\n");
|
||||||
|
|
||||||
r = (ResponseLang *)state->response;
|
r = (ResponseLang *)state->response;
|
||||||
lang = ((char *)r) + r->offLang;
|
lang = ((char *)r) + r->offLang;
|
||||||
len = strlen(lang) + 1;
|
|
||||||
|
|
||||||
d->language = (d->language == NULL ?
|
*(strncpy(d->language, lang, LANGUAGESIZE) + LANGUAGESIZE) = '\0';
|
||||||
malloc(len) : realloc(d->language, len));
|
|
||||||
strcpy(d->language, lang);
|
|
||||||
Debug("Language returned: %s\n", d->language);
|
Debug("Language returned: %s\n", d->language);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -766,7 +766,6 @@ SetDefaultLanguage(struct display *d)
|
||||||
* If LANG is set for hft, we need to change it for X.
|
* If LANG is set for hft, we need to change it for X.
|
||||||
* Currently there are four hft LANG variables.
|
* Currently there are four hft LANG variables.
|
||||||
*/
|
*/
|
||||||
d->language = (char *)malloc(strlen(lang)+1);
|
|
||||||
if(strcmp(lang, "En_JP") == 0)
|
if(strcmp(lang, "En_JP") == 0)
|
||||||
strcpy(d->language, "Ja_JP");
|
strcpy(d->language, "Ja_JP");
|
||||||
else if(strcmp(lang, "en_JP") == 0)
|
else if(strcmp(lang, "en_JP") == 0)
|
||||||
|
@ -776,7 +775,7 @@ SetDefaultLanguage(struct display *d)
|
||||||
else if(strcmp(lang, "en_TW") == 0)
|
else if(strcmp(lang, "en_TW") == 0)
|
||||||
strcpy(d->language, "zh_TW");
|
strcpy(d->language, "zh_TW");
|
||||||
else
|
else
|
||||||
strcpy(d->language, lang);
|
*(strncpy(d->language, lang, LANGUAGESIZE) + LANGUAGESIZE) = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* _AIX */
|
#endif /* _AIX */
|
||||||
|
@ -820,7 +819,7 @@ setLang( struct display *d, char **env , char *langptr)
|
||||||
|
|
||||||
if (set_def_lang) {
|
if (set_def_lang) {
|
||||||
env = setEnv(env, "LANG", "C");
|
env = setEnv(env, "LANG", "C");
|
||||||
d->language = strdup("C");
|
strcpy(d->language, "C");
|
||||||
}
|
}
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue