diff --git a/src/include/pw3270.h b/src/include/pw3270.h index 93d46c4..3a02ada 100644 --- a/src/include/pw3270.h +++ b/src/include/pw3270.h @@ -56,7 +56,10 @@ LIB3270_EXPORT gboolean pw3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix); LIB3270_EXPORT H3270 * pw3270_get_session(GtkWidget *widget); LIB3270_EXPORT GtkWidget * pw3270_get_terminal_widget(GtkWidget *widget); + LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *first_element, ...); + LIB3270_EXPORT void pw3270_save_window_state(GtkWidget *widget, const gchar *name); + LIB3270_EXPORT void pw3270_restore_window_state(GtkWidget *widget, const gchar *name); G_END_DECLS diff --git a/src/pw3270/common/common.h.in b/src/pw3270/common/common.h.in index 4da7532..ae2975b 100644 --- a/src/pw3270/common/common.h.in +++ b/src/pw3270/common/common.h.in @@ -62,6 +62,7 @@ #include #include + #include #if defined( DEBUG ) #define trace(x, ...) fprintf(stderr,"%s(%d):\t" x "\n",__FILE__,__LINE__, __VA_ARGS__); fflush(stderr); @@ -84,6 +85,9 @@ gchar * build_data_filename(const gchar *first_element, ...); gchar * filename_from_va(const gchar *first_element, va_list args); + void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd); + void restore_window_from_config(const gchar *group, const gchar *key, GtkWidget *hwnd); + #ifdef WIN_REGISTRY_ENABLED gboolean get_registry_handle(const gchar *group, HKEY *hKey, REGSAM samDesired); void registry_foreach(HKEY parent, const gchar *name,void (*cbk)(const gchar *key, const gchar *val, gpointer *user_data), gpointer *user_data); diff --git a/src/pw3270/common/config.c b/src/pw3270/common/config.c index 84f1ace..0f8cbba 100644 --- a/src/pw3270/common/config.c +++ b/src/pw3270/common/config.c @@ -667,3 +667,80 @@ GKeyFile * get_application_keyfile(void) return program_config; } #endif // WIN_REGISTRY_ENABLED + + static const struct _WindowState + { + const char *name; + GdkWindowState flag; + void (*activate)(GtkWindow *); + } WindowState[] = + { + { "Maximized", GDK_WINDOW_STATE_MAXIMIZED, gtk_window_maximize }, + { "Iconified", GDK_WINDOW_STATE_ICONIFIED, gtk_window_iconify }, + { "Sticky", GDK_WINDOW_STATE_STICKY, gtk_window_stick } + }; + +void save_window_to_config(const gchar *group, const gchar *key, GtkWidget *hwnd) +{ + GdkWindowState CurrentState = gdk_window_get_state(gtk_widget_get_window(hwnd)); + + if( !(CurrentState & (GDK_WINDOW_STATE_FULLSCREEN|GDK_WINDOW_STATE_MAXIMIZED|GDK_WINDOW_STATE_ICONIFIED)) ) + { +#if defined( WIN_REGISTRY_ENABLED ) + + #warning save window state to registry + +#else + int f; + int pos[2]; + GKeyFile * conf = get_application_keyfile(); + gchar * id = g_strconcat(group,".",key,NULL); + + for(f=0;f