Commit 7a750bff7084d8c0b00cffb217f1d0ca3b0d7aaa
1 parent
057233e1
Exists in
master
and in
1 other branch
Fixing "save" action.
Showing
2 changed files
with
85 additions
and
5 deletions
Show diff stats
src/dialogs/save/convenience.c
@@ -36,19 +36,70 @@ | @@ -36,19 +36,70 @@ | ||
36 | 36 | ||
37 | LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error) | 37 | LIB3270_EXPORT int v3270_save(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename, GError **error) |
38 | { | 38 | { |
39 | - if(*error) | 39 | + g_autofree gchar * message = NULL; |
40 | + | ||
41 | + if(filename) | ||
42 | + { | ||
43 | + message = g_strdup_printf("Can't save contents to file \"%s\"",filename); | ||
44 | + } | ||
45 | + else | ||
40 | { | 46 | { |
41 | - return -1; | 47 | + message = g_strdup("Can't save contents to file"); |
42 | } | 48 | } |
43 | 49 | ||
44 | if(!v3270_is_connected(widget)) | 50 | if(!v3270_is_connected(widget)) |
45 | { | 51 | { |
46 | - *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); | ||
47 | - return -1; | 52 | + if(error) |
53 | + { | ||
54 | + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); | ||
55 | + } | ||
56 | + else | ||
57 | + { | ||
58 | + GtkWidget *popup = gtk_message_dialog_new_with_markup( | ||
59 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | ||
60 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
61 | + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, | ||
62 | + message | ||
63 | + ); | ||
64 | + | ||
65 | + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed")); | ||
66 | + | ||
67 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN)); | ||
68 | + | ||
69 | + gtk_dialog_run(GTK_DIALOG(popup)); | ||
70 | + gtk_widget_destroy(popup); | ||
71 | + } | ||
72 | + return errno = ENOTCONN; | ||
48 | } | 73 | } |
49 | 74 | ||
50 | lib3270_trace_event(v3270_get_session(widget),"save action activated (type=%d)",(int) mode); | 75 | lib3270_trace_event(v3270_get_session(widget),"save action activated (type=%d)",(int) mode); |
51 | - return lib3270_save(v3270_get_session(widget),mode,filename); | 76 | + int rc = lib3270_save(v3270_get_session(widget),mode,filename); |
77 | + | ||
78 | + if(!rc) | ||
79 | + return 0; | ||
80 | + | ||
81 | + if(error) | ||
82 | + { | ||
83 | + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),rc,"%s",strerror(rc)); | ||
84 | + } | ||
85 | + else | ||
86 | + { | ||
87 | + GtkWidget *popup = gtk_message_dialog_new_with_markup( | ||
88 | + GTK_WINDOW(gtk_widget_get_toplevel(widget)), | ||
89 | + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
90 | + GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, | ||
91 | + message | ||
92 | + ); | ||
93 | + | ||
94 | + gtk_window_set_title(GTK_WINDOW(popup),_("Operation has failed")); | ||
95 | + | ||
96 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(popup),"%s",strerror(ENOTCONN)); | ||
97 | + | ||
98 | + gtk_dialog_run(GTK_DIALOG(popup)); | ||
99 | + gtk_widget_destroy(popup); | ||
100 | + } | ||
101 | + | ||
102 | + return errno = rc; | ||
52 | } | 103 | } |
53 | 104 | ||
54 | int v3270_save_all(GtkWidget *widget, const gchar *filename, GError **error) | 105 | int v3270_save_all(GtkWidget *widget, const gchar *filename, GError **error) |
src/dialogs/save/save.c
@@ -100,6 +100,32 @@ | @@ -100,6 +100,32 @@ | ||
100 | gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); | 100 | gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); |
101 | } | 101 | } |
102 | 102 | ||
103 | + /* | ||
104 | + static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GObject *action) | ||
105 | + { | ||
106 | + const gchar * attr = g_object_get_data(action,"overwrite"); | ||
107 | + GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; | ||
108 | + GtkWidget * dialog; | ||
109 | + | ||
110 | + if(attr && !g_ascii_strcasecmp(attr,"yes")) | ||
111 | + return ret; | ||
112 | + | ||
113 | + dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(chooser), | ||
114 | + GTK_DIALOG_DESTROY_WITH_PARENT, | ||
115 | + GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL, | ||
116 | + "%s",_("The file already exists. Replace it?")); | ||
117 | + | ||
118 | + | ||
119 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) | ||
120 | + ret = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN; | ||
121 | + | ||
122 | + gtk_widget_destroy(dialog); | ||
123 | + | ||
124 | + return ret; | ||
125 | + | ||
126 | + } | ||
127 | + */ | ||
128 | + | ||
103 | #ifdef WIN32 | 129 | #ifdef WIN32 |
104 | static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { | 130 | static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) { |
105 | #else | 131 | #else |
@@ -120,6 +146,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon | @@ -120,6 +146,9 @@ static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIcon | ||
120 | NULL | 146 | NULL |
121 | ); | 147 | ); |
122 | 148 | ||
149 | + // g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(action)); | ||
150 | + | ||
151 | + | ||
123 | if(filename) | 152 | if(filename) |
124 | gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); | 153 | gtk_entry_set_text(GTK_ENTRY(dialog->filename),filename); |
125 | 154 |