aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-08-06 17:22:32 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-08-06 17:22:32 +0200
commit416cdb8bbe331d1e945eacdd842f44d5e1d5f6ac (patch)
treeda91eecefc23a6707aa64a6abb0b1b9984388e7c
parent9e6bb604f1efaf491fa8998d8965b11669b1373c (diff)
downloadexperiment-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.c14
-rw-r--r--src/experiment-player.h3
-rw-r--r--src/main.c49
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);
diff --git a/src/main.c b/src/main.c
index 5d7324f..a9c244a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);