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/> | ... | ... |