Commit ae8854de92bd4ee26bf38e9e1ffcf738ff767798
1 parent
f4244f19
Exists in
master
and in
5 other branches
Melhorando montagem de nomes de arquivo
Showing
2 changed files
with
76 additions
and
32 deletions
Show diff stats
src/gtk/common/config.c
... | ... | @@ -35,8 +35,18 @@ |
35 | 35 | #include <glib/gstdio.h> |
36 | 36 | |
37 | 37 | #ifdef WIN32 |
38 | + | |
38 | 39 | #include <windows.h> |
39 | 40 | #define WIN_REGISTRY_ENABLED 1 |
41 | + | |
42 | + #ifndef KEY_WOW64_64KEY | |
43 | + #define KEY_WOW64_64KEY 0x0100 | |
44 | + #endif // KEY_WOW64_64KEY | |
45 | + | |
46 | + #ifndef KEY_WOW64_32KEY | |
47 | + #define KEY_WOW64_32KEY 0x0200 | |
48 | + #endif // KEY_WOW64_64KEY | |
49 | + | |
40 | 50 | #endif // WIN32 |
41 | 51 | |
42 | 52 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
... | ... | @@ -469,13 +479,53 @@ void configuration_deinit(void) |
469 | 479 | |
470 | 480 | gchar * build_data_filename(const gchar *first_element, ...) |
471 | 481 | { |
472 | - va_list args; | |
473 | - GString * result; | |
474 | - const gchar * element; | |
482 | + static const gchar * datadir = NULL; | |
483 | + const gchar * appname[] = { g_get_application_name(), PACKAGE_NAME }; | |
484 | + GString * result = NULL; | |
485 | + const gchar * element; | |
486 | + va_list args; | |
487 | + | |
488 | + if(datadir) | |
489 | + result = g_string_new(datadir); | |
475 | 490 | |
476 | 491 | #if defined( WIN_REGISTRY_ENABLED ) |
492 | + if(!result) | |
493 | + { | |
494 | + // No predefined datadir, search registry | |
495 | + int p; | |
496 | + | |
497 | + for(p=0;p<G_N_ELEMENTS(appname) && !result;p++) | |
498 | + { | |
499 | + gchar * path = g_strconcat("SOFTWARE\\",appname[p],"\\datadir",NULL); | |
500 | + HKEY hKey = 0; | |
501 | + LONG rc = 0; | |
502 | + | |
503 | + // Note: This could be needed: http://support.microsoft.com/kb/556009 | |
504 | + // http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx | |
505 | + | |
506 | + rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_QUERY_VALUE|KEY_WOW64_64KEY,&hKey); | |
507 | + SetLastError(rc); | |
477 | 508 | |
478 | - static const gchar *reg_datadir = "SOFTWARE\\"PACKAGE_NAME"\\datadir"; | |
509 | + if(rc == ERROR_SUCCESS) | |
510 | + { | |
511 | + char data[4096]; | |
512 | + unsigned long datalen = sizeof(data); // data field length(in), data returned length(out) | |
513 | + unsigned long datatype; // #defined in winnt.h (predefined types 0-11) | |
514 | + | |
515 | + if(RegQueryValueExA(hKey,NULL,NULL,&datatype,(LPBYTE) data,&datalen) == ERROR_SUCCESS) | |
516 | + result = g_string_new(g_strchomp(data)); | |
517 | + RegCloseKey(hKey); | |
518 | + } | |
519 | + | |
520 | + g_free(path); | |
521 | + } | |
522 | + } | |
523 | +#endif // WIN_REGISTRY_ENABLED | |
524 | + | |
525 | +/* | |
526 | +#if defined( WIN_REGISTRY_ENABLED ) | |
527 | + | |
528 | + gchar *reg_datadir = g_strconcat("SOFTWARE\\",g_get_application_name(),"\\datadir",NULL); | |
479 | 529 | |
480 | 530 | HKEY hKey = 0; |
481 | 531 | LONG rc = 0; |
... | ... | @@ -483,14 +533,6 @@ gchar * build_data_filename(const gchar *first_element, ...) |
483 | 533 | // Note: This could be needed: http://support.microsoft.com/kb/556009 |
484 | 534 | // http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx |
485 | 535 | |
486 | -#ifndef KEY_WOW64_64KEY | |
487 | - #define KEY_WOW64_64KEY 0x0100 | |
488 | -#endif // KEY_WOW64_64KEY | |
489 | - | |
490 | -#ifndef KEY_WOW64_32KEY | |
491 | - #define KEY_WOW64_32KEY 0x0200 | |
492 | -#endif // KEY_WOW64_64KEY | |
493 | - | |
494 | 536 | rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,reg_datadir,0,KEY_QUERY_VALUE|KEY_WOW64_64KEY,&hKey); |
495 | 537 | SetLastError(rc); |
496 | 538 | |
... | ... | @@ -554,35 +596,37 @@ gchar * build_data_filename(const gchar *first_element, ...) |
554 | 596 | |
555 | 597 | result = g_string_new(APPDATA); |
556 | 598 | |
557 | -#else | |
599 | +#endif | |
558 | 600 | |
559 | - static const gchar *datadir = NULL; | |
601 | +*/ | |
560 | 602 | |
561 | - if(!datadir) | |
603 | + if(!result) | |
562 | 604 | { |
605 | + // Search for application folder on system data dirs | |
563 | 606 | const gchar * const * dir = g_get_system_data_dirs(); |
564 | - int f; | |
607 | + int p; | |
565 | 608 | |
566 | - for(f=0;dir[f] && !datadir;f++) | |
609 | + for(p=0;p<G_N_ELEMENTS(appname) && !datadir;p++) | |
567 | 610 | { |
568 | - gchar *name = g_build_filename(dir[f],PACKAGE_NAME,NULL); | |
569 | - if(g_file_test(name,G_FILE_TEST_IS_DIR)) | |
570 | - datadir = name; | |
571 | - else | |
572 | - g_free(name); | |
573 | - } | |
611 | + int f; | |
574 | 612 | |
575 | - if(!datadir) | |
576 | - { | |
577 | - datadir = g_get_current_dir(); | |
578 | - g_warning("Unable to find application datadir, using %s",datadir); | |
613 | + for(f=0;dir[f] && !datadir;f++) | |
614 | + { | |
615 | + gchar *name = g_build_filename(dir[f],appname[p],NULL); | |
616 | + if(g_file_test(name,G_FILE_TEST_IS_DIR)) | |
617 | + datadir = name; | |
618 | + else | |
619 | + g_free(name); | |
620 | + } | |
579 | 621 | } |
580 | 622 | |
581 | 623 | } |
582 | 624 | |
583 | - result = g_string_new(datadir); | |
584 | - | |
585 | -#endif | |
625 | + if(!result) | |
626 | + { | |
627 | + result = g_string_new(g_get_current_dir()); | |
628 | + g_warning("Unable to find application datadir, using %s",result->str); | |
629 | + } | |
586 | 630 | |
587 | 631 | va_start(args, first_element); |
588 | 632 | ... | ... |
ui/00default.xml
... | ... | @@ -37,7 +37,7 @@ |
37 | 37 | Extended attributes for 'save' actions: |
38 | 38 | |
39 | 39 | * overwrite='yes' to always overwrite file |
40 | - * filename='PATH' to save to a predefined file (no user save dialog) | |
40 | + * filename='PATH' to save to a predefined file whithout user interaction | |
41 | 41 | |
42 | 42 | ---> |
43 | 43 | <menuitem action='save' src='all' group='online' label='Save screen' /> |
... | ... | @@ -45,7 +45,7 @@ |
45 | 45 | <menuitem action='save' src='copy' group='clipboard' label='Save copy' /> |
46 | 46 | |
47 | 47 | <separator/> |
48 | - <menuitem action='print' src='all' key='Print' icon='print' label='Print' /> | |
48 | + <menuitem action='print' src='all' group='online' key='Print' icon='print' label='Print' /> | |
49 | 49 | <menuitem action='print' src='selected' group='selection' label='Print selected' /> |
50 | 50 | <menuitem action='print' src='copy' group='clipboard' label='Print copy' /> |
51 | 51 | <separator/> | ... | ... |