diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-08-06 17:22:32 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-08-06 17:22:32 +0200 |
commit | 416cdb8bbe331d1e945eacdd842f44d5e1d5f6ac (patch) | |
tree | da91eecefc23a6707aa64a6abb0b1b9984388e7c | |
parent | 9e6bb604f1efaf491fa8998d8965b11669b1373c (diff) | |
download | experiment-player-416cdb8bbe331d1e945eacdd842f44d5e1d5f6ac.tar.gz |
also save window state (maximization, iconification, etc) in config file
it is saved as an integer (bitmap) instead of introducing keys for all flags
-rw-r--r-- | src/config.c | 14 | ||||
-rw-r--r-- | src/experiment-player.h | 3 | ||||
-rw-r--r-- | src/main.c | 49 |
3 files changed, 65 insertions, 1 deletions
diff --git a/src/config.c b/src/config.c index 20f8260..03983cc 100644 --- a/src/config.c +++ b/src/config.c @@ -138,6 +138,20 @@ config_get_window_geometry(const gchar *window) } void +config_set_window_state(const gchar *window, GdkWindowState state) +{ + g_key_file_set_integer(keyfile, get_group_by_window(window), + "State", state); +} + +GdkWindowState +config_get_window_state(const gchar *window) +{ + return g_key_file_get_integer(keyfile, get_group_by_window(window), + "State", NULL); +} + +void config_set_quickopen_directory(const gchar *dir) { g_key_file_set_string(keyfile, "Directories", "Quick-Open", dir); diff --git a/src/experiment-player.h b/src/experiment-player.h index 9556ea8..43fd3d5 100644 --- a/src/experiment-player.h +++ b/src/experiment-player.h @@ -51,6 +51,7 @@ gboolean load_transcript_file(const gchar *file); void show_message_dialog_gerror(GError *err); const gchar *window_get_geometry(GtkWindow *window); +void window_set_state(GtkWindow *window, GdkWindowState state); extern GtkWidget *player_window, *info_window, @@ -83,6 +84,8 @@ void config_set_save_window_properties(gboolean enabled); gboolean config_get_save_window_properties(void); void config_set_window_geometry(const gchar *window, const gchar *geometry); gchar *config_get_window_geometry(const gchar *window); +void config_set_window_state(const gchar *window, GdkWindowState state); +GdkWindowState config_get_window_state(const gchar *window); void config_set_quickopen_directory(const gchar *dir); gchar *config_get_quickopen_directory(void); @@ -390,6 +390,40 @@ window_get_geometry(GtkWindow *window) return geometry; } +void +window_set_state(GtkWindow *window, GdkWindowState state) +{ + /* the GDK_WINDOW_STATE_WITHDRAWN flag is ignored */ + + if (state & GDK_WINDOW_STATE_ICONIFIED) + gtk_window_iconify(window); + else + gtk_window_deiconify(window); + + if (state & GDK_WINDOW_STATE_MAXIMIZED) + gtk_window_maximize(window); + else + gtk_window_unmaximize(window); + + if (state & GDK_WINDOW_STATE_STICKY) + gtk_window_stick(window); + else + gtk_window_unstick(window); + + if (state & GDK_WINDOW_STATE_FULLSCREEN) + gtk_window_fullscreen(window); + else + gtk_window_unfullscreen(window); + + if (state & GDK_WINDOW_STATE_ICONIFIED) + gtk_window_iconify(window); + else + gtk_window_deiconify(window); + + gtk_window_set_keep_above(window, state & GDK_WINDOW_STATE_ABOVE); + gtk_window_set_keep_below(window, state & GDK_WINDOW_STATE_BELOW); +} + /** @private */ int main(int argc, char *argv[]) @@ -554,11 +588,17 @@ main(int argc, char *argv[]) geometry); g_free(geometry); + window_set_state(GTK_WINDOW(player_window), + config_get_window_state("Player")); + geometry = config_get_window_geometry("Info"); if (geometry != NULL) gtk_window_parse_geometry(GTK_WINDOW(info_window), geometry); g_free(geometry); + + window_set_state(GTK_WINDOW(info_window), + config_get_window_state("Info")); } gtk_widget_show(player_window); @@ -572,13 +612,20 @@ main(int argc, char *argv[]) * update config file */ if (config_get_save_window_properties()) { - const gchar *geometry; + const gchar *geometry; + GdkWindowState state; geometry = window_get_geometry(GTK_WINDOW(player_window)); config_set_window_geometry("Player", geometry); + state = gdk_window_get_state(gtk_widget_get_window(player_window)); + config_set_window_state("Player", state); + geometry = window_get_geometry(GTK_WINDOW(info_window)); config_set_window_geometry("Info", geometry); + + state = gdk_window_get_state(gtk_widget_get_window(info_window)); + config_set_window_state("Info", state); } modified_style = gtk_widget_get_modifier_style(transcript_wizard_widget); |