Commit 85ea9530466b252c6cd49177eb91d2dd5521b70c
1 parent
2b9270e0
Exists in
master
and in
5 other branches
Corrigindo save/restore da janela principal
Showing
7 changed files
with
56 additions
and
23 deletions
Show diff stats
src/include/pw3270.h
| @@ -58,8 +58,8 @@ | @@ -58,8 +58,8 @@ | ||
| 58 | LIB3270_EXPORT GtkWidget * pw3270_get_terminal_widget(GtkWidget *widget); | 58 | LIB3270_EXPORT GtkWidget * pw3270_get_terminal_widget(GtkWidget *widget); |
| 59 | 59 | ||
| 60 | LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *first_element, ...); | 60 | LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *first_element, ...); |
| 61 | - LIB3270_EXPORT void pw3270_save_window_state(GtkWidget *widget, const gchar *name); | ||
| 62 | - LIB3270_EXPORT void pw3270_restore_window_state(GtkWidget *widget, const gchar *name); | 61 | + LIB3270_EXPORT void pw3270_save_window_size(GtkWidget *widget, const gchar *name); |
| 62 | + LIB3270_EXPORT void pw3270_restore_window(GtkWidget *widget, const gchar *name); | ||
| 63 | 63 | ||
| 64 | #ifdef HAVE_GTKMAC | 64 | #ifdef HAVE_GTKMAC |
| 65 | #include <gtk-mac-bundle.h> | 65 | #include <gtk-mac-bundle.h> |
src/pw3270/common/common.h
| @@ -82,7 +82,10 @@ | @@ -82,7 +82,10 @@ | ||
| 82 | gchar * build_data_filename(const gchar *first_element, ...); | 82 | gchar * build_data_filename(const gchar *first_element, ...); |
| 83 | gchar * filename_from_va(const gchar *first_element, va_list args); | 83 | gchar * filename_from_va(const gchar *first_element, va_list args); |
| 84 | 84 | ||
| 85 | - void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd); | 85 | + |
| 86 | + void save_window_state_to_config(const gchar *group, const gchar *key, GdkWindowState CurrentState); | ||
| 87 | + void save_window_size_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd); | ||
| 88 | + | ||
| 86 | void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd); | 89 | void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd); |
| 87 | 90 | ||
| 88 | #ifdef WIN_REGISTRY_ENABLED | 91 | #ifdef WIN_REGISTRY_ENABLED |
src/pw3270/common/config.c
| @@ -680,12 +680,8 @@ GKeyFile * get_application_keyfile(void) | @@ -680,12 +680,8 @@ GKeyFile * get_application_keyfile(void) | ||
| 680 | { "Sticky", GDK_WINDOW_STATE_STICKY, gtk_window_stick } | 680 | { "Sticky", GDK_WINDOW_STATE_STICKY, gtk_window_stick } |
| 681 | }; | 681 | }; |
| 682 | 682 | ||
| 683 | -void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd) | 683 | +void save_window_state_to_config(const gchar *group, const gchar *key, GdkWindowState CurrentState) |
| 684 | { | 684 | { |
| 685 | - GdkWindowState CurrentState = gdk_window_get_state(gtk_widget_get_window(hwnd)); | ||
| 686 | - | ||
| 687 | - if( !(CurrentState & (GDK_WINDOW_STATE_FULLSCREEN|GDK_WINDOW_STATE_MAXIMIZED|GDK_WINDOW_STATE_ICONIFIED)) ) | ||
| 688 | - { | ||
| 689 | #if defined( WIN_REGISTRY_ENABLED ) | 685 | #if defined( WIN_REGISTRY_ENABLED ) |
| 690 | 686 | ||
| 691 | gchar * path = g_strdup_printf("%s\\%s\\%s\\%s",registry_path,g_get_application_name(),group,key); | 687 | gchar * path = g_strdup_printf("%s\\%s\\%s\\%s",registry_path,g_get_application_name(),group,key); |
| @@ -696,17 +692,13 @@ void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd | @@ -696,17 +692,13 @@ void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd | ||
| 696 | if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) | 692 | if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) |
| 697 | { | 693 | { |
| 698 | int f; | 694 | int f; |
| 699 | - int pos[2]; | ||
| 700 | - | ||
| 701 | for(f=0;f<G_N_ELEMENTS(WindowState);f++) | 695 | for(f=0;f<G_N_ELEMENTS(WindowState);f++) |
| 702 | { | 696 | { |
| 703 | DWORD value = (CurrentState & WindowState[f].flag) ? 1 : 0; | 697 | DWORD value = (CurrentState & WindowState[f].flag) ? 1 : 0; |
| 698 | +// trace("%s=%s",WindowState[f].name,value ? "Yes" : "No"); | ||
| 704 | RegSetValueEx(hKey, WindowState[f].name, 0, REG_DWORD,(const BYTE *) &value,sizeof(value)); | 699 | RegSetValueEx(hKey, WindowState[f].name, 0, REG_DWORD,(const BYTE *) &value,sizeof(value)); |
| 705 | } | 700 | } |
| 706 | 701 | ||
| 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); | 702 | RegCloseKey(hKey); |
| 711 | } | 703 | } |
| 712 | 704 | ||
| @@ -714,20 +706,50 @@ void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd | @@ -714,20 +706,50 @@ void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd | ||
| 714 | 706 | ||
| 715 | #else | 707 | #else |
| 716 | int f; | 708 | int f; |
| 717 | - int pos[2]; | ||
| 718 | GKeyFile * conf = get_application_keyfile(); | 709 | GKeyFile * conf = get_application_keyfile(); |
| 719 | gchar * id = g_strconcat(group,".",key,NULL); | 710 | gchar * id = g_strconcat(group,".",key,NULL); |
| 720 | 711 | ||
| 721 | for(f=0;f<G_N_ELEMENTS(WindowState);f++) | 712 | for(f=0;f<G_N_ELEMENTS(WindowState);f++) |
| 722 | g_key_file_set_boolean(conf,id,WindowState[f].name,CurrentState & WindowState[f].flag); | 713 | g_key_file_set_boolean(conf,id,WindowState[f].name,CurrentState & WindowState[f].flag); |
| 723 | 714 | ||
| 715 | + g_free(id); | ||
| 716 | + | ||
| 717 | +#endif // WIN_REGISTRY_ENABLED | ||
| 718 | +} | ||
| 719 | + | ||
| 720 | +void save_window_size_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd) | ||
| 721 | +{ | ||
| 722 | +#if defined( WIN_REGISTRY_ENABLED ) | ||
| 723 | + | ||
| 724 | + gchar * path = g_strdup_printf("%s\\%s\\%s\\%s",registry_path,g_get_application_name(),group,key); | ||
| 725 | + | ||
| 726 | + HKEY hKey; | ||
| 727 | + DWORD disp; | ||
| 728 | + | ||
| 729 | + if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS) | ||
| 730 | + { | ||
| 731 | + int pos[2]; | ||
| 732 | + | ||
| 733 | + gtk_window_get_size(GTK_WINDOW(hwnd),&pos[0],&pos[1]); | ||
| 734 | + | ||
| 735 | + RegSetValueEx(hKey, "Size", 0, REG_BINARY,(const BYTE *) pos,sizeof(pos)); | ||
| 736 | + | ||
| 737 | + RegCloseKey(hKey); | ||
| 738 | + } | ||
| 739 | + | ||
| 740 | + g_free(path); | ||
| 741 | + | ||
| 742 | +#else | ||
| 743 | + int pos[2]; | ||
| 744 | + GKeyFile * conf = get_application_keyfile(); | ||
| 745 | + gchar * id = g_strconcat(group,".",key,NULL); | ||
| 746 | + | ||
| 724 | gtk_window_get_size(GTK_WINDOW(hwnd),&pos[0],&pos[1]); | 747 | gtk_window_get_size(GTK_WINDOW(hwnd),&pos[0],&pos[1]); |
| 725 | g_key_file_set_integer_list(conf,id,"size",pos,2); | 748 | g_key_file_set_integer_list(conf,id,"size",pos,2); |
| 726 | 749 | ||
| 727 | g_free(id); | 750 | g_free(id); |
| 728 | 751 | ||
| 729 | #endif // WIN_REGISTRY_ENABLED | 752 | #endif // WIN_REGISTRY_ENABLED |
| 730 | - } | ||
| 731 | } | 753 | } |
| 732 | 754 | ||
| 733 | void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd) | 755 | void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd) |
src/pw3270/main.c
| @@ -247,7 +247,7 @@ int main(int argc, char *argv[]) | @@ -247,7 +247,7 @@ int main(int argc, char *argv[]) | ||
| 247 | if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN)) | 247 | if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN)) |
| 248 | gtk_window_fullscreen(GTK_WINDOW(toplevel)); | 248 | gtk_window_fullscreen(GTK_WINDOW(toplevel)); |
| 249 | else | 249 | else |
| 250 | - pw3270_restore_window_state(toplevel,"toplevel"); | 250 | + pw3270_restore_window(toplevel,"toplevel"); |
| 251 | 251 | ||
| 252 | init_plugins(toplevel); | 252 | init_plugins(toplevel); |
| 253 | gtk_window_present(GTK_WINDOW(toplevel)); | 253 | gtk_window_present(GTK_WINDOW(toplevel)); |
| @@ -260,8 +260,6 @@ int main(int argc, char *argv[]) | @@ -260,8 +260,6 @@ int main(int argc, char *argv[]) | ||
| 260 | 260 | ||
| 261 | deinit_plugins(toplevel); | 261 | deinit_plugins(toplevel); |
| 262 | 262 | ||
| 263 | - pw3270_save_window_state(toplevel,"toplevel"); | ||
| 264 | - | ||
| 265 | } | 263 | } |
| 266 | 264 | ||
| 267 | return rc; | 265 | return rc; |
src/pw3270/tools.c
| @@ -89,12 +89,13 @@ LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *fir | @@ -89,12 +89,13 @@ LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *fir | ||
| 89 | return path; | 89 | return path; |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | -LIB3270_EXPORT void pw3270_save_window_state(GtkWidget *widget, const gchar *name) | 92 | +LIB3270_EXPORT void pw3270_save_window_size(GtkWidget *widget, const gchar *name) |
| 93 | { | 93 | { |
| 94 | - save_window_to_config("window", name, widget); | 94 | + trace("%s",__FUNCTION__); |
| 95 | + save_window_size_to_config("window", name, widget); | ||
| 95 | } | 96 | } |
| 96 | 97 | ||
| 97 | -LIB3270_EXPORT void pw3270_restore_window_state(GtkWidget *widget, const gchar *name) | 98 | +LIB3270_EXPORT void pw3270_restore_window(GtkWidget *widget, const gchar *name) |
| 98 | { | 99 | { |
| 99 | restore_window_from_config("window", name, widget); | 100 | restore_window_from_config("window", name, widget); |
| 100 | } | 101 | } |
src/pw3270/uiparser/parser.c
| @@ -192,7 +192,7 @@ void parser_build(struct parser *p, GtkWidget *widget) | @@ -192,7 +192,7 @@ void parser_build(struct parser *p, GtkWidget *widget) | ||
| 192 | g_object_set_data_full(G_OBJECT(p->toplevel),"action_groups",a_info.group,(GDestroyNotify) release_action_group); | 192 | g_object_set_data_full(G_OBJECT(p->toplevel),"action_groups",a_info.group,(GDestroyNotify) release_action_group); |
| 193 | g_object_set_data_full(G_OBJECT(p->toplevel),"string_chunk",p->strings,(GDestroyNotify) g_string_chunk_free); | 193 | g_object_set_data_full(G_OBJECT(p->toplevel),"string_chunk",p->strings,(GDestroyNotify) g_string_chunk_free); |
| 194 | 194 | ||
| 195 | - g_signal_connect(p->toplevel, "destroy", G_CALLBACK (gtk_main_quit), NULL); | 195 | + g_signal_connect(p->toplevel, "destroy", G_CALLBACK(gtk_main_quit), NULL); |
| 196 | 196 | ||
| 197 | // Has "view" menu? Update it. | 197 | // Has "view" menu? Update it. |
| 198 | parent = GTK_WIDGET(g_hash_table_lookup(p->element_list[UI_ELEMENT_MENU],"view")); | 198 | parent = GTK_WIDGET(g_hash_table_lookup(p->element_list[UI_ELEMENT_MENU],"view")); |
src/pw3270/window.c
| @@ -110,7 +110,7 @@ | @@ -110,7 +110,7 @@ | ||
| 110 | 110 | ||
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | - static gboolean window_state_event(GtkWidget *window, GdkEventWindowState *event, GtkWidget *widget) | 113 | + static gboolean window_state_event(GtkWidget *window, GdkEventWindowState *event, GtkWidget *widget) |
| 114 | { | 114 | { |
| 115 | gboolean fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN ? TRUE : FALSE; | 115 | gboolean fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN ? TRUE : FALSE; |
| 116 | GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions"); | 116 | GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions"); |
| @@ -124,6 +124,14 @@ | @@ -124,6 +124,14 @@ | ||
| 124 | 124 | ||
| 125 | lib3270_set_toggle(v3270_get_session(widget),LIB3270_TOGGLE_FULL_SCREEN,fullscreen); | 125 | lib3270_set_toggle(v3270_get_session(widget),LIB3270_TOGGLE_FULL_SCREEN,fullscreen); |
| 126 | 126 | ||
| 127 | + save_window_state_to_config("window", "toplevel", event->new_window_state); | ||
| 128 | + | ||
| 129 | + return 0; | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + static gboolean configure_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) | ||
| 133 | + { | ||
| 134 | + save_window_size_to_config("window","toplevel",widget); | ||
| 127 | return 0; | 135 | return 0; |
| 128 | } | 136 | } |
| 129 | 137 | ||
| @@ -484,6 +492,7 @@ | @@ -484,6 +492,7 @@ | ||
| 484 | 492 | ||
| 485 | // Connect window signals | 493 | // Connect window signals |
| 486 | g_signal_connect(widget,"window_state_event",G_CALLBACK(window_state_event),widget->terminal); | 494 | g_signal_connect(widget,"window_state_event",G_CALLBACK(window_state_event),widget->terminal); |
| 495 | + g_signal_connect(widget,"configure_event",G_CALLBACK(configure_event),widget->terminal); | ||
| 487 | 496 | ||
| 488 | 497 | ||
| 489 | // Finish setup | 498 | // Finish setup |