Commit 8a71cc37e3f4b8e9f624268b2bc33a4ed1e17910
1 parent
7dcee0b9
Exists in
master
and in
5 other branches
Windows - Incluindo save/restore do estado da janela no registry
Showing
6 changed files
with
82 additions
and
32 deletions
Show diff stats
src/include/lib3270/config.h.in
src/include/v3270.h
| ... | ... | @@ -112,9 +112,9 @@ |
| 112 | 112 | |
| 113 | 113 | // V3270_OIA_CAPS, /**< Caps indication ("A" or blank) */ |
| 114 | 114 | |
| 115 | -#ifdef X3270_PRINTER | |
| 115 | +#ifdef HAVE_PRINTER | |
| 116 | 116 | V3270_OIA_PRINTER, /**< Printer indication ("P" or blank) */ |
| 117 | -#endif // X3270_PRINTER | |
| 117 | +#endif // HAVE_PRINTER | |
| 118 | 118 | |
| 119 | 119 | V3270_OIA_FIELD_COUNT |
| 120 | 120 | ... | ... |
src/lib3270/ansi.c
| ... | ... | @@ -124,7 +124,7 @@ |
| 124 | 124 | #define CSDES LIB3270_ANSI_STATE_CSDES |
| 125 | 125 | #define N1 LIB3270_ANSI_STATE_N1 |
| 126 | 126 | #define DECP LIB3270_ANSI_STATE_DECP |
| 127 | -#define TEXT LIB3270_ANSI_STATE_TEXT | |
| 127 | +// #define TEXT LIB3270_ANSI_STATE_TEXT | |
| 128 | 128 | #define TEXT2 LIB3270_ANSI_STATE_TEXT2 |
| 129 | 129 | #define MBPEND LIB3270_ANSI_STATE_MBPEND |
| 130 | 130 | |
| ... | ... | @@ -1597,14 +1597,14 @@ xterm_text_mode(H3270 *hSession, int ig1 unused, int ig2 unused) |
| 1597 | 1597 | { |
| 1598 | 1598 | nx = 0; |
| 1599 | 1599 | n[0] = 0; |
| 1600 | - return TEXT; | |
| 1600 | + return LIB3270_ANSI_STATE_TEXT; | |
| 1601 | 1601 | } |
| 1602 | 1602 | |
| 1603 | 1603 | static enum lib3270_ansi_state |
| 1604 | 1604 | xterm_text_semicolon(H3270 *hSession, int ig1 unused, int ig2 unused) |
| 1605 | 1605 | { |
| 1606 | 1606 | tx = 0; |
| 1607 | - return TEXT2; | |
| 1607 | + return LIB3270_ANSI_STATE_TEXT2; | |
| 1608 | 1608 | } |
| 1609 | 1609 | |
| 1610 | 1610 | static enum lib3270_ansi_state | ... | ... |
src/lib3270/session.c
src/pw3270/common/config.c
| ... | ... | @@ -688,7 +688,29 @@ void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd |
| 688 | 688 | { |
| 689 | 689 | #if defined( WIN_REGISTRY_ENABLED ) |
| 690 | 690 | |
| 691 | - #warning save window state to registry | |
| 691 | + gchar * path = g_strdup_printf("%s\\%s\\%s\\%s",registry_path,g_get_application_name(),group,key); | |
| 692 | + | |
| 693 | + HKEY hKey; | |
| 694 | + DWORD disp; | |
| 695 | + | |
| 696 | + if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) | |
| 697 | + { | |
| 698 | + int f; | |
| 699 | + int pos[2]; | |
| 700 | + | |
| 701 | + for(f=0;f<G_N_ELEMENTS(WindowState);f++) | |
| 702 | + { | |
| 703 | + DWORD value = (CurrentState & WindowState[f].flag) ? 1 : 0; | |
| 704 | + RegSetValueEx(hKey, WindowState[f].name, 0, REG_DWORD,(const BYTE *) &value,sizeof(value)); | |
| 705 | + } | |
| 706 | + | |
| 707 | + gtk_window_get_size(GTK_WINDOW(hwnd),&pos[0],&pos[1]); | |
| 708 | + RegSetValueEx(hKey, "Size", 0, REG_BINARY,(const BYTE *) pos,sizeof(pos)); | |
| 709 | + | |
| 710 | + RegCloseKey(hKey); | |
| 711 | + } | |
| 712 | + | |
| 713 | + g_free(path); | |
| 692 | 714 | |
| 693 | 715 | #else |
| 694 | 716 | int f; |
| ... | ... | @@ -712,7 +734,57 @@ void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget |
| 712 | 734 | { |
| 713 | 735 | #if defined( WIN_REGISTRY_ENABLED ) |
| 714 | 736 | |
| 715 | - #warning Implement window state saving on window | |
| 737 | + gchar * path = g_strdup_printf("%s\\%s\\%s\\%s",registry_path,g_get_application_name(),group,key); | |
| 738 | + HKEY hKey; | |
| 739 | + | |
| 740 | + if(RegOpenKeyEx(HKEY_CURRENT_USER,path,0,KEY_READ,&hKey) == ERROR_SUCCESS) | |
| 741 | + { | |
| 742 | + int f; | |
| 743 | + int pos[2]; | |
| 744 | + unsigned long datalen; | |
| 745 | + unsigned long datatype; | |
| 746 | + | |
| 747 | + | |
| 748 | + datalen = sizeof(pos); | |
| 749 | + if(RegQueryValueExA(hKey,"Size",NULL,&datatype,(BYTE *) pos,&datalen) == ERROR_SUCCESS) | |
| 750 | + { | |
| 751 | + if(datatype == REG_BINARY && datalen == sizeof(pos)) | |
| 752 | + { | |
| 753 | + gtk_window_resize(GTK_WINDOW(hwnd),pos[0],pos[1]); | |
| 754 | + } | |
| 755 | + else | |
| 756 | + { | |
| 757 | + g_warning("Unexpected registry data in %s\\Size",path); | |
| 758 | + } | |
| 759 | + } | |
| 760 | + | |
| 761 | + | |
| 762 | + for(f=0;f<G_N_ELEMENTS(WindowState);f++) | |
| 763 | + { | |
| 764 | + DWORD data; | |
| 765 | + | |
| 766 | + datalen = sizeof(data); | |
| 767 | + | |
| 768 | + if(RegQueryValueExA(hKey,WindowState[f].name,NULL,&datatype,(BYTE *) &data,&datalen) == ERROR_SUCCESS) | |
| 769 | + { | |
| 770 | + if(datatype == REG_DWORD) | |
| 771 | + { | |
| 772 | + if(data) | |
| 773 | + WindowState[f].activate(GTK_WINDOW(hwnd)); | |
| 774 | + | |
| 775 | + } | |
| 776 | + else | |
| 777 | + { | |
| 778 | + g_warning("Unexpected registry data type in %s\\%s",path,WindowState[f].name); | |
| 779 | + } | |
| 780 | + } | |
| 781 | + } | |
| 782 | + | |
| 783 | + | |
| 784 | + RegCloseKey(hKey); | |
| 785 | + } | |
| 786 | + | |
| 787 | + g_free(path); | |
| 716 | 788 | |
| 717 | 789 | #else |
| 718 | 790 | gchar * id = g_strconcat(group,".",key,NULL); | ... | ... |
src/pw3270/v3270/oia.c
| ... | ... | @@ -502,9 +502,9 @@ void v3270_draw_oia(cairo_t *cr, H3270 *host, int row, int cols, struct v3270_me |
| 502 | 502 | { V3270_OIA_TIMER, setup_timer_position }, |
| 503 | 503 | { V3270_OIA_SPINNER, setup_spinner_position }, |
| 504 | 504 | { V3270_OIA_LUNAME, setup_luname_position }, |
| 505 | -#ifdef X3270_PRINTER | |
| 505 | +#ifdef HAVE_PRINTER | |
| 506 | 506 | { V3270_OIA_PRINTER, setup_single_char_right }, |
| 507 | -#endif // X3270_PRINTER | |
| 507 | +#endif // HAVE_PRINTER | |
| 508 | 508 | { V3270_OIA_SCRIPT, setup_single_char_right }, |
| 509 | 509 | { V3270_OIA_INSERT, setup_insert_position }, |
| 510 | 510 | { V3270_OIA_TYPEAHEAD, setup_single_char_right }, |
| ... | ... | @@ -1047,27 +1047,10 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) |
| 1047 | 1047 | cairo_destroy(cr); |
| 1048 | 1048 | break; |
| 1049 | 1049 | |
| 1050 | -/* | |
| 1051 | - case LIB3270_FLAG_SECURE: | |
| 1052 | - cr = set_update_region(terminal,&r,V3270_OIA_SSL); | |
| 1053 | - v3270_draw_ssl_status(cr,terminal->host,&terminal->metrics,terminal->color,r); | |
| 1054 | - gtk_widget_queue_draw_area(GTK_WIDGET(terminal),r->x,r->y,r->width,r->height); | |
| 1055 | - cairo_destroy(cr); | |
| 1056 | - break; | |
| 1057 | -*/ | |
| 1058 | - | |
| 1059 | 1050 | case LIB3270_FLAG_TYPEAHEAD: |
| 1060 | 1051 | update_text_field(terminal,on,V3270_OIA_TYPEAHEAD,"T"); |
| 1061 | 1052 | break; |
| 1062 | 1053 | |
| 1063 | -/* | |
| 1064 | -#if defined(LIB3270_FLAG_PRINTER) && defined(X3270_PRINTER) | |
| 1065 | - case LIB3270_FLAG_PRINTER: | |
| 1066 | - update_text_field(terminal,on,V3270_OIA_PRINTER,"P"); | |
| 1067 | - break; | |
| 1068 | -#endif // LIB3270_FLAG_PRINTER | |
| 1069 | -*/ | |
| 1070 | - | |
| 1071 | 1054 | default: |
| 1072 | 1055 | return; |
| 1073 | 1056 | } | ... | ... |