Commit 5051b86e20704d11944c13db39059b68fcaf1bd2

Authored by perry.werneck@gmail.com
1 parent 9ca78548

Melhorando o funcionamendo do mecanismo de acesso ao registry windows

Showing 2 changed files with 69 additions and 43 deletions   Show diff stats
po/pt_BR.po
... ... @@ -5,7 +5,7 @@ msgid ""
5 5 msgstr ""
6 6 "Project-Id-Version: pw3270 5.0\n"
7 7 "Report-Msgid-Bugs-To: \n"
8   -"POT-Creation-Date: 2013-05-02 08:31-0300\n"
  8 +"POT-Creation-Date: 2013-05-03 15:59-0300\n"
9 9 "PO-Revision-Date: 2013-04-23 10:22-0300\n"
10 10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n"
11 11 "Language-Team: Português <>\n"
... ... @@ -103,7 +103,7 @@ msgstr &quot;Alerta 3270&quot;
103 103 msgid "3270 screen"
104 104 msgstr "Tela 3270"
105 105  
106   -#: dialog.c:482
  106 +#: dialog.c:492
107 107 #, c-format
108 108 msgid "3270 terminal emulator for GTK %d.%d"
109 109 msgstr "Emulador 3270 para GTK+ %d.%d"
... ... @@ -129,7 +129,7 @@ msgstr &quot;&lt;%s&gt; exige %s&quot;
129 129 msgid "<%s> requires a %s attribute"
130 130 msgstr "<%s> precisa do atributo %s"
131 131  
132   -#: uiparser/accelerator.c:41 uiparser/menubar.c:42 uiparser/toolbar.c:58
  132 +#: uiparser/accelerator.c:41 uiparser/menubar.c:42 uiparser/toolbar.c:59
133 133 #: uiparser/popup.c:45 uiparser/scroll.c:43 uiparser/keypad.c:152
134 134 #, c-format
135 135 msgid "<%s> should be on toplevel"
... ... @@ -278,7 +278,7 @@ msgstr &quot;Azul&quot;
278 278 msgid "Bold"
279 279 msgstr "Negrito"
280 280  
281   -#: dialog.c:489
  281 +#: dialog.c:499
282 282 msgid "Brazilian Public Software Portal"
283 283 msgstr "Portal do Software Público Brasileiro"
284 284  
... ... @@ -346,7 +346,7 @@ msgstr &quot;Não foi possível obter o tamanho do arquivo&quot;
346 346 msgid "Can't load %s"
347 347 msgstr "Não foi possível carregar %s"
348 348  
349   -#: dialog.c:361
  349 +#: dialog.c:367
350 350 msgid "Can't load file"
351 351 msgstr "Não foi possível carregar arquivo"
352 352  
... ... @@ -367,7 +367,7 @@ msgstr &quot;Incapaz de processar arquivos de descrição de UI em %s&quot;
367 367 msgid "Can't parse unnamed element"
368 368 msgstr "Incapaz de processar elemento sem nome"
369 369  
370   -#: dialog.c:339
  370 +#: dialog.c:345
371 371 #, c-format
372 372 msgid ""
373 373 "Can't save copy to file\n"
... ... @@ -380,7 +380,7 @@ msgstr &quot;&quot;
380 380 msgid "Can't save file"
381 381 msgstr "Não foi possível salvar arquivo"
382 382  
383   -#: dialog.c:314
  383 +#: dialog.c:320
384 384 #, c-format
385 385 msgid ""
386 386 "Can't save screen to file\n"
... ... @@ -389,7 +389,7 @@ msgstr &quot;&quot;
389 389 "Não foi possível salvar a tela no arquivo\n"
390 390 "%s"
391 391  
392   -#: dialog.c:328
  392 +#: dialog.c:334
393 393 #, c-format
394 394 msgid ""
395 395 "Can't save selection to file\n"
... ... @@ -656,7 +656,7 @@ msgstr &quot;Erro em fcntl(%s) ao ativar o modo não blocante&quot;
656 656 msgid "Error in ioctl(%s) when setting no blocking mode"
657 657 msgstr "Erro em ioctl(%s) ao ativar o modo não blocante"
658 658  
659   -#: dialog.c:359
  659 +#: dialog.c:365
660 660 #, c-format
661 661 msgid "Error loading %s"
662 662 msgstr "Erro lendo %s"
... ... @@ -1154,7 +1154,7 @@ msgstr &quot;Colar próximo&quot;
1154 1154 msgid "Paste text file"
1155 1155 msgstr "Colar arquivo texto"
1156 1156  
1157   -#: dialog.c:396
  1157 +#: dialog.c:402
1158 1158 msgid "Paste text file contents"
1159 1159 msgstr "Colar conteúdo de arquivo texto"
1160 1160  
... ... @@ -1491,7 +1491,7 @@ msgstr &quot;&quot;
1491 1491 msgid "Save copy"
1492 1492 msgstr "Salvar cópia"
1493 1493  
1494   -#: dialog.c:338
  1494 +#: dialog.c:344
1495 1495 msgid "Save copy to file"
1496 1496 msgstr "Salvar cópia para arquivo"
1497 1497  
... ... @@ -1499,7 +1499,7 @@ msgstr &quot;Salvar cópia para arquivo&quot;
1499 1499 msgid "Save screen"
1500 1500 msgstr "Salvar tela"
1501 1501  
1502   -#: dialog.c:313
  1502 +#: dialog.c:319
1503 1503 msgid "Save screen to file"
1504 1504 msgstr "Salvar tela para arquivo"
1505 1505  
... ... @@ -1507,7 +1507,7 @@ msgstr &quot;Salvar tela para arquivo&quot;
1507 1507 msgid "Save selected"
1508 1508 msgstr "Salvar seleção"
1509 1509  
1510   -#: dialog.c:327
  1510 +#: dialog.c:333
1511 1511 msgid "Save selection to file"
1512 1512 msgstr "Salvar seleção para arquivo"
1513 1513  
... ... @@ -1862,7 +1862,7 @@ msgstr &quot;&quot;
1862 1862 "O certificado fornecido não pode ser utilizado para a finalidade "
1863 1863 "especificada."
1864 1864  
1865   -#: dialog.c:436
  1865 +#: dialog.c:446
1866 1866 msgid ""
1867 1867 "This program is free software; you can redistribute it and/or modify it "
1868 1868 "under the terms of the GNU General Public License as published by the Free "
... ... @@ -2000,7 +2000,7 @@ msgstr &quot;Erro SSL inesperado&quot;
2000 2000 msgid "Unexpected SSL error <b>%ld</b>"
2001 2001 msgstr "Erro SSL <b>%ld</b> inesperado"
2002 2002  
2003   -#: uiparser/menubar.c:48 uiparser/toolbar.c:64 uiparser/popup.c:51
  2003 +#: uiparser/menubar.c:48 uiparser/toolbar.c:65 uiparser/popup.c:51
2004 2004 #, c-format
2005 2005 msgid "Unexpected action attribute in <%s>"
2006 2006 msgstr "Atributo inesperado \"action\" em <%s>"
... ... @@ -2131,7 +2131,7 @@ msgstr &quot;Usar teclas +/- para navegar por campos&quot;
2131 2131 msgid "Variable"
2132 2132 msgstr "Variável"
2133 2133  
2134   -#: dialog.c:476
  2134 +#: dialog.c:486
2135 2135 #, c-format
2136 2136 msgid "Version %s - Revision %s"
2137 2137 msgstr "Versão %s - Revisão %s"
... ... @@ -2342,7 +2342,7 @@ msgstr &quot;setsockopt(%s)&quot;
2342 2342 msgid "socket"
2343 2343 msgstr "socket"
2344 2344  
2345   -#: dialog.c:492
  2345 +#: dialog.c:502
2346 2346 msgid "translator-credits"
2347 2347 msgstr "translator-credits"
2348 2348  
... ...
src/pw3270/common/config.c
... ... @@ -64,37 +64,40 @@
64 64  
65 65 /*--[ Implement ]------------------------------------------------------------------------------------*/
66 66  
67   -/*
68   -#ifdef WIN32
69   -
70   -gchar * get_last_error_msg(void)
71   -{
72   - LPVOID lpMsgBuf;
73   - DWORD dw = GetLastError();
74   - gchar * ptr;
75   - gsize bytes_written;
76   -
77   - FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
78   - NULL,
79   - dw,
80   - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
81   - (LPTSTR) &lpMsgBuf,
82   - 0, NULL );
83   -
84   - for(ptr=lpMsgBuf;*ptr != '\n';ptr++);
85   - *ptr = 0;
  67 +#ifdef HAVE_WIN_REGISTRY
86 68  
87   - ptr = g_locale_to_utf8(lpMsgBuf,strlen(lpMsgBuf)-1,NULL,&bytes_written,NULL);
  69 + enum REG_KEY
  70 + {
  71 + REG_KEY_USER,
  72 + REG_KEY_SYSTEM,
  73 + REG_KEY_INEXISTENT
  74 + };
88 75  
89   - LocalFree(lpMsgBuf);
  76 + static enum REG_KEY registry_query(const gchar *group, const gchar *key, HKEY *hKey)
  77 + {
  78 + static HKEY predefined[] = { HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE };
  79 + gchar * path = g_strdup_printf("%s\\%s\\%s",registry_path,g_get_application_name(),group);
  80 + int f;
90 81  
91   - return ptr;
92   -}
  82 + for(f=0;f<G_N_ELEMENTS(predefined);f++)
  83 + {
  84 + if(RegOpenKeyEx(predefined[f],path,0,KEY_READ,hKey) == ERROR_SUCCESS)
  85 + {
  86 + if(RegQueryValueExA(*hKey,key,NULL,NULL,NULL,NULL) == ERROR_SUCCESS)
  87 + {
  88 + trace("Key[%s\%s] found at id %d",path,key,f);
  89 + g_free(path);
  90 + return f;
  91 + }
  92 + RegCloseKey(*hKey);
  93 + }
  94 + }
93 95  
94   -#endif // WIN32
95   -*/
  96 + trace("Key[%s\%s] not found",path,key,f);
  97 + g_free(path);
96 98  
97   -#ifdef HAVE_WIN_REGISTRY
  99 + return -1;
  100 + }
98 101  
99 102 static BOOL registry_open_key(const gchar *group, const gchar *key, REGSAM samDesired, HKEY *hKey)
100 103 {
... ... @@ -240,7 +243,29 @@ gchar * get_last_error_msg(void)
240 243 gboolean get_boolean_from_config(const gchar *group, const gchar *key, gboolean def)
241 244 {
242 245 #ifdef HAVE_WIN_REGISTRY
  246 + gboolean ret = def;
  247 + HKEY hKey;
  248 +
  249 + if(registry_query(group,key,&hKey) != REG_KEY_INEXISTENT)
  250 + {
  251 + DWORD data;
  252 + unsigned long datalen = sizeof(data);
  253 + unsigned long datatype;
  254 +
  255 + if(RegQueryValueExA(hKey,key,NULL,&datatype,(BYTE *) &data,&datalen) == ERROR_SUCCESS)
  256 + {
  257 + if(datatype == REG_DWORD)
  258 + ret = data ? TRUE : FALSE;
  259 + else
  260 + g_warning("Unexpected registry data type in %s\\%s\\%s\\%s",registry_path,g_get_application_name(),group,key);
  261 + }
243 262  
  263 + RegCloseKey(hKey);
  264 + }
  265 +
  266 + return ret;
  267 +
  268 +/*
244 269 HKEY key_handle;
245 270  
246 271 if(registry_open_key(group,key,KEY_READ,&key_handle))
... ... @@ -263,6 +288,7 @@ gchar * get_last_error_msg(void)
263 288 return ret;
264 289  
265 290 }
  291 +*/
266 292  
267 293 #else
268 294  
... ...