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 58 LIB3270_EXPORT GtkWidget * pw3270_get_terminal_widget(GtkWidget *widget);
59 59  
60 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 64 #ifdef HAVE_GTKMAC
65 65 #include <gtk-mac-bundle.h>
... ...
src/pw3270/common/common.h
... ... @@ -82,7 +82,10 @@
82 82 gchar * build_data_filename(const gchar *first_element, ...);
83 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 89 void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd);
87 90  
88 91 #ifdef WIN_REGISTRY_ENABLED
... ...
src/pw3270/common/config.c
... ... @@ -680,12 +680,8 @@ GKeyFile * get_application_keyfile(void)
680 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 685 #if defined( WIN_REGISTRY_ENABLED )
690 686  
691 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 692 if(RegCreateKeyEx(HKEY_CURRENT_USER,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,NULL,&hKey,&disp) == ERROR_SUCCESS)
697 693 {
698 694 int f;
699   - int pos[2];
700   -
701 695 for(f=0;f<G_N_ELEMENTS(WindowState);f++)
702 696 {
703 697 DWORD value = (CurrentState & WindowState[f].flag) ? 1 : 0;
  698 +// trace("%s=%s",WindowState[f].name,value ? "Yes" : "No");
704 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 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 706  
715 707 #else
716 708 int f;
717   - int pos[2];
718 709 GKeyFile * conf = get_application_keyfile();
719 710 gchar * id = g_strconcat(group,".",key,NULL);
720 711  
721 712 for(f=0;f<G_N_ELEMENTS(WindowState);f++)
722 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 747 gtk_window_get_size(GTK_WINDOW(hwnd),&pos[0],&pos[1]);
725 748 g_key_file_set_integer_list(conf,id,"size",pos,2);
726 749  
727 750 g_free(id);
728 751  
729 752 #endif // WIN_REGISTRY_ENABLED
730   - }
731 753 }
732 754  
733 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 247 if(pw3270_get_toggle(toplevel,LIB3270_TOGGLE_FULL_SCREEN))
248 248 gtk_window_fullscreen(GTK_WINDOW(toplevel));
249 249 else
250   - pw3270_restore_window_state(toplevel,"toplevel");
  250 + pw3270_restore_window(toplevel,"toplevel");
251 251  
252 252 init_plugins(toplevel);
253 253 gtk_window_present(GTK_WINDOW(toplevel));
... ... @@ -260,8 +260,6 @@ int main(int argc, char *argv[])
260 260  
261 261 deinit_plugins(toplevel);
262 262  
263   - pw3270_save_window_state(toplevel,"toplevel");
264   -
265 263 }
266 264  
267 265 return rc;
... ...
src/pw3270/tools.c
... ... @@ -89,12 +89,13 @@ LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *fir
89 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 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 192 g_object_set_data_full(G_OBJECT(p->toplevel),"action_groups",a_info.group,(GDestroyNotify) release_action_group);
193 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 197 // Has "view" menu? Update it.
198 198 parent = GTK_WIDGET(g_hash_table_lookup(p->element_list[UI_ELEMENT_MENU],"view"));
... ...
src/pw3270/window.c
... ... @@ -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 115 gboolean fullscreen = event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN ? TRUE : FALSE;
116 116 GtkAction **action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"named_actions");
... ... @@ -124,6 +124,14 @@
124 124  
125 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 135 return 0;
128 136 }
129 137  
... ... @@ -484,6 +492,7 @@
484 492  
485 493 // Connect window signals
486 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 498 // Finish setup
... ...