Commit 85ea9530466b252c6cd49177eb91d2dd5521b70c

Authored by perry.werneck@gmail.com
1 parent 2b9270e0

Corrigindo save/restore da janela principal

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