aboutsummaryrefslogtreecommitdiff
path: root/src/filesel.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-03-16 10:05:40 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-03-16 10:05:40 +0000
commitb3ac92fc0bc5bdca7c8a73d6041be760df347dda (patch)
tree2a41d3010ca16155aa3add8c35193d2f79adcc12 /src/filesel.c
parenta2c35308bd6815962c36a3108cefe0069cdc1b33 (diff)
remember the state of the expander of file save dialog.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@176 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/filesel.c')
-rw-r--r--src/filesel.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/filesel.c b/src/filesel.c
index be1b1cb6..e031f177 100644
--- a/src/filesel.c
+++ b/src/filesel.c
@@ -21,6 +21,7 @@
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkfilechooserdialog.h>
+#include <gtk/gtkexpander.h>
#include <gtk/gtkstock.h>
#include "main.h"
@@ -37,6 +38,9 @@ static GSList *filesel_select_file_full (const gchar *title,
static GtkWidget *filesel_create (const gchar *title,
GtkFileChooserAction action);
+static void filesel_save_expander_set_expanded (GtkWidget *dialog,
+ gboolean expanded);
+static gboolean filesel_save_expander_get_expanded (GtkWidget *dialog);
gchar *filesel_select_file(const gchar *title, const gchar *file,
GtkFileChooserAction action)
@@ -68,6 +72,7 @@ static GSList *filesel_select_file_full(const gchar *title, const gchar *file,
gchar *cwd;
GtkWidget *dialog;
gchar *prev_dir;
+ static gboolean save_expander_expanded = FALSE;
GSList *list = NULL;
if (!path_table)
@@ -95,6 +100,11 @@ static GSList *filesel_select_file_full(const gchar *title, const gchar *file,
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog),
multiple);
+ if (action == GTK_FILE_CHOOSER_ACTION_SAVE && save_expander_expanded) {
+ filesel_save_expander_set_expanded
+ (dialog, save_expander_expanded);
+ }
+
gtk_widget_show(dialog);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
@@ -108,6 +118,10 @@ static GSList *filesel_select_file_full(const gchar *title, const gchar *file,
}
}
+ if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
+ save_expander_expanded =
+ filesel_save_expander_get_expanded(dialog);
+
manage_window_focus_out(dialog, NULL, NULL);
gtk_widget_destroy(dialog);
@@ -158,3 +172,39 @@ static GtkWidget *filesel_create(const gchar *title,
return dialog;
}
+
+static void container_foreach_cb(GtkWidget *widget, gpointer data)
+{
+ GtkWidget **expander = (GtkWidget **)data;
+
+ if (*expander == NULL) {
+ if (GTK_IS_EXPANDER(widget))
+ *expander = widget;
+ else if (GTK_IS_CONTAINER(widget))
+ gtk_container_foreach(GTK_CONTAINER(widget),
+ container_foreach_cb, data);
+ }
+}
+
+static void filesel_save_expander_set_expanded(GtkWidget *dialog,
+ gboolean expanded)
+{
+ GtkWidget *expander = NULL;
+
+ gtk_container_foreach(GTK_CONTAINER(dialog), container_foreach_cb,
+ &expander);
+ if (expander)
+ gtk_expander_set_expanded(GTK_EXPANDER(expander), expanded);
+}
+
+static gboolean filesel_save_expander_get_expanded(GtkWidget *dialog)
+{
+ GtkWidget *expander = NULL;
+
+ gtk_container_foreach(GTK_CONTAINER(dialog), container_foreach_cb,
+ &expander);
+ if (expander)
+ return gtk_expander_get_expanded(GTK_EXPANDER(expander));
+ else
+ return FALSE;
+}