Jeffrey Stedfast wrote:What I insist is that: if the user specify a filename, which doesn't exist and whose folder doesn't exist either, we should stop the following process.On Wed, 2003-09-24 at 11:37, Charles Zhang wrote: You mean that we can leave that filename to the upper caller to handle and it will create the necessary folders recursively? But it doesn't now. If we just return a filename with a wrong folder name to the upper, the same bug appears now. What should we do? Stop this filename whose pathdir doesn't exist, or raise another bug of no parsing path-file name? I have altered my patch. Then should I modify this instrument or just write some comment and leave it to others? Thanks you, Jeffrey. Best Regards Charles Zhang |
Index: composer/e-msg-composer-select-file.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-select-file.c,v
retrieving revision 1.25
diff -u -p -r1.25 e-msg-composer-select-file.c
--- composer/e-msg-composer-select-file.c 2 Apr 2003 18:51:01 -0000 1.25
+++ composer/e-msg-composer-select-file.c 25 Sep 2003 06:55:07 -0000
@@ -38,6 +38,29 @@
#include "e-msg-composer-select-file.h"
+static gboolean
+ok_press_callback (GtkWidget *okbutton,
+ GdkEventButton *event,
+ GtkFileSelection *selection)
+{
+ char *filename = gtk_file_selection_get_filename (selection);
+ char *pathname = g_path_get_dirname (filename);
+ gboolean ret = FALSE;
+ struct stat st;
+
+ if (stat (pathname, &st) == -1 || (! S_ISDIR (st.st_mode))) {
+ /* pathdir doesn't exist or isn't a valid dir */
+ ret = TRUE;
+ }
+ else if (stat (filename, &st) == 0 && (! S_ISREG (st.st_mode))) {
+ /* file exists but isn't a regular file */
+ ret = TRUE;
+ }
+
+ g_free (pathname);
+ return ret;
+}
+
static GtkFileSelection *
run_selector(EMsgComposer *composer, const char *title, int multi, gboolean *showinline_p)
{
@@ -52,6 +75,10 @@ run_selector(EMsgComposer *composer, con
gnome_window_icon_set_from_file((GtkWindow *)selection, EVOLUTION_DATADIR "/images/evolution/compose-message.png");
gtk_file_selection_set_select_multiple((GtkFileSelection *)selection, multi);
+ g_signal_connect (((GtkFileSelection *) selection)->ok_button,
+ "button_press_event", G_CALLBACK (ok_press_callback),
+ (gpointer) selection);
+
/* restore last path used */
path = g_object_get_data((GObject *)composer, "attach_path");
if (path == NULL) {
@@ -98,6 +125,9 @@ e_msg_composer_select_file (EMsgComposer
{
GtkFileSelection *selection;
char *name = NULL;
+
+ /* FIXME: the next instrument should be "run_selector(composer, title, FALSE, NULL)",
+ otherwise this dialog's title is wrong and more than one file can be selected. */
selection = run_selector(composer, _("Attach file(s)"), TRUE, NULL);
if (selection) {