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,8 +35,18 @@ | ||
35 | #include <glib/gstdio.h> | 35 | #include <glib/gstdio.h> |
36 | 36 | ||
37 | #ifdef WIN32 | 37 | #ifdef WIN32 |
38 | + | ||
38 | #include <windows.h> | 39 | #include <windows.h> |
39 | #define WIN_REGISTRY_ENABLED 1 | 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 | #endif // WIN32 | 50 | #endif // WIN32 |
41 | 51 | ||
42 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ | 52 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
@@ -469,13 +479,53 @@ void configuration_deinit(void) | @@ -469,13 +479,53 @@ void configuration_deinit(void) | ||
469 | 479 | ||
470 | gchar * build_data_filename(const gchar *first_element, ...) | 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 | #if defined( WIN_REGISTRY_ENABLED ) | 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 | HKEY hKey = 0; | 530 | HKEY hKey = 0; |
481 | LONG rc = 0; | 531 | LONG rc = 0; |
@@ -483,14 +533,6 @@ gchar * build_data_filename(const gchar *first_element, ...) | @@ -483,14 +533,6 @@ gchar * build_data_filename(const gchar *first_element, ...) | ||
483 | // Note: This could be needed: http://support.microsoft.com/kb/556009 | 533 | // Note: This could be needed: http://support.microsoft.com/kb/556009 |
484 | // http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx | 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 | rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,reg_datadir,0,KEY_QUERY_VALUE|KEY_WOW64_64KEY,&hKey); | 536 | rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,reg_datadir,0,KEY_QUERY_VALUE|KEY_WOW64_64KEY,&hKey); |
495 | SetLastError(rc); | 537 | SetLastError(rc); |
496 | 538 | ||
@@ -554,35 +596,37 @@ gchar * build_data_filename(const gchar *first_element, ...) | @@ -554,35 +596,37 @@ gchar * build_data_filename(const gchar *first_element, ...) | ||
554 | 596 | ||
555 | result = g_string_new(APPDATA); | 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 | const gchar * const * dir = g_get_system_data_dirs(); | 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 | va_start(args, first_element); | 631 | va_start(args, first_element); |
588 | 632 |
ui/00default.xml
@@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
37 | Extended attributes for 'save' actions: | 37 | Extended attributes for 'save' actions: |
38 | 38 | ||
39 | * overwrite='yes' to always overwrite file | 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 | <menuitem action='save' src='all' group='online' label='Save screen' /> | 43 | <menuitem action='save' src='all' group='online' label='Save screen' /> |
@@ -45,7 +45,7 @@ | @@ -45,7 +45,7 @@ | ||
45 | <menuitem action='save' src='copy' group='clipboard' label='Save copy' /> | 45 | <menuitem action='save' src='copy' group='clipboard' label='Save copy' /> |
46 | 46 | ||
47 | <separator/> | 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 | <menuitem action='print' src='selected' group='selection' label='Print selected' /> | 49 | <menuitem action='print' src='selected' group='selection' label='Print selected' /> |
50 | <menuitem action='print' src='copy' group='clipboard' label='Print copy' /> | 50 | <menuitem action='print' src='copy' group='clipboard' label='Print copy' /> |
51 | <separator/> | 51 | <separator/> |